Hey everyone,
Just a dummy implementation of a Parallel Payment and an accompanying IPN Handler using the C#/.NET SDK. Feel free to use it however you like.
//Handles PayPal IPN
public String IPN()
{
//Post back to either sandbox or live
string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
//string strLive = "https://www.paypal.com/cgi-bin/webscr";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);
////Set values for the request back
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
byte[] param = Request.BinaryRead(Request.ContentLength);
string strRequest = Encoding.ASCII.GetString(param);
strRequest += "&cmd=_notify-validate";
req.ContentLength = strRequest.Length;
//Send the request to PayPal and get the response
StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
streamOut.Write(strRequest);
streamOut.Close();
StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
string strResponse = streamIn.ReadToEnd();
streamIn.Close();
if (strResponse == "VERIFIED")
{
//check the payment_status is Completed
//check that txn_id has not been previously processed
//check that receiver_email is your Primary PayPal email
//check that payment_amount/payment_currency are correct
//process payment
}
else if (strResponse == "INVALID")
{
//log for manual investigation
}
else
{
//log response/ipn data for manual investigation
}
return "";
}
//Pay for an order
public void Pay(int OrderId)
{
RequestEnvelope envelopeRequest = new RequestEnvelope();
envelopeRequest.errorLanguage = "en_US";
PaySample paySample = new PaySample();
List listReceiver = new List();
// Amount to be credited to the receiver's account
Receiver receiverA = new Receiver(Convert.ToDecimal("4.00"));
// A receiver's email address
receiverA.email = "test_buyer1@learnerlessons.com.au";
listReceiver.Add(receiverA);
// Amount to be credited to the receiver's account
Receiver receiverB = new Receiver(Convert.ToDecimal("2.00"));
// A receiver's email address
receiverB.email = "test_buyer2@learnerlessons.com.au";
listReceiver.Add(receiverB);
ReceiverList receiverList = new ReceiverList(listReceiver);
PayRequest requestPay = new PayRequest(envelopeRequest, "PAY", "http://localhost:53034/orders/cancel", "AUD", receiverList, "http://localhost:53034/orders/return");
requestPay.reverseAllParallelPaymentsOnError = true;
requestPay.ipnNotificationUrl = "http://123.123.123.123/Orders/IPN";
//Send request to paypal, retrieve payKey
PayResponse payResponse = paySample.PayAPIOperations(requestPay);
Response.Redirect("https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_ap-payment&paykey=" + payResponse.payKey);
}