/// <summary> /// This method is called first in order to perform the initial authorization for payment. /// </summary> /// <param name="amt"></param> /// <param name="token"></param> /// <param name="retMsg"></param> /// <returns></returns> public bool DoCheckoutAuth(OrderViewModel order, ref string token, ref NVPCodec decoder) { if (bSandbox) { pEndPointURL = pEndPointURL_SB; } NVPCodec encoder = new NVPCodec(); encoder[NVPProperties.Properties.METHOD] = NVPProperties.Methods.AuthorizePayment; encoder[NVPProperties.Properties.BRANDNAME] = "Contoso Sports League"; encoder[NVPProperties.Properties.PAYMENTREQUEST_AMT] = order.Total.ToString(); encoder[NVPProperties.Properties.FIRSTNAME] = order.FirstName; encoder[NVPProperties.Properties.LASTNAME] = order.LastName; encoder[NVPProperties.Properties.ADDRESS] = order.Address; encoder[NVPProperties.Properties.CITY] = order.City; encoder[NVPProperties.Properties.STATE] = order.State; encoder[NVPProperties.Properties.POSTALCODE] = order.PostalCode; encoder[NVPProperties.Properties.NAME_ON_CREDIT_CARD] = order.NameOnCard; encoder[NVPProperties.Properties.CREDIT_CARD_TYPE] = order.CreditCardType; encoder[NVPProperties.Properties.CREDIT_CARD_NUMBER] = order.CreditCardNumber; encoder[NVPProperties.Properties.CREDIT_CARD_EXPDATE] = order.ExpirationDate; encoder[NVPProperties.Properties.CCV2] = order.CCV; string pStrrequestforNvp = encoder.Encode(); string pStresponsenvp = HttpCall(pStrrequestforNvp); decoder = new NVPCodec(); decoder.Decode(pStresponsenvp); string strAck = decoder[NVPProperties.Properties.ACK].ToLower(); if (strAck != null && (strAck == "success" || strAck == "successwithwarning")) { return true; } else { return false; } }
public async Task<ActionResult> Complete(OrderViewModel order) { try { // TODO: Complete the payment processing via the gateway and update the order... NVPAPICaller gatewayCaller = new NVPAPICaller(); string token = ""; string finalPaymentAmount = ""; NVPCodec decoder = new NVPCodec(); token = Session["token"].ToString(); //PayerID = Session["payerId"].ToString(); //finalPaymentAmount = Session["payment_amt"].ToString(); finalPaymentAmount = order.Total.ToString("C2"); bool ret = gatewayCaller.DoCheckoutPayment(finalPaymentAmount, token, ref decoder); if (ret) { // Retrieve PayPal confirmation value. string PaymentConfirmation = decoder[NVPProperties.Properties.TRANSACTIONID].ToString(); order.PaymentTransactionId = PaymentConfirmation; ProductContext _db = new ProductContext(); // Get the current order id. int currentOrderId = -1; if (Session["currentOrderId"] != null && Session["currentOrderId"].ToString() != string.Empty) { currentOrderId = Convert.ToInt32(Session["currentOrderID"]); } Order myCurrentOrder; if (currentOrderId >= 0) { // Get the order based on order id. myCurrentOrder = _db.Orders.Single(o => o.OrderId == currentOrderId); // Update the order to reflect payment has been completed. myCurrentOrder.PaymentTransactionId = PaymentConfirmation; // Save to DB. _db.SaveChanges(); // Queue up a receipt generation request, asynchronously. await new AzureQueueHelper().QueueReceiptRequest(currentOrderId); // Report successful event to Application Insights. var eventProperties = new Dictionary<string, string>(); eventProperties.Add("CustomerEmail", order.Email); eventProperties.Add("OrderTotal", finalPaymentAmount); eventProperties.Add("PaymentTransactionId", PaymentConfirmation); TelemetryHelper.TrackEvent("OrderCompleted", eventProperties); } // Clear shopping cart. using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions(cartId)) { usersShoppingCart.EmptyCart(); } // Clear order id. Session["currentOrderId"] = string.Empty; } else { var error = gatewayCaller.PopulateGatewayErrorModel(decoder); // Report failed event to Application Insights. Exception ex = new Exception(error.ToString()); ex.Source = "Contoso.Apps.SportsLeague.Web.CheckoutController.cs"; TelemetryHelper.TrackException(ex); // Redirect to the checkout error view: return RedirectToAction("Error", error); } } catch (WebException wex) { ExceptionUtility.LogException(wex, "CheckoutController.cs Complete Action"); var error = new CheckoutErrorViewModel { ErrorCode = wex.Message }; if (wex.Response != null && wex.Response.GetType() == typeof(HttpWebResponse)) { // Extract the response body from the WebException's HttpWebResponse: error.LongMessage = ((HttpWebResponse)wex.Response).StatusDescription; } // Redirect to the checkout error view: return RedirectToAction("Error", error); } catch (Exception ex) { ExceptionUtility.LogException(ex, "CheckoutController.cs Complete Action"); var error = new CheckoutErrorViewModel { ErrorCode = ex.Message }; // Redirect to the checkout error view: return RedirectToAction("Error", error); } return View(order); }