public ActionResult Create() { var gateway = config.GetGateway(); decimal amount; Customer btCustomer = null; Result <Customer> customerResult = null; try { btCustomer = gateway.Customer.Find("1"); } catch { } if (btCustomer == null) { CustomerRequest customerRequest = new CustomerRequest { CustomerId = "1", Id = "1", Email = "*****@*****.**" }; customerResult = gateway.Customer.Create(customerRequest); } try { amount = Convert.ToDecimal(Request["amount"]); } catch (FormatException e) { TempData["Flash"] = "Error: 81503: Amount is an invalid format."; return(RedirectToAction("New")); } var nonce = Request["payment_method_nonce"]; var paymentType = Request["payment_type"]; var details = Request["details"]; var billingDetails = Request["billingAddress"]; var deviceData = Request["device_data"]; PaymentDetails paymentDetails = null; GooglePayDetails googlePayDetails = null; BillingAddress billingAddressDetails = null; if (!String.IsNullOrEmpty(details)) { if (paymentType == "AndroidPayCard") { googlePayDetails = JsonConvert.DeserializeObject <GooglePayDetails>(details); } else { paymentDetails = JsonConvert.DeserializeObject <PaymentDetails>(details); } } if (!String.IsNullOrEmpty(billingDetails)) { billingAddressDetails = JsonConvert.DeserializeObject <BillingAddress>(billingDetails); } //Don't need this right now //var lastFour = Request["last_four"]; //var cardType = Request["card_type"]; //Useful for creating payments without creating a transaction (myaccount paymentmethod page) //var paymentRequest = new PaymentMethodRequest //{ // CustomerId = "1", // PaymentMethodNonce = nonce, //}; //Result<PaymentMethod> paymentMethodResult = gateway.PaymentMethod.Create(paymentRequest); //if (paymentMethodResult == null) //{ // return View("Unable to process payment. Please try again."); //} AddressRequest shippingAddress = new AddressRequest(); if (paymentDetails != null) { //splits names into first and last, will not work with names like da Silva var names = paymentDetails.ShippingAddress.RecipientName.Split(' '); shippingAddress.CountryCodeAlpha2 = paymentDetails.ShippingAddress.CountryCode; shippingAddress.FirstName = names[0]; shippingAddress.LastName = names[1]; shippingAddress.Locality = paymentDetails.ShippingAddress.City; shippingAddress.PostalCode = paymentDetails.ShippingAddress.PostalCode; shippingAddress.Region = paymentDetails.ShippingAddress.State; shippingAddress.StreetAddress = paymentDetails.ShippingAddress.Line1; shippingAddress.ExtendedAddress = paymentDetails.ShippingAddress.Line2; } AddressRequest billingAddress = new AddressRequest(); if (billingAddressDetails != null) { //splits names into first and last, will not work with names like da Silva var names = billingAddressDetails.Name.Split(' '); billingAddress.CountryCodeAlpha2 = billingAddressDetails.CountryCode; billingAddress.FirstName = names[0]; billingAddress.LastName = names[1]; billingAddress.Locality = billingAddressDetails.City; billingAddress.PostalCode = billingAddressDetails.PostalCode; billingAddress.Region = billingAddressDetails.State; billingAddress.StreetAddress = billingAddressDetails.Address1; billingAddress.ExtendedAddress = billingAddressDetails.Address2; } TransactionLineItemRequest[] transactionLineItemRequests = new TransactionLineItemRequest[1]; transactionLineItemRequests[0] = new TransactionLineItemRequest { Description = "A cool test bolt to test things with.", Quantity = 1, UnitAmount = 1.56M, Name = "8T9999 Test Bolt", LineItemKind = TransactionLineItemKind.DEBIT, ProductCode = "8T9999-TEST", TaxAmount = 0.09M, UnitTaxAmount = 0.09M, UnitOfMeasure = "lbs", CommodityCode = "31161600", TotalAmount = 1.65M }; var transactionRequest = new TransactionRequest { Amount = 8.64M, DeviceData = deviceData, PaymentMethodNonce = nonce, CustomerId = "1", ShippingAddress = shippingAddress, BillingAddress = billingAddress, ShippingAmount = 6.99M, LineItems = transactionLineItemRequests, Options = new TransactionOptionsRequest { SubmitForSettlement = true, StoreInVaultOnSuccess = true, StoreShippingAddressInVault = true, //AddBillingAddressToPaymentMethod = true, }, }; //TODO: add this if paymentmethodtoken exists //TransactionCreditCardRequest ccr = new TransactionCreditCardRequest //{ // CVV = cvv, //}; //transactionRequest.CreditCard = ccr; Result <Transaction> transactionResult = gateway.Transaction.Sale(transactionRequest); if (transactionResult.IsSuccess()) { Transaction transaction = transactionResult.Target; return(RedirectToAction("Show", new { id = transaction.Id })); } else if (transactionResult.Transaction != null) { return(RedirectToAction("Show", new { id = transactionResult.Transaction.Id })); } else { string errorMessages = ""; foreach (ValidationError error in transactionResult.Errors.DeepAll()) { errorMessages += "Error: " + (int)error.Code + " - " + error.Message + "\n"; } TempData["Flash"] = errorMessages; return(RedirectToAction("New")); } }
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { var jsonObject = JObject.Load(reader); var paymentMethodDetails = default(IPaymentMethodDetails); switch (jsonObject["type"].ToString()) { case AchDetails.Ach: paymentMethodDetails = new AchDetails(); break; case AmazonPayDetails.AmazonPay: paymentMethodDetails = new AmazonPayDetails(); break; case AndroidPayDetails.AndroidPay: paymentMethodDetails = new AndroidPayDetails(); break; case ApplePayDetails.ApplePay: paymentMethodDetails = new ApplePayDetails(); break; case BacsDirectDebitDetails.Directdebit_GB: paymentMethodDetails = new BacsDirectDebitDetails(); break; case BilldeskOnlineDetails.BilldeskOnline: paymentMethodDetails = new BilldeskOnlineDetails(); break; case BilldeskWalletDetails.BilldeskWallet: paymentMethodDetails = new BilldeskWalletDetails(); break; case BlikDetails.Blik: paymentMethodDetails = new BlikDetails(); break; case CellulantDetails.Cellulant: paymentMethodDetails = new CellulantDetails(); break; case DokuDetails.Alfamart: case DokuDetails.Bcava: case DokuDetails.Bniva: case DokuDetails.Briva: case DokuDetails.Cimbva: case DokuDetails.Danamonva: case DokuDetails.Permataliteatm: case DokuDetails.Permatatm: case DokuDetails.Sinarmasva: case DokuDetails.Indomaret: case DokuDetails.Mandiriva: paymentMethodDetails = new DokuDetails(); break; case DotpayDetails.Dotpay: paymentMethodDetails = new DotpayDetails(); break; case DragonpayDetails.EBanking: case DragonpayDetails.OTCBanking: case DragonpayDetails.OTCNonBanking: case DragonpayDetails.OTCPhilippines: paymentMethodDetails = new DragonpayDetails(); break; case EcontextVoucherDetails.Stores: case EcontextVoucherDetails.Seveneleven: paymentMethodDetails = new EcontextVoucherDetails(); break; case EntercashDetails.Entercash: paymentMethodDetails = new EntercashDetails(); break; case GiropayDetails.Giropay: paymentMethodDetails = new GiropayDetails(); break; case GooglePayDetails.GooglePay: paymentMethodDetails = new GooglePayDetails(); break; case IdealDetails.Ideal: paymentMethodDetails = new IdealDetails(); break; case KlarnaDetails.Klarna: case KlarnaDetails.KlarnaAccount: case KlarnaDetails.KlarnaB2B: case KlarnaDetails.KlarnaPayNow: case KlarnaDetails.KlarnaPayments: case KlarnaDetails.KlarnaPaymentsAccount: case KlarnaDetails.KlarnaPaymentsB2B: paymentMethodDetails = new KlarnaDetails(); break; case LianLianPayDetails.EbankingCredit: case LianLianPayDetails.EbankingDebit: case LianLianPayDetails.EbankingEnterprise: paymentMethodDetails = new LianLianPayDetails(); break; case MasterpassDetails.Masterpass: paymentMethodDetails = new MasterpassDetails(); break; case MbwayDetails.Mbway: paymentMethodDetails = new MbwayDetails(); break; case MolPayDetails.EBankingDirectMY: case MolPayDetails.EBankingFPXMy: case MolPayDetails.EBankingMY: case MolPayDetails.EBankingTH: case MolPayDetails.EBankingVN: case MolPayDetails.FPX: paymentMethodDetails = new MolPayDetails(); break; case MobilePayDetails.Mobilepay: paymentMethodDetails = new MobilePayDetails(); break; case PayPalDetails.PayPal: paymentMethodDetails = new PayPalDetails(); break; case PayUUpiDetails.PayUinUPI: paymentMethodDetails = new PayUUpiDetails(); break; case QiwiWalletDetails.QiwiWallet: paymentMethodDetails = new QiwiWalletDetails(); break; case SamsungPayDetails.SamsungPay: paymentMethodDetails = new SamsungPayDetails(); break; case SepaDirectDebitDetails.Sepadirectdebit: paymentMethodDetails = new SepaDirectDebitDetails(); break; case UpiDetails.Upi: paymentMethodDetails = new UpiDetails(); break; case VippsDetails.Vipps: paymentMethodDetails = new VippsDetails(); break; case VisaCheckoutDetails.VisaCheckout: paymentMethodDetails = new VisaCheckoutDetails(); break; case WeChatPayDetails.Wechatpay: paymentMethodDetails = new WeChatPayDetails(); break; case WeChatPayMiniProgramDetails.WechatpayMiniProgram: paymentMethodDetails = new WeChatPayMiniProgramDetails(); break; default: paymentMethodDetails = new DefaultPaymentMethodDetails(); break; } serializer.Populate(jsonObject.CreateReader(), paymentMethodDetails); return(paymentMethodDetails); }