public ActionResult paypal_confirmation(Int32 id = 0) { // Get the payer id string payerId = ""; if (Request.Params["PayerID"] != null) { payerId = Server.UrlDecode(Request.Params["PayerID"]); } // Get the order Order order = Order.GetOneById(id); // Make sure that the order not is null if(order == null) { // Redirect the user to the order confirmation page return RedirectToAction("index", "home"); } // Get the webshop settings KeyStringList webshopSettings = WebshopSetting.GetAllFromCache(); // Get credentials string paypalClientId = webshopSettings.Get("PAYPAL-CLIENT-ID"); string paypalClientSecret = webshopSettings.Get("PAYPAL-CLIENT-SECRET"); string paypalMode = webshopSettings.Get("PAYPAL-MODE"); Dictionary<string, string> config = new Dictionary<string, string> { { "mode", paypalMode } }; // Create a error message string error_message = ""; // Create a payment variable PayPal.Api.Payments.Payment createdPayment = null; try { // Create the credential token PayPal.OAuthTokenCredential tokenCredential = new PayPal.OAuthTokenCredential(paypalClientId, paypalClientSecret, config); // Create the api context PayPal.APIContext paypalContext = new PayPal.APIContext(tokenCredential.GetAccessToken()); paypalContext.Config = config; // Get the payment PayPal.Api.Payments.Payment payment = PayPal.Api.Payments.Payment.Get(paypalContext, order.payment_token); // Create the payment excecution PayPal.Api.Payments.PaymentExecution paymentExecution = new PayPal.Api.Payments.PaymentExecution(); paymentExecution.payer_id = payerId; paypalContext.HTTPHeaders = null; // Excecute the payment createdPayment = payment.Execute(paypalContext, paymentExecution); } catch (Exception ex) { error_message = ex.Message; } // Check if the created payment is different from null if (createdPayment != null && createdPayment.state == "approved") { // Get the sale id List<PayPal.Api.Payments.RelatedResources> resources = createdPayment.transactions[0].related_resources; // Save the paypal sale id Order.SetPaymentToken(order.id, resources[0].sale.id); // Update the order status Order.UpdatePaymentStatus(order.id, "payment_status_paid"); // Add customer files CustomerFile.AddCustomerFiles(order); } // Redirect the user to the order confirmation page return RedirectToAction("confirmation", "order", new { id = id }); } // End of the paypal_confirmation method
public ActionResult ArgumentsSold(String id, // your ID String token, // PayPal token String PayerID) { String payment_id = String.Empty; String executeUrlFromCreatedPayment = String.Empty; // ................................ // ======> // THINGS WE NEED TO USE THE PAYPAL REST API // ======> String argumentsPlusPayPalClentID = " ... your user ID for Arguments Plus ..."; // ======> String argumentsPlusPayPalSecret = " ... this is YOUR PASSWORD ..."; String argumentsPlusPayPalClentID = "AU ... 6G"; // todo ... your PayPal REST API SDK user ID String argumentsPlusPayPalSecret = "EA ... -f"; // todo ... your PayPal REST API SDK PASSWORD // ======> String payPalRestApiEndpoint = "api.sandbox.paypal.com"; // For TESTING !!! // ======> // = "api.paypal.com"; // For LIVE !!! Dictionary<String, String> sdkConfig = new Dictionary<String, String>(); sdkConfig.Add("mode", "sandbox"); // ................................ // POTENTIAL POINT OF FAILURE // example: "Exception in HttpConnection Execute: Invalid HTTP response The operation has timed out" String oAuthAccessTokenForPayPal = String.Empty; // scope outside of try/catch try { oAuthAccessTokenForPayPal = new PayPal.OAuthTokenCredential(argumentsPlusPayPalClentID, argumentsPlusPayPalSecret, sdkConfig).GetAccessToken(); } // .GetAccessToken takes us over to PayPal catch (Exception) { throw; // todo ... make this code more robust } // ................................ PayPal.APIContext apiContext = new PayPal.APIContext(oAuthAccessTokenForPayPal); apiContext.Config = sdkConfig; // ................................ // id is our Guid for reconnecting to our customer's invoice PayPal.Api.Payments.Payment createdInvoice = GetSavedPayPalInvoice(id); // ................................ // now we convert the approved invoice into an actual payment PayPal.Api.Payments.Payment payment = new PayPal.Api.Payments.Payment(); payment.id = createdInvoice.id; // use the previously returned "invoice" identifier PayPal.Api.Payments.PaymentExecution askPayPalForMoney = new PayPal.Api.Payments.PaymentExecution(); askPayPalForMoney.payer_id = PayerID; // from Query string ==> ?token=EC-3LN850372M719842K&PayerID=JJT6YSAZSFJTC PayPal.Api.Payments.Payment paidInvoice = null; // scope outside of try/catch try { // an APPROVED PAYMENT morphs into a SALE !!!!!!!!!!!!!!!!!!!!! paidInvoice = payment.Execute(apiContext, askPayPalForMoney); // off to PayPal // Here, if all has gone well, we're just right back from PayPal // and the money for the above invoice is now in our PayPal Merchant Account. ViewBag.PaidInvoice = paidInvoice; } catch (PayPal.Exception.ConnectionException connectionExceptionPayPal) { if (String.Compare(connectionExceptionPayPal.Message, "Invalid HTTP response The remote server returned an error: (400) Bad Request.") == 0) { String response_PAYMENT_STATE_INVALID = "{\"name\":\"PAYMENT_STATE_INVALID\",\"message\":\"This request is invalid due to the current state of the payment\",\"information_link\":\"https://developer.paypal.com/webapps/developer/docs/api/#PAYMENT_STATE_INVALID\",\"debug_id\":\""; Int32 response_PAYMENT_STATE_INVALID_Length = response_PAYMENT_STATE_INVALID.Length; if (String.Compare(connectionExceptionPayPal.Response.Substring(0,response_PAYMENT_STATE_INVALID_Length), response_PAYMENT_STATE_INVALID) == 0) { // todo Take appropriate action } else { // todo Take appropriate action } } else { // todo Take appropriate action } throw; // todo complete this code ... for PRODUCTION, more robustness is a must! } catch (Exception generalExceptionGettingMoney) { throw; // todo ... deal with this error appropriately ("throw" is not appropriate) } // ................................ // PayPal has provided data -- we capture as much or as little as when require. // We can save the PayPal data and/or display it on our web page, et cetera. // Remember: respect your customers' privacy. Protect their data. String payment_state = String.Empty; // N.B.: this is NOT the province/state/region payment_state = paidInvoice.state; // Possible Values: pending, approved ViewBag.Payment_State = payment_state; String payment_intent = String.Empty; payment_intent = paidInvoice.intent; // Expected Value: "sale" ViewBag.Payment_Intent = payment_intent; String payment_method = String.Empty; payment_method = paidInvoice.payer.payment_method; // Expected Value: "paypal" ViewBag.Payment_Method = payment_method; String parent_payment = String.Empty; parent_payment = paidInvoice.transactions[0].related_resources[0].sale.parent_payment; ViewBag.Parent_Payment = parent_payment; String update_time = String.Empty; update_time = paidInvoice.update_time; // "2014-02-05T04:06:39Z" string ViewBag.Update_Time = update_time; String create_time = String.Empty; create_time = paidInvoice.create_time; // "2014-02-05T04:06:39Z" string ViewBag.Create_Time = create_time; // ................................ String payPal_email_address = String.Empty; // paidInvoice::email "*****@*****.**" string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.email)) payPal_email_address = paidInvoice.payer.payer_info.email; ViewBag.PayPal_Email_Address = payPal_email_address; String payPal_first_name = String.Empty; // paidInvoice::first_name "gerry" string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.first_name)) payPal_first_name = paidInvoice.payer.payer_info.first_name; ViewBag.PayPal_First_Name = payPal_first_name; String payPal_last_name = String.Empty; // paidInvoice::last_name "lowry" string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.last_name)) payPal_last_name = paidInvoice.payer.payer_info.last_name; ViewBag.PayPal_Last_Name = payPal_last_name; String payPal_phone = String.Empty; // paidInvoice::phone null string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.phone)) payPal_phone = paidInvoice.payer.payer_info.phone; ViewBag.PayPal_Phone = payPal_phone; String payPal_city = String.Empty; // paidInvoice::city "SAN Jose" string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.shipping_address.city)) payPal_city = paidInvoice.payer.payer_info.shipping_address.city; ViewBag.City = payPal_city; String payPal_country_code = String.Empty; // paidInvoice::country_code "US" string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.shipping_address.country_code)) payPal_country_code = paidInvoice.payer.payer_info.shipping_address.country_code; ViewBag.PayPal_Country_Code = payPal_country_code; String payPal_address_line1 = String.Empty; // paidInvoice::line1 "1 Main St" string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.shipping_address.line1)) payPal_address_line1 = paidInvoice.payer.payer_info.shipping_address.line1; ViewBag.PayPal_Address_Line1 = payPal_address_line1; String payPal_address_line2 = String.Empty; // paidInvoice::line2 null string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.shipping_address.line2)) payPal_address_line2 = paidInvoice.payer.payer_info.shipping_address.line2; ViewBag.PayPal_Address_Line2 = payPal_address_line2; String payPal_postal_code = String.Empty; // paidInvoice::postal_code "95131" string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.shipping_address.postal_code)) payPal_postal_code = paidInvoice.payer.payer_info.shipping_address.postal_code; ViewBag.PayPal_Postal_Code = payPal_postal_code; String payPal_address_state = String.Empty; // paidInvoice::state "CA" string if (!String.IsNullOrWhiteSpace(paidInvoice.payer.payer_info.shipping_address.state)) payPal_address_state = paidInvoice.payer.payer_info.shipping_address.state; ViewBag.PayPal_Address_State = payPal_address_state; // ................................ String payPal_transaction_amount_total = String.Empty; // paidInvoice::transation[0].amount" string if (!String.IsNullOrWhiteSpace(paidInvoice.transactions[0].amount.total)) payPal_transaction_amount_total = paidInvoice.transactions[0].amount.total; ViewBag.PayPal_Transaction_Amount_Total = payPal_transaction_amount_total; String payPal_transaction_amount_currency = String.Empty; // paidInvoice::transation[0].amount" string if (!String.IsNullOrWhiteSpace(paidInvoice.transactions[0].amount.total)) payPal_transaction_amount_currency = paidInvoice.transactions[0].amount.currency; ViewBag.PayPal_Transaction_Amount_Currency = payPal_transaction_amount_currency; String payPal_transaction_descripition = String.Empty; // paidInvoice::transation[0].amount" string if (!String.IsNullOrWhiteSpace(paidInvoice.transactions[0].amount.total)) payPal_transaction_descripition = paidInvoice.transactions[0].description; ViewBag.PayPal_Transaction_Description = payPal_transaction_descripition; // ................................ return View(); }