Only requirement is to implement correctly HTTP POST request and encode correctly JSON request to our server.
Example of such request using C# in .Net (simple console application) follows:
// // EXAMPLE OF LOGIN REQUEST // using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.IO; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { // Create a request using a URL that can receive a post. WebRequest request = WebRequest.Create("https://getting-started.postaffiliatepro.com/scripts/server.php"); // Set the Method property of the request to POST. request.Method = "POST"; // Create POST data and convert it to a byte array. //WRITE JSON DATA TO VARIABLE D string postData = "D={\"requests\":[{\"C\":\"Pap_Api_AuthService\", \"M\":\"authenticate\", \"fields\":[[\"name\",\"value\"],[\"Id\",\"\"],[\"username\",\"user@example.com\"],[\"password\",\"ab9ce908\"],[\"rememberMe\",\"Y\"],[\"language\",\"en-US\"],[\"roleType\",\"M\"],[\"apiVersion\",\"\"]]}],\"C\":\"Gpf_Rpc_Server\", \"M\":\"run\"}"; byte[] byteArray = Encoding.UTF8.GetBytes(postData); // Set the ContentType property of the WebRequest. request.ContentType = "application/x-www-form-urlencoded"; // Set the ContentLength property of the WebRequest. request.ContentLength = byteArray.Length; // Get the request stream. Stream dataStream = request.GetRequestStream(); // Write the data to the request stream. dataStream.Write(byteArray, 0, byteArray.Length); // Close the Stream object. dataStream.Close(); // Get the response. WebResponse response = request.GetResponse(); // Display the status. // Console.WriteLine(((HttpWebResponse)response).StatusDescription); // Get the stream containing content returned by the server. dataStream = response.GetResponseStream(); // Open the stream using a StreamReader for easy access. StreamReader reader = new StreamReader(dataStream); // Read the content. string responseFromServer = reader.ReadToEnd(); // Display the content. Console.WriteLine(responseFromServer); // Clean up the streams. reader.Close(); dataStream.Close(); response.Close(); } } }
Description of fields in postData variable:
Now you should just correctly encode/decode JSON data from request.
JSON encoding/decoding can be done in .NET by multiple libraries, which can serialize/unserialize data into/from JSON format.
Example of such library could be: Json.NET
To use this library in your project try to do following:
1. download Json.Net library
2. Extract Newtonsoft.Json.dll and Newtonsoft.Json.xml from the archive's /bin directory into your own applications.
3. Add a reference to Newtonsoft.Json.dll within Visual Studio.NET to your project.
Now you can decode e.g. response from request we executed in last example:
JsonSerializer serializer = new JsonSerializer(); object result = JsonConvert.DeserializeObject(responseFromServer);Best will be to create interfaces for each type of request and use unserialiation directly to .Net objects - this is not part of this short example.
How do I get proper request content?
Just use our PHP api file. For example here is how you can get data from Pap_Api_PayoutsHistoryGrid table:
include '../api/PapApi.class.php'; $session = new Pap_Api_Session("path_to_your_server.php_file"); $session->setDebug(true); //this will produce output with request/response if(!$session->login("merchant_name", "merchant_pass")) { die('Failed authentication'); } $payoutHistoryrequest = new Pap_Api_PayoutsHistoryGrid($session); $payoutHistoryrequest->sendNow(); $historyGrid = $payoutHistoryrequest->getGrid(); $recordset = $historyGrid->getRecordset(); //print list of payouts foreach($recordset as $rec) { echo $rec->get('id') . ';' . $rec->get('amount') . ';' . $rec->get('accountid') . ';' . $rec->get('users') .';' . '</br>'; }
And you'll get answer similar to this:
REQUEST: {"C":"Gpf_Rpc_Server","M":"run","requests":[{"C":"Pap_Merchants_Payout_PayoutsHistoryGrid","M":"getRows"}],"S":"ep6udpp8i2mgnh70vdp52on5h3"}
RESPONSE: [{"rows":[["id","payouthistoryid","dateinserted","merchantnote","affiliatenote","accountid","amount","users"],["0bc99b08","0bc99b08","2011-03-25 05:39:49","","","default1",99,"1 payee"]],"count":1}]
0bc99b08;99;default1;1 payee;
RESPONSE: [{"rows":[["id","payouthistoryid","dateinserted","merchantnote","affiliatenote","accountid","amount","users"],["0bc99b08","0bc99b08","2011-03-25 05:39:49","","","default1",99,"1 payee"]],"count":1}]
0bc99b08;99;default1;1 payee;
Notice rows starts with REQUEST and RESPONSE.
REQUEST is what the request string should looks like.
JSON data model description: