private void Pay()
        {
            TransactionOptionsPayPalRequest transactionOptionsPayPalRequest = new TransactionOptionsPayPalRequest()
            {
                Description = "Sample for Braintree - Paypal payment by Stavros Dimopoulos  [email protected]"
            };

            TransactionOptionsRequest transactionOptionsRequest = new TransactionOptionsRequest()
            {
                SubmitForSettlement = true
            };

            TransactionRequest transactionRequest = new TransactionRequest()
            {
                Amount             = 100.00M,
                PaymentMethodNonce = paymentMethodNonce,
                Options            = transactionOptionsRequest
            };

            Result <Transaction> myResult;

            try
            {
                myResult = braintreeGateway.Transaction.Sale(transactionRequest);
                HttpContext httpContext = HttpContext.Current;
                httpContext.Items.Add("result", myResult.Message); // optional. You may store any variable.
                if (myResult.IsSuccess())
                {
                    Server.Transfer("Success.aspx");
                }
                else
                {
                    Server.Transfer("Fail.aspx");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Process a payment
        /// </summary>
        /// <param name="processPaymentRequest">Payment info required for an order processing</param>
        /// <returns>Process payment result</returns>
        public ProcessPaymentResult ProcessPayment(ProcessPaymentRequest processPaymentRequest)
        {
            var processPaymentResult = new ProcessPaymentResult();

            //get customer
            var customer = _customerService.GetCustomerById(processPaymentRequest.CustomerId);

            //get settings
            var useSandBox = _brainTreePaymentSettings.UseSandBox;
            var merchantId = _brainTreePaymentSettings.MerchantId;
            var publicKey  = _brainTreePaymentSettings.PublicKey;
            var privateKey = _brainTreePaymentSettings.PrivateKey;

            //new gateway
            var gateway = new BraintreeGateway
            {
                Environment = useSandBox ? Environment.SANDBOX : Environment.PRODUCTION,
                MerchantId  = merchantId,
                PublicKey   = publicKey,
                PrivateKey  = privateKey
            };

            //new transaction request
            var transactionRequest = new TransactionRequest
            {
                Amount  = processPaymentRequest.OrderTotal,
                Channel = BN_CODE
            };

            //transaction credit card request
            var transactionCreditCardRequest = new TransactionCreditCardRequest
            {
                Number         = processPaymentRequest.CreditCardNumber,
                CVV            = processPaymentRequest.CreditCardCvv2,
                ExpirationDate = processPaymentRequest.CreditCardExpireMonth + "/" + processPaymentRequest.CreditCardExpireYear
            };

            transactionRequest.CreditCard = transactionCreditCardRequest;

            //address request
            var addressRequest = new AddressRequest
            {
                FirstName     = customer.BillingAddress.FirstName,
                LastName      = customer.BillingAddress.LastName,
                StreetAddress = customer.BillingAddress.Address1,
                PostalCode    = customer.BillingAddress.ZipPostalCode
            };

            transactionRequest.BillingAddress = addressRequest;

            //transaction options request
            var transactionOptionsRequest = new TransactionOptionsRequest
            {
                SubmitForSettlement = true
            };

            transactionRequest.Options = transactionOptionsRequest;

            //sending a request
            var result = gateway.Transaction.Sale(transactionRequest);

            //result
            if (result.IsSuccess())
            {
                processPaymentResult.NewPaymentStatus = PaymentStatus.Paid;
            }
            else
            {
                processPaymentResult.AddError("Error processing payment." + result.Message);
            }

            return(processPaymentResult);
        }
        /// <summary>
        /// Process a payment
        /// </summary>
        /// <returns>Process payment result</returns>
        public async Task <ProcessPaymentResult> ProcessPayment(PaymentTransaction paymentTransaction)
        {
            var processPaymentResult = new ProcessPaymentResult();

            //get customer
            var customer = await _customerService.GetCustomerById(paymentTransaction.CustomerId);

            //get settings
            var useSandBox = _brainTreePaymentSettings.UseSandBox;
            var merchantId = _brainTreePaymentSettings.MerchantId;
            var publicKey  = _brainTreePaymentSettings.PublicKey;
            var privateKey = _brainTreePaymentSettings.PrivateKey;

            //new gateway
            var gateway = new BraintreeGateway
            {
                Environment = useSandBox ? Braintree.Environment.SANDBOX : Braintree.Environment.PRODUCTION,
                MerchantId  = merchantId,
                PublicKey   = publicKey,
                PrivateKey  = privateKey
            };

            //new transaction request
            var transactionRequest = new TransactionRequest
            {
                Amount = paymentTransaction.TransactionAmount,
            };

            if (_brainTreePaymentSettings.Use3DS)
            {
                transactionRequest.PaymentMethodNonce = _httpContextAccessor.HttpContext.Session.GetString("CardNonce").ToString();
            }
            else
            {
                //transaction credit card request
                var transactionCreditCardRequest = new TransactionCreditCardRequest
                {
                    Number         = _httpContextAccessor.HttpContext.Session.GetString("CardNumber").ToString(),
                    CVV            = _httpContextAccessor.HttpContext.Session.GetString("CardCode").ToString(),
                    ExpirationDate = _httpContextAccessor.HttpContext.Session.GetString("ExpireMonth").ToString() + "/" + _httpContextAccessor.HttpContext.Session.GetString("ExpireYear").ToString()
                };
                transactionRequest.CreditCard = transactionCreditCardRequest;
            }

            //address request
            var addressRequest = new AddressRequest
            {
                FirstName     = customer.BillingAddress.FirstName,
                LastName      = customer.BillingAddress.LastName,
                StreetAddress = customer.BillingAddress.Address1,
                PostalCode    = customer.BillingAddress.ZipPostalCode
            };

            transactionRequest.BillingAddress = addressRequest;

            //transaction options request
            var transactionOptionsRequest = new TransactionOptionsRequest
            {
                SubmitForSettlement = true
            };

            transactionRequest.Options = transactionOptionsRequest;

            //sending a request
            var result = gateway.Transaction.Sale(transactionRequest);

            //result
            if (result.IsSuccess())
            {
                processPaymentResult.PaidAmount = paymentTransaction.TransactionAmount;
                processPaymentResult.NewPaymentTransactionStatus = Grand.Domain.Payments.TransactionStatus.Paid;
            }
            else
            {
                processPaymentResult.AddError("Error processing payment." + result.Message);
            }

            return(processPaymentResult);
        }
        /// <summary>
        /// Process a payment
        /// </summary>
        /// <param name="processPaymentRequest">Payment info required for an order processing</param>
        /// <returns>Process payment result</returns>
        public ProcessPaymentResult ProcessPayment(ProcessPaymentRequest processPaymentRequest)
        {
            var processPaymentResult = new ProcessPaymentResult();

            //get customer
            var customer = _customerService.GetCustomerById(processPaymentRequest.CustomerId);

            //get settings
            var useSandbox = _braintreePaymentSettings.UseSandbox;
            var merchantId = _braintreePaymentSettings.MerchantId;
            var publicKey  = _braintreePaymentSettings.PublicKey;
            var privateKey = _braintreePaymentSettings.PrivateKey;

            //new gateway
            var gateway = new BraintreeGateway
            {
                Environment = useSandbox ? Environment.SANDBOX : Environment.PRODUCTION,
                MerchantId  = merchantId,
                PublicKey   = publicKey,
                PrivateKey  = privateKey
            };

            var billingAddress = _addressService.GetAddressById(customer.BillingAddressId ?? 0);

            //search to see if customer is already in the vault
            var searchRequest = new CustomerSearchRequest().Email.Is(billingAddress?.Email);
            var vaultCustomer = gateway.Customer.Search(searchRequest);

            var customerId = vaultCustomer.FirstOrDefault()?.Id ?? string.Empty;

            var currencyMerchantId = string.Empty;
            var amount             = processPaymentRequest.OrderTotal;

            if (_braintreePaymentSettings.UseMultiCurrency)
            {
                //get currency
                var currency = _workContext.WorkingCurrency;

                currencyMerchantId = _braintreeMerchantService.GetMerchantId(currency.CurrencyCode);

                if (!string.IsNullOrEmpty(currencyMerchantId))
                {
                    amount = _currencyService.ConvertCurrency(amount, currency.Rate);
                }
            }

            //new transaction request
            var transactionRequest = new TransactionRequest
            {
                Amount            = amount,
                CustomerId        = customerId,
                Channel           = BraintreePaymentDefaults.PartnerCode,
                MerchantAccountId = currencyMerchantId
            };

            if (_braintreePaymentSettings.Use3DS)
            {
                transactionRequest.PaymentMethodNonce = processPaymentRequest.CustomValues["CardNonce"].ToString();
            }
            else
            {
                //transaction credit card request
                var transactionCreditCardRequest = new TransactionCreditCardRequest
                {
                    Number         = processPaymentRequest.CreditCardNumber,
                    CVV            = processPaymentRequest.CreditCardCvv2,
                    ExpirationDate = processPaymentRequest.CreditCardExpireMonth + "/" + processPaymentRequest.CreditCardExpireYear,
                };
                transactionRequest.CreditCard = transactionCreditCardRequest;
            }

            //customer request
            var customerRequest = new CustomerRequest
            {
                CustomerId = customerId,
                FirstName  = billingAddress?.FirstName,
                LastName   = billingAddress?.LastName,
                Email      = billingAddress?.Email,
                Fax        = billingAddress?.FaxNumber,
                Company    = billingAddress?.Company,
                Phone      = billingAddress?.PhoneNumber
            };

            transactionRequest.Customer = customerRequest;

            var country = _countryService.GetCountryByAddress(billingAddress);

            //address request
            var addressRequest = new AddressRequest
            {
                FirstName         = billingAddress?.FirstName,
                LastName          = billingAddress?.LastName,
                StreetAddress     = billingAddress?.Address1,
                PostalCode        = billingAddress?.ZipPostalCode,
                CountryCodeAlpha2 = country?.TwoLetterIsoCode,
                CountryCodeAlpha3 = country?.ThreeLetterIsoCode
            };

            transactionRequest.BillingAddress = addressRequest;

            //transaction options request
            var transactionOptionsRequest = new TransactionOptionsRequest
            {
                SubmitForSettlement = true,
                ThreeDSecure        = new TransactionOptionsThreeDSecureRequest()
            };

            transactionRequest.Options = transactionOptionsRequest;

            //sending a request
            var result = gateway.Transaction.Sale(transactionRequest);

            //result
            if (result.IsSuccess())
            {
                processPaymentResult.NewPaymentStatus = PaymentStatus.Paid;
            }
            else
            {
                processPaymentResult.AddError("Error processing payment." + result.Message);
            }

            return(processPaymentResult);
        }