void btnMakePayment_Click(object sender, EventArgs e)
        {
            PayPalExpressGateway gateway
                = new PayPalExpressGateway(
                    commerceConfig.PayPalAPIUsername,
                    commerceConfig.PayPalAPIPassword,
                    commerceConfig.PayPalAPISignature,
                    commerceConfig.PayPalStandardEmailAddress);

            gateway.UseTestMode = commerceConfig.PaymentGatewayUseTestMode;
            gateway.PayPalToken = checkoutDetailsLog.Token;
            gateway.PayPalPayerId = checkoutDetailsLog.PayerId;

            gateway.MerchantCartId = cart.CartGuid.ToString();
            gateway.ChargeTotal = cart.OrderTotal;
            gateway.ReturnUrl = SiteRoot + "/Services/PayPalReturnHandler.ashx";
            gateway.CancelUrl = SiteUtils.GetCurrentPageUrl();
            gateway.CurrencyCode = siteSettings.GetCurrency().Code;

            // **** here's where the payment is requested ******
            bool executed = gateway.CallDoExpressCheckoutPayment();

            PayPalLog payPalLog = new PayPalLog();
            payPalLog.RequestType = "DoExpressCheckoutPayment";
            payPalLog.ProviderName = WebStorePayPalReturnHandler.ProviderName;
            payPalLog.SerializedObject = checkoutDetailsLog.SerializedObject;
            payPalLog.ReturnUrl = checkoutDetailsLog.ReturnUrl;
            payPalLog.RawResponse = gateway.RawResponse;

            payPalLog.TransactionId = gateway.TransactionId;
            payPalLog.PaymentType = gateway.PayPalPaymentType;
            payPalLog.PaymentStatus = gateway.PayPalPaymentStatus;
            payPalLog.PendingReason = gateway.PayPalPendingReason;
            payPalLog.ReasonCode = gateway.ReasonCode;
            payPalLog.PayPalAmt = gateway.ChargeTotal;
            payPalLog.FeeAmt = gateway.PayPalFeeAmount;
            payPalLog.SettleAmt = gateway.PayPalSettlementAmount;
            payPalLog.TaxAmt = gateway.PayPalTaxTotal;

            payPalLog.Token = gateway.PayPalToken;
            payPalLog.PayerId = gateway.PayPalPayerId;
            payPalLog.RequestType = "DoExpressCheckoutPayment";
            payPalLog.SiteGuid = store.SiteGuid;
            payPalLog.StoreGuid = store.Guid;
            payPalLog.CartGuid = cart.CartGuid;
            payPalLog.UserGuid = cart.UserGuid;
            payPalLog.CartTotal = cart.OrderTotal;
            payPalLog.CurrencyCode = gateway.CurrencyCode;

            if (gateway.PayPalExchangeRate.Length > 0)
                payPalLog.ExchangeRate = decimal.Parse(gateway.PayPalExchangeRate);

            payPalLog.Save();

            if (!executed)
            {

                lblMessage.Text = WebStoreResources.TransactionNotInitiatedMessage;

                if (gateway.LastExecutionException != null)
                {
                    log.Error("ExpressCheckout gateway error", gateway.LastExecutionException);

                    if (commerceConfig.PaymentGatewayUseTestMode)
                    {
                        lblMessage.Text = gateway.LastExecutionException.ToString();
                    }

                }
                else
                {
                    if (commerceConfig.PaymentGatewayUseTestMode)
                    {
                        lblMessage.Text = gateway.RawResponse;
                    }

                }

                return;
            }

            string redirectUrl = string.Empty;

            if (gateway.TransactionId.Length == 0)
            {
                // TODO: redirect where?
                redirectUrl = SiteRoot + "/WebStore/PayPalGatewayError.aspx?plog=" + payPalLog.RowGuid.ToString();
                Response.Redirect(redirectUrl);
            }

            Guid orderStatusGuid;
            if (payPalLog.PaymentStatus == "Completed")
            {
                orderStatusGuid = OrderStatus.OrderStatusFulfillableGuid;
            }
            else
            {
                orderStatusGuid = OrderStatus.OrderStatusReceivedGuid;
            }

            Order order = Order.CreateOrder(
                    store,
                    cart,
                    payPalLog.RawResponse,
                    payPalLog.TransactionId,
                    string.Empty,
                    siteSettings.GetCurrency().Code,
                    "PayPal",
                    orderStatusGuid);

            StoreHelper.ClearCartCookie(cart.StoreGuid);

            // send confirmation email
            // paypal sends an order confirmation so no need

            // redirect to order details
            redirectUrl = SiteRoot +
                "/WebStore/OrderDetail.aspx?pageid="
                + PageId.ToString(CultureInfo.InvariantCulture)
                + "&mid=" + store.ModuleId.ToString(CultureInfo.InvariantCulture)
                + "&orderid=" + order.OrderGuid.ToString();

            Response.Redirect(redirectUrl);
        }