예제 #1
0
        public CheckoutResult CheckoutWithPayPalExpressCheckout(Dictionary <string, string> payPalVariables)
        {
            string token   = payPalVariables["token"];
            string payerId = payPalVariables["PayerID"];

            PayPalExpressCheckoutPaymentProvider payPalExpress = new PayPalExpressCheckoutPaymentProvider(storeContext.CurrentStore.GetPaymentProviderConfig(PaymentProviderName.PayPalExpressCheckout));

            int?  orderId      = payPalExpress.GetOrderIdForTransactionToken(token);
            Order pendingOrder = Order.GetOrder(orderId.GetValueOrDefault(-1));

            if (pendingOrder != null)
            {
                PaymentStatusName paymentStatus = payPalExpress.DoExpressCheckoutPayment(pendingOrder, payPalVariables);

                OrderStatusName orderStatus = pendingOrder.OrderStatus;
                if (paymentStatus == PaymentStatusName.Completed)
                {
                    orderStatus = OrderStatusName.Completed;
                    pendingOrder.CreditCardType = CreditCardType.PayPal.ToString();
                }
                UpdateOrderStatus(pendingOrder, orderStatus, paymentStatus);
            }

            return(DoPostCheckoutProcessing(pendingOrder, true));
        }
        /// <summary>
        /// Check for the PayPal Express Checkout return page variables and update the Order if needed.
        /// </summary>
        private void HandlePayPalExpressCallback()
        {
            Dictionary <string, string> payPalVariables = new Dictionary <string, string>();

            if (!string.IsNullOrEmpty(Request.QueryString["token"]) && !string.IsNullOrEmpty(Request.QueryString["PayerID"]))
            {
                string payPalToken = Request.QueryString["token"];
                payPalVariables["token"]   = payPalToken;
                payPalVariables["PayerID"] = Request.QueryString["PayerID"];

                checkoutOrderInfo.PayPalVariables.Merge(payPalVariables);
                checkoutOrderInfo.PaymentProvider = PaymentProviderName.PayPalExpressCheckout;

                PayPalExpressCheckoutPaymentProvider payPalExpressCheckout = new PayPalExpressCheckoutPaymentProvider(StoreContext.CurrentStore.GetPaymentProviderConfig(PaymentProviderName.PayPalExpressCheckout));
                Order pendingOrder = Order.GetOrder(payPalExpressCheckout.GetOrderIdForTransactionToken(payPalToken).GetValueOrDefault(-1));
                if (pendingOrder != null)
                {
                    payPalExpressCheckout.UpdateOrderWithExpressCheckoutDetails(pendingOrder, payPalToken);

                    checkoutOrderInfo.SetBillingAddressFromOrder(pendingOrder);
                    checkoutOrderInfo.SetShippingAddressFromOrder(pendingOrder);

                    //checkoutOrderInfo.ReCalculateOrderTotals();
                }

                UpdateCheckoutSession(checkoutOrderInfo);
            }
        }
