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); }
Leave a Reply