Example #1
0
        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"));
            }
        }
Example #2
0
        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);
        }