예제 #3
0
        protected void ibtnPayPalExpressCheckout_Click(object sender, ImageClickEventArgs e)
        {
            UpdateProductQuantities();
            UpdateCheckoutSession();

            OrderController orderController = new OrderController(StoreContext);
            Order           pendingOrder    = orderController.CreateOrder(checkoutOrderInfo, OrderStatusName.PendingOffsite);

            PayPalExpressCheckoutPaymentProvider payPalExpressCheckout = new PayPalExpressCheckoutPaymentProvider(StoreContext.CurrentStore.GetPaymentProviderConfig(PaymentProviderName.PayPalExpressCheckout));
            string cancelUrl = StoreUrls.Cart();
            string returnUrl = StoreUrls.CheckoutReview();
            string token     = payPalExpressCheckout.SetExpressCheckoutAndGetToken(pendingOrder, cancelUrl, returnUrl);


            if (!string.IsNullOrEmpty(token))
            {
                string payPalUrl = payPalExpressCheckout.GetExpressCheckoutUrl(token);

                Response.Redirect(payPalUrl);
            }
            else
            {
                // ERROR
                throw new ApplicationException("PayPal Express Token is Null/Empty!");
            }
        }
        private void LoadPaymentProviders()
        {
            DataModel.Store store = StoreContext.CurrentStore;

            // StoreContext.CurrentStore.GetOnsiteCreditCardPaymentProvider() == PaymentProviderName.OfflinePayment
            // StoreContext.CurrentStore.IsPaymentProviderEnabled(PaymentProviderName.AuthorizeNetAim)

            // ON-SITE
            chkPayLater.Checked        = store.IsPaymentProviderEnabled(PaymentProviderName.PayLater);
            chkCardCaptureOnly.Checked = store.IsPaymentProviderEnabled(PaymentProviderName.CardCaptureOnly);
            chkAuthorizeNetAim.Checked = store.IsPaymentProviderEnabled(PaymentProviderName.AuthorizeNetAim);
            chkPayPalDirect.Checked    = store.IsPaymentProviderEnabled(PaymentProviderName.PayPalDirectPayment);

            PayLaterPaymentProvider billMeLaterProvider = new PayLaterPaymentProvider(store.GetPaymentProviderConfig(PaymentProviderName.PayLater));

            txtPayLaterDisplayText.Text          = billMeLaterProvider.DisplayText;
            txtPayLaterCustomerInstructions.Text = billMeLaterProvider.CustomerInstructions;

            AuthorizeNetAimProvider authorizeNetAimProvider = new AuthorizeNetAimProvider(store.GetPaymentProviderConfig(PaymentProviderName.AuthorizeNetAim));

            chkAuthorizeNetAimTestGateway.Checked      = authorizeNetAimProvider.IsTestGateway;
            chkAuthorizeNetAimTestTransactions.Checked = authorizeNetAimProvider.IsTestTransactions;
            txtAuthorizeNetAimApiLoginId.Text          = authorizeNetAimProvider.ApiLoginId;
            txtAuthorizeNetAimTransactionKey.Text      = authorizeNetAimProvider.TransactionKey;

            PayPalDirectPaymentProvider payPalDirectPayment = new PayPalDirectPaymentProvider(store.GetPaymentProviderConfig(PaymentProviderName.PayPalDirectPayment));

            chkPayPalDirectPaymentIsSandbox.Checked = payPalDirectPayment.IsSandbox;
            txtPayPalDirectPaymentApiUsername.Text  = payPalDirectPayment.ApiUsername;
            txtPayPalDirectPaymentApiPassword.Text  = payPalDirectPayment.ApiPassword;
            txtPayPalDirectPaymentApiSignature.Text = payPalDirectPayment.ApiSignature;

            // OFF-SITE
            chkPayPalStandard.Checked = store.IsPaymentProviderEnabled(PaymentProviderName.PayPalStandard);
            chkPayPalExpress.Checked  = store.IsPaymentProviderEnabled(PaymentProviderName.PayPalExpressCheckout);

            PayPalStandardProvider payPalStandard = new PayPalStandardProvider(store.GetPaymentProviderConfig(PaymentProviderName.PayPalStandard));

            chkPayPalStandardIsSandbox.Checked           = payPalStandard.IsSandbox;
            rdoPayPalStandardShippingLogic.SelectedValue = payPalStandard.ShippingLogic;
            txtPayPalStandardEmail.Text = payPalStandard.EmailAddress;

            PayPalExpressCheckoutPaymentProvider payPalExpressCheckout = new PayPalExpressCheckoutPaymentProvider(store.GetPaymentProviderConfig(PaymentProviderName.PayPalExpressCheckout));

            chkPayPalExpressCheckoutIsSandbox.Checked = payPalExpressCheckout.IsSandbox;
            txtPayPalExpressCheckoutApiUsername.Text  = payPalExpressCheckout.ApiUsername;
            txtPayPalExpressCheckoutApiPassword.Text  = payPalExpressCheckout.ApiPassword;
            txtPayPalExpressCheckoutApiSignature.Text = payPalExpressCheckout.ApiSignature;
        }
        protected void btnReviewOrder_Click(object sender, EventArgs e)
        {
            // user-selected payment method (credit card or PayPal)
            string userSelectedPaymentMethod = Request.Form["paymentMethod"] ?? "";

            if (userSelectedPaymentMethod == "payLater")
            {
                checkoutOrderInfo.PaymentProvider = StoreContext.CurrentStore.GetOnsitePaymentProviders().Where(p => p == PaymentProviderName.PayLater).First();
                if (checkoutOrderInfo.PaymentProvider == PaymentProviderName.UNKNOWN)
                {
                    throw new ApplicationException("Unable to determine PaymentProvider for CheckoutOrderInfo!");
                }
                UpdateCheckoutSession(checkoutOrderInfo);

                Response.Redirect(StoreUrls.CheckoutReview());
            }
            else if (userSelectedPaymentMethod == "payPalExpressCheckout")
            {
                OrderController orderController = new OrderController(StoreContext);
                Order           pendingOrder    = orderController.CreateOrder(checkoutOrderInfo, OrderStatusName.PendingOffsite);

                PayPalExpressCheckoutPaymentProvider payPalExpressCheckout = new PayPalExpressCheckoutPaymentProvider(StoreContext.CurrentStore.GetPaymentProviderConfig(PaymentProviderName.PayPalExpressCheckout));
                string cancelUrl = StoreUrls.Cart();
                string returnUrl = StoreUrls.CheckoutReview();
                string token     = payPalExpressCheckout.SetExpressCheckoutAndGetToken(pendingOrder, cancelUrl, returnUrl);

                if (!string.IsNullOrEmpty(token))
                {
                    //Session[SessionKeys.CheckoutOrderInfo] = checkoutOrderInfo;
                    //string payPalUrl = string.Format("https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token={0}", token);

                    string payPalUrl = payPalExpressCheckout.GetExpressCheckoutUrl(token);

                    Response.Redirect(payPalUrl);
                }
                else
                {
                    // ERROR
                    throw new ApplicationException("PayPal Express Token is Null/Empty!");
                }
            }
            else if (userSelectedPaymentMethod == "creditCard")
            {
                checkoutOrderInfo.PaymentProvider = StoreContext.CurrentStore.GetOnsitePaymentProviders().Where(p => p != PaymentProviderName.PayLater).First();
                if (checkoutOrderInfo.PaymentProvider == PaymentProviderName.UNKNOWN)
                {
                    throw new ApplicationException("Unable to determine PaymentProvider for CheckoutOrderInfo!");
                }

                //---- Credit Card Info
                CreditCardInfo creditCard = new CreditCardInfo()
                {
                    CardType     = WA.Enum <CreditCardType> .TryParseOrDefault(ddlCCType.SelectedValue, CreditCardType.UNKNOWN),
                    CardNumber   = txtCCNumber.Text,
                    ExpireMonth  = WA.Parser.ToShort(ddlCCExpireMonth.SelectedValue),
                    ExpireYear   = WA.Parser.ToShort(ddlCCExpireYear.SelectedValue),
                    NameOnCard   = txtCCNameOnCard.Text,
                    SecurityCode = txtCCSecurityCode.Text.Trim()
                };
                checkoutOrderInfo.CreditCard = creditCard;

                UpdateCheckoutSession(checkoutOrderInfo);

                bool doRedirect = true;
                if (checkoutOrderInfo.Total > 0)
                {
                    CreditCardInfoValidator validator = new CreditCardInfoValidator();
                    ValidationResult        results   = validator.Validate(checkoutOrderInfo.CreditCard);
                    if (!results.IsValid && results.Errors.Count > 0)
                    {
                        doRedirect = false;

                        msgFlash.InnerHtml = "<ul>" + results.Errors.ToList().ConvertAll(err => "<li>" + err.ErrorMessage + "</li>").ToDelimitedString(" ") + "</ul>";
                        msgFlash.Visible   = true;
                    }
                }

                if (doRedirect)
                {
                    Response.Redirect(StoreUrls.CheckoutReview());
                }
            }
            else
            {
                throw new ApplicationException("Unable to determine PaymentProvider for CheckoutOrderInfo!");
            }
        }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            DataModel.Store store = StoreContext.CurrentStore;

            //PaymentProviderName onSitePaymentProvider = WA.Enum<PaymentProviderName>.TryParseOrDefault(Request.Form["enabledOnSiteProvider"], PaymentProviderName.UNKNOWN);
            //PaymentProviderName offSitePaymentProvider = WA.Enum<PaymentProviderName>.TryParseOrDefault(Request.Form["enabledOffSiteProvider"], PaymentProviderName.UNKNOWN);

            if (!onSiteCheckboxes.Exists(x => x.Checked) && !offSiteCheckboxes.Exists(x => x.Checked))
            {
                ShowFlash("<span style='color: Red;'>ERROR - Please choose at least one payment provider.</span>");
                return;
            }

            if (chkAuthorizeNetAim.Checked && chkPayPalDirect.Checked)
            {
                ShowFlash("<span style='color: Red;'>ERROR - Please choose either Authorize.Net OR PayPal Pro (both cannot be selected)</span>");
                return;
            }
            if (chkPayPalStandard.Checked && chkPayPalExpress.Checked)
            {
                ShowFlash("<span style='color: Red;'>ERROR - Please choose either PayPal Standard OR PayPal Express Checkout (both cannot be selected)</span>");
                return;
            }

            //--- ON-Site Payment Providers

            PayLaterPaymentProvider billMeLaterPaymentProvider = new PayLaterPaymentProvider(store.GetPaymentProviderConfig(PaymentProviderName.PayLater));

            billMeLaterPaymentProvider.IsEnabled            = chkPayLater.Checked;
            billMeLaterPaymentProvider.DisplayText          = txtPayLaterDisplayText.Text;
            billMeLaterPaymentProvider.CustomerInstructions = txtPayLaterCustomerInstructions.Text;
            store.UpdatePaymentProviderConfig(billMeLaterPaymentProvider.GetConfiguration());

            CardCaptureOnlyPaymentProvider cardCaptureOnlyPaymentProvider = new CardCaptureOnlyPaymentProvider(store.GetPaymentProviderConfig(PaymentProviderName.CardCaptureOnly));

            cardCaptureOnlyPaymentProvider.IsEnabled = chkCardCaptureOnly.Checked;
            store.UpdatePaymentProviderConfig(cardCaptureOnlyPaymentProvider.GetConfiguration());

            AuthorizeNetAimProvider authorizeNetAimProvider = new AuthorizeNetAimProvider(store.GetPaymentProviderConfig(PaymentProviderName.AuthorizeNetAim));

            authorizeNetAimProvider.IsEnabled          = chkAuthorizeNetAim.Checked;
            authorizeNetAimProvider.IsTestGateway      = chkAuthorizeNetAimTestGateway.Checked;
            authorizeNetAimProvider.IsTestTransactions = chkAuthorizeNetAimTestTransactions.Checked;
            authorizeNetAimProvider.ApiLoginId         = txtAuthorizeNetAimApiLoginId.Text;
            authorizeNetAimProvider.TransactionKey     = txtAuthorizeNetAimTransactionKey.Text;
            store.UpdatePaymentProviderConfig(authorizeNetAimProvider.GetConfiguration());

            PayPalDirectPaymentProvider payPalDirectPayment = new PayPalDirectPaymentProvider(store.GetPaymentProviderConfig(PaymentProviderName.PayPalDirectPayment));

            payPalDirectPayment.IsEnabled    = chkPayPalDirect.Checked;
            payPalDirectPayment.IsSandbox    = chkPayPalDirectPaymentIsSandbox.Checked;
            payPalDirectPayment.ApiUsername  = txtPayPalDirectPaymentApiUsername.Text;
            payPalDirectPayment.ApiPassword  = txtPayPalDirectPaymentApiPassword.Text;
            payPalDirectPayment.ApiSignature = txtPayPalDirectPaymentApiSignature.Text;
            store.UpdatePaymentProviderConfig(payPalDirectPayment.GetConfiguration());


            //--- OFF-Site Payment Providers

            PayPalStandardProvider payPalStandard = new PayPalStandardProvider(store.GetPaymentProviderConfig(PaymentProviderName.PayPalStandard));

            payPalStandard.IsEnabled     = chkPayPalStandard.Checked;
            payPalStandard.IsSandbox     = chkPayPalStandardIsSandbox.Checked;
            payPalStandard.ShippingLogic = rdoPayPalStandardShippingLogic.SelectedValue;
            payPalStandard.EmailAddress  = txtPayPalStandardEmail.Text;
            store.UpdatePaymentProviderConfig(payPalStandard.GetConfiguration());

            PayPalExpressCheckoutPaymentProvider payPalExpressCheckout = new PayPalExpressCheckoutPaymentProvider(store.GetPaymentProviderConfig(PaymentProviderName.PayPalExpressCheckout));

            payPalExpressCheckout.IsEnabled    = chkPayPalExpress.Checked;
            payPalExpressCheckout.IsSandbox    = chkPayPalExpressCheckoutIsSandbox.Checked;
            payPalExpressCheckout.ApiUsername  = txtPayPalExpressCheckoutApiUsername.Text;
            payPalExpressCheckout.ApiPassword  = txtPayPalExpressCheckoutApiPassword.Text;
            payPalExpressCheckout.ApiSignature = txtPayPalExpressCheckoutApiSignature.Text;
            store.UpdatePaymentProviderConfig(payPalExpressCheckout.GetConfiguration());

            Response.Redirect(StoreUrls.AdminWithFlash(ModuleDefs.Admin.Views.PaymentMethods, "Payment Settings Saved Successfully"));
        }