private void GoogleChargeOrder(string gatewayOrderID)
    {
        string orderID = DataAccessContext.OrderRepository.GetOrderIDByGatewayID(gatewayOrderID);
        Order  order   = DataAccessContext.OrderRepository.GetOne(orderID);

        Log.Debug("Start Auto Charge for Google");
        GCheckout.OrderProcessing.ChargeOrderRequest Req =
            new GCheckout.OrderProcessing.ChargeOrderRequest(
                WebConfiguration.GoogleMerchantID,
                WebConfiguration.GoogleMerchantKey,
                WebConfiguration.GoogleEnvironment,
                order.GatewayOrderID,
                DataAccessContext.Configurations.GetValue("PaymentCurrency"),
                order.Total);

        GCheckoutResponse R = Req.Send();

        if (!R.IsGood)
        {
            Log.Debug("Can not charge - Response: " + R.ResponseXml + "\n");
            Log.Debug("Can not charge - RedirectUrl: " + R.RedirectUrl + "\n");
            Log.Debug("Can not charge - IsGood: " + R.IsGood + "\n");
            Log.Debug("Can not charge - ErrorMessage: " + R.ErrorMessage + "\n");

            SendChargeFailureEmail(order);
        }
        Log.Debug("End Auto Charge for Google");
    }
        protected void PostCartToGoogle(object sender, ImageClickEventArgs e)
        {
            if ((NopContext.Current.User == null) || (NopContext.Current.User.IsGuest && !CustomerManager.AnonymousCheckoutAllowed))
            {
                string loginURL = CommonHelper.GetLoginPageURL(true);
                Response.Redirect(loginURL);
            }

            //USD for US dollars, GBP for British pounds, SEK for Swedish krona, EUR for Euro etc
            GCheckoutButton1.Currency = CurrencyManager.PrimaryStoreCurrency.CurrencyCode;
            CheckoutShoppingCartRequest    Req = GCheckoutButton1.CreateRequest();
            GoogleCheckoutPaymentProcessor googleCheckoutPaymentProcessor = new GoogleCheckoutPaymentProcessor();

            NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCart Cart = ShoppingCartManager.GetCurrentShoppingCart(ShoppingCartTypeEnum.ShoppingCart);
            GCheckoutResponse Resp = googleCheckoutPaymentProcessor.PostCartToGoogle(Req, Cart);

            if (Resp.IsGood)
            {
                Response.Redirect(Resp.RedirectUrl);
            }
            else
            {
                Response.Clear();
                Response.Write("Resp.RedirectUrl = " + Resp.RedirectUrl + "<br />");
                Response.Write("Resp.IsGood = " + Resp.IsGood + "<br />");
                Response.Write("Resp.ErrorMessage = " + Server.HtmlEncode(Resp.ErrorMessage) + "<br />");
                Response.Write("Resp.ResponseXml = " + Server.HtmlEncode(Resp.ResponseXml) + "<br />");
                Response.End();
            }
        }
Example #3
0
        protected void GCheckoutButton1_Click(object sender, ImageClickEventArgs e)
        {
            CheckoutShoppingCartRequest Req = GCheckoutButton1.CreateRequest();

            Req.AddItem("Snickers", "Packed with peanuts.", 0.75m, 2);
            Req.AddItem("Gallon of Milk", "Milk goes great with candy bars!", 2.99m, 1);
            Req.AddStateTaxRule("CA", 0.0825, true);
            Req.AddStateTaxRule("IL", 0.0625, false);
            ShippingRestrictions Only48Lower = new ShippingRestrictions();

            // Only48Lower.AddAllowedCountryArea(GCheckout.AutoGen.USAreas.CONTINENTAL_48);
            Req.AddFlatRateShippingMethod("UPS Ground", 7.05m, Only48Lower);
            ShippingRestrictions OnlyCA_NV = new ShippingRestrictions();

            OnlyCA_NV.AddAllowedStateCode("CA");
            OnlyCA_NV.AddAllowedStateCode("NV");
            Req.AddFlatRateShippingMethod("California Express", 6.35m, OnlyCA_NV);
            Req.AddFlatRateShippingMethod("USPS", 3.08m);
            Req.AddPickupShippingMethod("Pick up in store", 0);
            Req.ContinueShoppingUrl = "http://www.example.com/continueshopping";
            Req.EditCartUrl         = "http://www.example.com/editcart";
            GCheckoutResponse Resp = Req.Send();

            Response.Redirect(Resp.RedirectUrl, true);
        }
Example #4
0
    protected void PostCartToGoogle(object sender, System.Web.UI.ImageClickEventArgs e)
    {
        uxGCheckoutButton.Currency = DataAccessContext.Configurations.GetValue("PaymentCurrency");
        CheckoutShoppingCartRequest request = uxGCheckoutButton.CreateRequest();

        GoogleCheckoutRequestHelper helper = new GoogleCheckoutRequestHelper();

        helper.PopulateRequest(
            UrlPath.StorefrontUrl,
            request,
            StoreContext.ShoppingCart,
            StoreContext.Culture,
            StoreContext.Currency,
            StoreContext.WholesaleStatus,
            StoreContext.CheckoutDetails);

        StoreContext.ClearCheckoutSession();

        Log.Debug("----------------------------------------");
        Log.Debug("Request XML: " + EncodeHelper.Utf8BytesToString(request.GetXml()));

        GCheckoutResponse response = request.Send();

        if (response.IsGood)
        {
            if (UrlManager.IsFacebook())
            {
                string script = "window.parent.location.href='" + response.RedirectUrl + "'";
                ScriptManager.RegisterStartupScript(this, typeof(Page), "startScript", script, true);
            }
            else
            {
                Response.Redirect(response.RedirectUrl, true);
            }
        }
        else
        {
            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Google Checkout Request Error: ");
            sb.AppendLine("ResponseXml = " + response.ResponseXml);
            sb.AppendLine("RedirectUrl = " + response.RedirectUrl);
            sb.AppendLine("IsGood = " + response.IsGood);
            sb.AppendLine("ErrorMessage = " + response.ErrorMessage);

            throw new VevoException(sb.ToString());
        }
    }
        /// <summary>
        /// Captures payment
        /// </summary>
        /// <param name="order">Order</param>
        /// <param name="processPaymentResult">Process payment result</param>
        public void Capture(Order order, ref ProcessPaymentResult processPaymentResult)
        {
            string googleOrderNumber = processPaymentResult.AuthorizationTransactionId;

            GCheckout.OrderProcessing.ChargeOrderRequest chargeOrderRequest = new GCheckout.OrderProcessing.ChargeOrderRequest(googleOrderNumber);
            GCheckoutResponse chargeOrderResponse = chargeOrderRequest.Send();

            if (chargeOrderResponse.IsGood)
            {
                processPaymentResult.PaymentStatus            = PaymentStatusEnum.Paid;
                processPaymentResult.CaptureTransactionResult = chargeOrderResponse.ResponseXml;
            }
            else
            {
                processPaymentResult.Error = chargeOrderResponse.ErrorMessage;
            }
        }
Example #6
0
        void btnGoogleCheckout_Click(object sender, ImageClickEventArgs e)
        {
            if (
                (store != null) &&
                (cart != null)
                )
            { //&& (IsValidForCheckout()) ?
                int cartTimeoutInMinutes = 30;

                CheckoutShoppingCartRequest Req = new CheckoutShoppingCartRequest(
                    commerceConfig.GoogleMerchantID,
                    commerceConfig.GoogleMerchantKey,
                    commerceConfig.GoogleEnvironment,
                    siteSettings.GetCurrency().Code,
                    cartTimeoutInMinutes);


                foreach (CartOffer cartOffer in cart.CartOffers)
                {
                    Req.AddItem(
                        cartOffer.Name,
                        string.Empty,
                        cartOffer.OfferPrice,
                        cartOffer.Quantity);
                }

                //Req.AddMerchantCalculatedShippingMethod
                //Req.AnalyticsData
                //Req.ContinueShoppingUrl
                //Req.EditCartUrl

                //Req.RequestInitialAuthDetails
                //Req.AddParameterizedUrl

                // we need to serialize the cart and it items to xml here
                // so when we get it back from google
                // we can validate against the existing cart
                // as its possible items were added to the cart
                // after we passed the user to google

                //Req.MerchantPrivateData = cart.CartGuid.ToString();
                //cart.SerializeCartOffers();
                //Req.MerchantPrivateData = SerializationHelper.SerializeToSoap(cart);

                cart.SerializeCartOffers();
                MerchantData merchantData = new MerchantData();
                merchantData.ProviderName     = "WebStoreGCheckoutNotificationHandlerProvider";
                merchantData.SerializedObject = SerializationHelper.RemoveXmlDeclaration(SerializationHelper.SerializeToString(cart));
                Req.MerchantPrivateData       = SerializationHelper.RemoveXmlDeclaration(SerializationHelper.SerializeToString(merchantData));
                Req.RequestBuyerPhoneNumber   = true;

                // flat rate shipping example
                //Req.AddFlatRateShippingMethod("UPS Ground", 5);

                //Add a rule to tax all items at 7.5% for Ohio
                //Req.AddStateTaxRule("NC", .15, true);
                //TODO: lookup tax

                GCheckoutResponse Resp = Req.Send();

                if (Resp.IsGood)
                {
                    Response.Redirect(Resp.RedirectUrl, true);
                }
                else
                {
                    lblMessage.Text = Resp.ErrorMessage;
                }
            }
        }
        /// <summary>
        /// Post cart to google
        /// </summary>
        /// <param name="req">Pre-generated request</param>
        /// <param name="cart">Shopping cart</param>
        /// <returns>Response</returns>
        public GCheckoutResponse PostCartToGoogle(CheckoutShoppingCartRequest req,
                                                  NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCart cart)
        {
            //items
            foreach (NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCartItem sci in cart)
            {
                ProductVariant productVariant = sci.ProductVariant;
                if (productVariant != null)
                {
                    string  description = ProductAttributeHelper.FormatAttributes(productVariant, sci.AttributesXml, NopContext.Current.User, ", ", false);
                    string  fullName    = productVariant.FullProductName;
                    decimal unitPrice   = TaxManager.GetPrice(sci.ProductVariant, PriceHelper.GetUnitPrice(sci, NopContext.Current.User, true));
                    req.AddItem(fullName, description, sci.ShoppingCartItemId.ToString(), unitPrice, sci.Quantity);
                }
            }

            //discounts
            decimal  subTotalDiscountBase = decimal.Zero;
            Discount appliedDiscount      = null;
            //List<AppliedGiftCard> appliedGiftCards = null;
            decimal subtotalBaseWithoutPromo = decimal.Zero;
            decimal subtotalBaseWithPromo    = decimal.Zero;
            string  SubTotalError            = ShoppingCartManager.GetShoppingCartSubTotal(cart,
                                                                                           NopContext.Current.User, out subTotalDiscountBase,
                                                                                           out appliedDiscount,
                                                                                           out subtotalBaseWithoutPromo, out subtotalBaseWithPromo);

            if (subTotalDiscountBase > decimal.Zero)
            {
                req.AddItem("Discount", string.Empty, string.Empty, (decimal)(-1.0) * subTotalDiscountBase, 1);
            }
            //foreach (AppliedGiftCard agc in appliedGiftCards)
            //{
            //    req.AddItem(string.Format("Gift Card - {0}", agc.GiftCard.GiftCardCouponCode), string.Empty, string.Empty, (decimal)(-1.0) * agc.AmountCanBeUsed, 1);
            //}

            bool shoppingCartRequiresShipping = ShippingManager.ShoppingCartRequiresShipping(cart);

            if (shoppingCartRequiresShipping)
            {
                string shippingError = string.Empty;
                //TODO AddMerchantCalculatedShippingMethod
                //TODO AddCarrierCalculatedShippingOption
                ShippingOptionCollection shippingOptions = ShippingManager.GetShippingOptions(cart, NopContext.Current.User, null, ref shippingError);
                foreach (ShippingOption shippingOption in shippingOptions)
                {
                    req.AddFlatRateShippingMethod(shippingOption.Name, TaxManager.GetShippingPrice(shippingOption.Rate, NopContext.Current.User));
                }
            }

            //add only US, GB states
            //CountryCollection countries = CountryManager.GetAllCountries();
            //foreach (Country country in countries)
            //{
            //    foreach (StateProvince state in country.StateProvinces)
            //    {
            //        TaxByStateProvinceCollection taxByStateProvinceCollection = TaxByStateProvinceManager.GetAllByStateProvinceID(state.StateProvinceID);
            //        foreach (TaxByStateProvince taxByStateProvince in taxByStateProvinceCollection)
            //        {
            //            if (!String.IsNullOrEmpty(state.Abbreviation))
            //            {
            //                Req.AddStateTaxRule(state.Abbreviation, (double)taxByStateProvince.Percentage, false);
            //            }
            //        }
            //    }
            //}

            XmlDocument customerInfoDoc = new XmlDocument();
            XmlElement  customerInfo    = customerInfoDoc.CreateElement("CustomerInfo");

            customerInfo.SetAttribute("CustomerID", NopContext.Current.User.CustomerId.ToString());
            customerInfo.SetAttribute("CustomerLanguageID", NopContext.Current.WorkingLanguage.LanguageId.ToString());
            customerInfo.SetAttribute("CustomerCurrencyID", NopContext.Current.WorkingCurrency.CurrencyId.ToString());
            req.AddMerchantPrivateDataNode(customerInfo);

            req.ContinueShoppingUrl = CommonHelper.GetStoreLocation(false);
            req.EditCartUrl         = CommonHelper.GetStoreLocation(false) + "ShoppingCart.aspx";

            GCheckoutResponse resp = req.Send();

            return(resp);
        }
Example #8
0
    public void LoadSetting()
    {
        GoogleCheckOutWCFService         pw = new GoogleCheckOutWCFService();
        List <GoogleCheckOutSettingInfo> sf;
        OrderDetailsCollection           orderdata2 = new OrderDetailsCollection();

        orderdata2 = (OrderDetailsCollection)HttpContext.Current.Session["OrderCollection"];
        string itemidsWithVar = "";

        foreach (var item in orderdata2.LstOrderItemsInfo)
        {
            itemidsWithVar += item.ItemID + "&" + item.Quantity + "&" + orderdata2.ObjOrderDetails.OrderID + "&" + item.Variants + ",";
        }
        string country   = orderdata2.ObjShippingAddressInfo.Country.ToString();
        string state     = orderdata2.ObjShippingAddressInfo.State.ToString();
        string zip       = orderdata2.ObjShippingAddressInfo.Zip.ToString();
        int    addressID = Convert.ToInt32(orderdata2.ObjShippingAddressInfo.AddressID);

        try
        {
            sf = pw.GetAllGoogleCheckOutSetting(int.Parse(Session["GateWay"].ToString()), storeID, portalID);

            double  amountTotal          = double.Parse(Session["GrandTotalAll"].ToString()) * rate;
            decimal grandTotal           = decimal.Parse(amountTotal.ToString(CultureInfo.InvariantCulture));
            decimal totalTaxableAmount   = 0;
            decimal subtotalAmount       = 0;
            decimal taxSubTotal          = 0;
            decimal shipping             = Convert.ToDecimal(Convert.ToDouble(Session["ShippingCostAll"].ToString()) * rate);
            decimal shippingCost         = decimal.Parse(shipping.ToString(CultureInfo.InvariantCulture));
            decimal discountAmount       = 0;
            decimal couponDiscountAmount = 0;
            decimal rewardDiscountAmount = 0;

            if (sf[0].GoogleEnvironmentType == "Sandbox")
            {
                CheckoutShoppingCartRequest gCartRequest = new CheckoutShoppingCartRequest(sf[0].GoogleMerchantID, sf[0].GoogleMerchantKey, GCheckout.EnvironmentType.Sandbox, sf[0].GoogleCurrencyType, 30, false);
                HttpContext.Current.Session["EnvironmentType"] = "Sandbox";

                List <CartInfoforGoogleCheckOut> cd;
                cd = pw.GetCartDetailsForPG(storeID, portalID, customerID, userName, GetCurrentCultureName, sessionCode, country, state, zip, addressID);

                int nCount = 1;
                foreach (CartInfoforGoogleCheckOut oItem in cd)
                {
                    string  itemName     = oItem.ItemName.ToString();
                    string  description  = oItem.ShortDescription.ToString();
                    int     qty          = Convert.ToInt32(oItem.Quantity.ToString());
                    decimal TaxRateValue = Convert.ToDecimal(Convert.ToDouble(oItem.TaxRateValue.ToString()) * rate) / qty;
                    decimal amount       = Convert.ToDecimal(Convert.ToDouble(oItem.Price.ToString()) * rate);
                    decimal subTotal     = amount;// +TaxRateValue;

                    gCartRequest.AddItem(itemName, description, subTotal, qty);
                    nCount++;
                }
                nCount--;

                //Send Discount Amount
                if (orderdata2.ObjOrderDetails.DiscountAmount != 0)
                {
                    string itemName    = "Cart Discount Amount";
                    string description = "Discount Applied on Cart Items";
                    int    qty         = 1;
                    discountAmount = 0;
                    decimal discount = Convert.ToDecimal(Convert.ToDouble(orderdata2.ObjOrderDetails.DiscountAmount) * rate);
                    discountAmount = decimal.Parse(discount.ToString(CultureInfo.InvariantCulture));
                    gCartRequest.AddItem(itemName, description, -discountAmount, qty);
                }
                //Send Coupon Amount
                if (orderdata2.ObjOrderDetails.CouponDiscountAmount != 0)
                {
                    string itemName    = "Coupon Discount Amount";
                    string description = "Coupon Discount Applied on Cart Items";
                    int    qty         = 1;
                    couponDiscountAmount = 0;
                    decimal couponDiscount = Convert.ToDecimal(Convert.ToDouble(orderdata2.ObjOrderDetails.CouponDiscountAmount) * rate);
                    couponDiscountAmount = decimal.Parse(couponDiscount.ToString(CultureInfo.InvariantCulture));
                    gCartRequest.AddItem(itemName, description, -couponDiscountAmount, qty);
                }
                //Send Reward Discount Amount
                if (orderdata2.ObjOrderDetails.RewardDiscountAmount != 0)
                {
                    string itemName    = "Reward Points Discount Amount";
                    string description = "Reward Points Discount Applied on Cart Items";
                    int    qty         = 1;
                    rewardDiscountAmount = 0;
                    decimal rewardDiscount = Convert.ToDecimal(Convert.ToDouble(orderdata2.ObjOrderDetails.RewardDiscountAmount) * rate);
                    rewardDiscountAmount = decimal.Parse(rewardDiscount.ToString(CultureInfo.InvariantCulture));
                    gCartRequest.AddItem(itemName, description, -rewardDiscountAmount, qty);
                }
                //tax
                if (orderdata2.ObjOrderDetails.TaxTotal != 0)
                {
                    decimal tax = Convert.ToDecimal(Convert.ToDouble(orderdata2.ObjOrderDetails.TaxTotal) * rate);
                    taxSubTotal = decimal.Parse(tax.ToString(CultureInfo.InvariantCulture));
                }
                subtotalAmount     = grandTotal - shippingCost - taxSubTotal + discountAmount + couponDiscountAmount;
                totalTaxableAmount = subtotalAmount - discountAmount - couponDiscountAmount;
                double taxp   = Convert.ToDouble((taxSubTotal * 100) / totalTaxableAmount);
                double taxPer = taxp / 100;

                gCartRequest.AddCountryTaxRule(USAreas.ALL, taxPer, false);

                //Shipping Cost
                string shippingMethod;
                if (HttpContext.Current.Session["ShippingMethodName"] != null)
                {
                    shippingMethod = HttpContext.Current.Session["ShippingMethodName"].ToString();
                }
                else
                {
                    shippingMethod = "Default Shipping";
                }
                //shippingMethod = "Default Shipping";
                //decimal shippingcost = Convert.ToDecimal(Convert.ToDouble(Session["ShippingCostAll"].ToString()) * rate);
                gCartRequest.AddFlatRateShippingMethod(shippingMethod, shippingCost);

                //Create extra data to pass
                XmlDocument tempDoc = new System.Xml.XmlDocument();
                tempDoc.LoadXml("<root />");

                XmlNode orderIdNode = tempDoc.CreateElement("OrderID");
                orderIdNode.InnerText = Session["OrderID"].ToString();
                gCartRequest.AddMerchantPrivateDataNode(orderIdNode);

                XmlNode userIdNode = tempDoc.CreateElement("userName");
                userIdNode.InnerText = userName;
                gCartRequest.AddMerchantPrivateDataNode(userIdNode);

                XmlNode amountNode = tempDoc.CreateElement("amount");
                amountNode.InnerText = (double.Parse(Session["GrandTotalAll"].ToString()) * rate).ToString();
                gCartRequest.AddMerchantPrivateDataNode(amountNode);

                XmlNode currencyNode = tempDoc.CreateElement("selectedCurrency");
                currencyNode.InnerText = SelectedCurrency;
                gCartRequest.AddMerchantPrivateDataNode(currencyNode);


                XmlNode portalIDNode = tempDoc.CreateElement("portalID");
                portalIDNode.InnerText = portalID.ToString();
                gCartRequest.AddMerchantPrivateDataNode(portalIDNode);

                XmlNode customerIDNode = tempDoc.CreateElement("customerID");
                customerIDNode.InnerText = customerID.ToString();
                gCartRequest.AddMerchantPrivateDataNode(customerIDNode);

                XmlNode itemIdsNode = tempDoc.CreateElement("itemIds");
                itemIdsNode.InnerText = itemidsWithVar;
                gCartRequest.AddMerchantPrivateDataNode(itemIdsNode);

                XmlNode storeIDNode = tempDoc.CreateElement("storeID");
                storeIDNode.InnerText = storeID.ToString();
                gCartRequest.AddMerchantPrivateDataNode(storeIDNode);

                XmlNode couponCodeNode = tempDoc.CreateElement("couponCode");
                couponCodeNode.InnerText = couponCode;
                gCartRequest.AddMerchantPrivateDataNode(couponCodeNode);

                XmlNode sessionCodeNode = tempDoc.CreateElement("sessionCode");
                sessionCodeNode.InnerText = sessionCode;
                gCartRequest.AddMerchantPrivateDataNode(sessionCodeNode);

                XmlNode pgIDNode = tempDoc.CreateElement("pgID");
                pgIDNode.InnerText = Session["GateWay"].ToString();
                gCartRequest.AddMerchantPrivateDataNode(pgIDNode);

                XmlNode MerchantIDNode = tempDoc.CreateElement("MerchantID");
                MerchantIDNode.InnerText = sf[0].GoogleMerchantID;
                gCartRequest.AddMerchantPrivateDataNode(MerchantIDNode);

                XmlNode MerchantKeyNode = tempDoc.CreateElement("MerchantKey");
                MerchantKeyNode.InnerText = sf[0].GoogleMerchantKey;
                gCartRequest.AddMerchantPrivateDataNode(MerchantKeyNode);

                //Get response
                GCheckoutResponse response = gCartRequest.Send();
                // Post the request for Google checkout

                if (response.IsGood)
                {
                    Response.Redirect(response.RedirectUrl, false);
                }
            }


            if (sf[0].GoogleEnvironmentType == "Production")
            {
                CheckoutShoppingCartRequest gCartRequest = new CheckoutShoppingCartRequest(sf[0].GoogleMerchantID, sf[0].GoogleMerchantKey, GCheckout.EnvironmentType.Production, sf[0].GoogleCurrencyType, 30, false);
                HttpContext.Current.Session["EnvironmentType"] = "Production";

                List <CartInfoforGoogleCheckOut> cd;
                cd = pw.GetCartDetailsForPG(storeID, portalID, customerID, userName, GetCurrentCultureName, sessionCode, country, state, zip, addressID);

                int nCount = 1;
                foreach (CartInfoforGoogleCheckOut oItem in cd)
                {
                    string  itemName     = oItem.ItemName.ToString();
                    string  description  = oItem.ShortDescription.ToString();
                    int     qty          = Convert.ToInt32(oItem.Quantity.ToString());
                    decimal TaxRateValue = Convert.ToDecimal(Convert.ToDouble(oItem.TaxRateValue.ToString()) * rate) / qty;
                    decimal amount       = Convert.ToDecimal(Convert.ToDouble(oItem.Price.ToString()) * rate);
                    decimal subTotal     = amount + TaxRateValue;

                    gCartRequest.AddItem(itemName, description, subTotal, qty);
                    nCount++;
                }
                nCount--;

                //Send Discount Amount
                if (orderdata2.ObjOrderDetails.DiscountAmount != 0)
                {
                    string itemName    = "Cart Discount Amount";
                    string description = "Discount Applied on Cart Items";
                    int    qty         = 1;
                    discountAmount = 0;
                    decimal discount = Convert.ToDecimal(Convert.ToDouble(orderdata2.ObjOrderDetails.DiscountAmount) * rate);
                    discountAmount = decimal.Parse(discount.ToString(CultureInfo.InvariantCulture));
                    gCartRequest.AddItem(itemName, description, -discountAmount, qty);
                }
                //Send Coupon Amount
                if (orderdata2.ObjOrderDetails.CouponDiscountAmount != 0)
                {
                    string itemName    = "Coupon Discount Amount";
                    string description = "Coupon Discount Applied on Cart Items";
                    int    qty         = 1;
                    couponDiscountAmount = 0;
                    decimal couponDiscount = Convert.ToDecimal(Convert.ToDouble(orderdata2.ObjOrderDetails.CouponDiscountAmount) * rate);
                    couponDiscountAmount = decimal.Parse(couponDiscount.ToString(CultureInfo.InvariantCulture));
                    gCartRequest.AddItem(itemName, description, -couponDiscountAmount, qty);
                }
                //Send Reward Discount Amount
                if (orderdata2.ObjOrderDetails.RewardDiscountAmount != 0)
                {
                    string itemName    = "Reward Points Discount Amount";
                    string description = "Reward Points Discount Applied on Cart Items";
                    int    qty         = 1;
                    rewardDiscountAmount = 0;
                    decimal rewardDiscount = Convert.ToDecimal(Convert.ToDouble(orderdata2.ObjOrderDetails.RewardDiscountAmount) * rate);
                    rewardDiscountAmount = decimal.Parse(rewardDiscount.ToString(CultureInfo.InvariantCulture));
                    gCartRequest.AddItem(itemName, description, -rewardDiscountAmount, qty);
                }
                //tax
                if (orderdata2.ObjOrderDetails.TaxTotal != 0)
                {
                    decimal tax = Convert.ToDecimal(Convert.ToDouble(orderdata2.ObjOrderDetails.TaxTotal) * rate);
                    taxSubTotal = decimal.Parse(tax.ToString(CultureInfo.InvariantCulture));
                }
                subtotalAmount     = grandTotal - shippingCost - taxSubTotal + discountAmount + couponDiscountAmount;
                totalTaxableAmount = subtotalAmount - discountAmount - couponDiscountAmount;
                double taxp   = Convert.ToDouble((taxSubTotal * 100) / totalTaxableAmount);
                double taxPer = taxp / 100;
                gCartRequest.AddCountryTaxRule(USAreas.ALL, taxPer, false);

                //Shipping Cost
                string shippingMethod;
                if (HttpContext.Current.Session["ShippingMethodName"] != null)
                {
                    shippingMethod = HttpContext.Current.Session["ShippingMethodName"].ToString();
                }
                else
                {
                    shippingMethod = "Default Shipping";
                }
                //shippingMethod = "Default Shipping";
                //decimal shippingcost = Convert.ToDecimal(Convert.ToDouble(Session["ShippingCostAll"].ToString()) * rate);
                gCartRequest.AddFlatRateShippingMethod(shippingMethod, shippingCost);


                //Create extra data to pass
                XmlDocument tempDoc = new System.Xml.XmlDocument();
                tempDoc.LoadXml("<root />");

                XmlNode orderIdNode = tempDoc.CreateElement("OrderID");
                orderIdNode.InnerText = Session["OrderID"].ToString();
                gCartRequest.AddMerchantPrivateDataNode(orderIdNode);

                XmlNode userIdNode = tempDoc.CreateElement("userName");
                userIdNode.InnerText = userName;
                gCartRequest.AddMerchantPrivateDataNode(userIdNode);

                XmlNode amountNode = tempDoc.CreateElement("amount");
                amountNode.InnerText = (double.Parse(Session["GrandTotalAll"].ToString()) * rate).ToString();
                gCartRequest.AddMerchantPrivateDataNode(amountNode);

                XmlNode currencyNode = tempDoc.CreateElement("selectedCurrency");
                currencyNode.InnerText = SelectedCurrency;
                gCartRequest.AddMerchantPrivateDataNode(currencyNode);

                XmlNode portalIDNode = tempDoc.CreateElement("portalID");
                portalIDNode.InnerText = portalID.ToString();
                gCartRequest.AddMerchantPrivateDataNode(portalIDNode);

                XmlNode customerIDNode = tempDoc.CreateElement("customerID");
                customerIDNode.InnerText = customerID.ToString();
                gCartRequest.AddMerchantPrivateDataNode(customerIDNode);

                XmlNode itemIdsNode = tempDoc.CreateElement("itemIds");
                itemIdsNode.InnerText = itemidsWithVar;
                gCartRequest.AddMerchantPrivateDataNode(itemIdsNode);

                XmlNode storeIDNode = tempDoc.CreateElement("storeID");
                storeIDNode.InnerText = storeID.ToString();
                gCartRequest.AddMerchantPrivateDataNode(storeIDNode);

                XmlNode couponCodeNode = tempDoc.CreateElement("couponCode");
                couponCodeNode.InnerText = couponCode;
                gCartRequest.AddMerchantPrivateDataNode(couponCodeNode);

                XmlNode sessionCodeNode = tempDoc.CreateElement("sessionCode");
                sessionCodeNode.InnerText = sessionCode;
                gCartRequest.AddMerchantPrivateDataNode(sessionCodeNode);

                XmlNode pgIDNode = tempDoc.CreateElement("pgID");
                pgIDNode.InnerText = Session["GateWay"].ToString();
                gCartRequest.AddMerchantPrivateDataNode(pgIDNode);

                XmlNode MerchantIDNode = tempDoc.CreateElement("MerchantID");
                MerchantIDNode.InnerText = sf[0].GoogleMerchantID;
                gCartRequest.AddMerchantPrivateDataNode(MerchantIDNode);

                XmlNode MerchantKeyNode = tempDoc.CreateElement("MerchantKey");
                MerchantKeyNode.InnerText = sf[0].GoogleMerchantKey;
                gCartRequest.AddMerchantPrivateDataNode(MerchantKeyNode);

                //Get response
                GCheckoutResponse response = gCartRequest.Send();
                // Post the request for Google checkout

                if (response.IsGood)
                {
                    Response.Redirect(response.RedirectUrl, false);
                }
            }
        }
        catch (Exception ex)
        {
            lblnotity.Text    = "Something goes wrong, hit refresh or go back to checkout";
            clickhere.Visible = false;
            ProcessException(ex);
        }
    }
        /// <summary>
        /// Post cart to google
        /// </summary>
        /// <param name="req">Pre-generated request</param>
        /// <param name="cart">Shopping cart</param>
        /// <returns>Response</returns>
        public GCheckoutResponse PostCartToGoogle(CheckoutShoppingCartRequest req,
                                                  IList <Core.Domain.Orders.ShoppingCartItem> cart)
        {
            //there's no need to round prices (Math.Round(,2)) because GCheckout library does it for us
            //items
            foreach (Core.Domain.Orders.ShoppingCartItem sci in cart)
            {
                var productVariant = sci.ProductVariant;
                if (productVariant != null)
                {
                    decimal taxRate     = decimal.Zero;
                    string  description = _productAttributeFormatter.FormatAttributes(productVariant, sci.AttributesXml, _workContext.CurrentCustomer, ", ", false);
                    string  fullName    = "";
                    if (!String.IsNullOrEmpty(sci.ProductVariant.GetLocalized(x => x.Name)))
                    {
                        fullName = string.Format("{0} ({1})", sci.ProductVariant.Product.GetLocalized(x => x.Name), sci.ProductVariant.GetLocalized(x => x.Name));
                    }
                    else
                    {
                        fullName = sci.ProductVariant.Product.GetLocalized(x => x.Name);
                    }
                    decimal unitPrice = _taxService.GetProductPrice(sci.ProductVariant, _priceCalculationService.GetUnitPrice(sci, true), out taxRate);
                    req.AddItem(fullName, description, sci.Id.ToString(), unitPrice, sci.Quantity);
                }
            }

            if (cart.RequiresShipping())
            {
                //AddMerchantCalculatedShippingMethod
                //AddCarrierCalculatedShippingOption
                var shippingOptions = _shippingService.GetShippingOptions(cart, null);
                foreach (ShippingOption shippingOption in shippingOptions.ShippingOptions)
                {
                    req.AddFlatRateShippingMethod(shippingOption.Name, _taxService.GetShippingPrice(shippingOption.Rate, _workContext.CurrentCustomer));
                }
            }

            //add only US, GB states
            //CountryCollection countries = IoC.Resolve<ICountryService>().GetAllCountries();
            //foreach (Country country in countries)
            //{
            //    foreach (StateProvince state in country.StateProvinces)
            //    {
            //        TaxByStateProvinceCollection taxByStateProvinceCollection = TaxByIoC.Resolve<IStateProvinceService>().GetAllByStateProvinceID(state.StateProvinceID);
            //        foreach (TaxByStateProvince taxByStateProvince in taxByStateProvinceCollection)
            //        {
            //            if (!String.IsNullOrEmpty(state.Abbreviation))
            //            {
            //                Req.AddStateTaxRule(state.Abbreviation, (double)taxByStateProvince.Percentage, false);
            //            }
            //        }
            //    }
            //}

            //if (subTotalDiscountBase > decimal.Zero)
            //{
            //    req.AddItem("Discount", string.Empty, string.Empty, (decimal)(-1.0) * subTotalDiscountBase, 1);
            //}

            //foreach (AppliedGiftCard agc in appliedGiftCards)
            //{
            //    req.AddItem(string.Format("Gift Card - {0}", agc.GiftCard.GiftCardCouponCode), string.Empty, string.Empty, (decimal)(-1.0) * agc.AmountCanBeUsed, 1);
            //}

            var        customerInfoDoc = new XmlDocument();
            XmlElement customerInfo    = customerInfoDoc.CreateElement("CustomerInfo");

            customerInfo.SetAttribute("CustomerID", _workContext.CurrentCustomer.Id.ToString());
            customerInfo.SetAttribute("CustomerLanguageID", _workContext.WorkingLanguage.Id.ToString());
            customerInfo.SetAttribute("CustomerCurrencyID", _workContext.WorkingCurrency.Id.ToString());
            req.AddMerchantPrivateDataNode(customerInfo);

            req.ContinueShoppingUrl = _webHelper.GetStoreLocation(false);
            req.EditCartUrl         = _webHelper.GetStoreLocation(false) + "cart";

            GCheckoutResponse resp = req.Send();

            return(resp);
        }
        protected void GCheckoutButton_Click(object sender, ImageClickEventArgs e)
        {
            if (_BasketGrid != null)
            {
                //First Save the updated Basket
                AbleCommerce.Code.BasketHelper.SaveBasket(_BasketGrid);
            }

            GCheckoutButton.Currency = AbleContext.Current.Store.BaseCurrency.ISOCode;
            CheckoutShoppingCartRequest Req = GCheckoutButton.CreateRequest();

            System.Xml.XmlDocument tempDoc = new System.Xml.XmlDocument();

            Basket basket = AbleContext.Current.User.Basket;

            // Add a "BasketId" node.
            System.Xml.XmlNode tempNode2 = tempDoc.CreateElement("BasketId");
            tempNode2.InnerText = basket.Id.ToString();
            Req.AddMerchantPrivateDataNode(tempNode2);

            tempNode2           = tempDoc.CreateElement("BasketContentHash");
            tempNode2.InnerText = GetBasketContentHash(basket);
            Req.AddMerchantPrivateDataNode(tempNode2);

            // We just created this structure on the order level:
            // <merchant-private-data>
            //   <BasketId xmlns="">xxxxxx</BasketId>
            // </merchant-private-data>

            // Now we are going to add the basket items.
            XmlNode[] itemPrivateData;
            foreach (BasketItem item in basket.Items)
            {
                switch (item.OrderItemType)
                {
                case OrderItemType.Product:
                    itemPrivateData = BuildPrivateData(item);
                    bool isDigitalContent = item.Product == null ? false : item.Product.IsDigitalGood;
                    if (isDigitalContent)
                    {
                        Req.AddItem(AcHelper.SanitizeText(item.Name), AcHelper.SanitizeText(item.Product.Description), (Decimal)item.Price, item.Quantity, isDigitalContent, AcHelper.SanitizeText(string.Format("The download will be available from your {0} order receipt once payment is processed.", AbleContext.Current.Store.Name)), itemPrivateData);
                    }
                    else
                    {
                        Req.AddItem(AcHelper.SanitizeText(item.Name), AcHelper.SanitizeText(item.Product.Description), (Decimal)item.Price, item.Quantity, itemPrivateData);
                    }
                    break;

                case OrderItemType.Charge:
                    itemPrivateData = BuildPrivateData(item);
                    Req.AddItem(AcHelper.SanitizeText(item.Name), "Charge", (Decimal)item.Price, item.Quantity, itemPrivateData);
                    break;

                case OrderItemType.Credit:
                    itemPrivateData = BuildPrivateData(item);
                    Req.AddItem(AcHelper.SanitizeText(item.Name), "Credit", (Decimal)item.Price, item.Quantity, itemPrivateData);
                    break;

                case OrderItemType.GiftWrap:
                    itemPrivateData = BuildPrivateData(item);
                    Req.AddItem(AcHelper.SanitizeText(item.Name), "Gift Wrapping", (Decimal)item.Price, item.Quantity, itemPrivateData);
                    break;

                case OrderItemType.Coupon:     //on callback as well
                    itemPrivateData = BuildPrivateData(item);
                    Req.AddItem(AcHelper.SanitizeText(item.Name), "Your coupon has been applied.", (Decimal)item.Price, item.Quantity, itemPrivateData);
                    break;

                case OrderItemType.Discount:
                    itemPrivateData = BuildPrivateData(item);
                    Req.AddItem(AcHelper.SanitizeText(item.Name), "Discount", (Decimal)item.Price, item.Quantity, itemPrivateData);
                    break;

                case OrderItemType.GiftCertificate:     //on callback
                    break;

                case OrderItemType.Handling:     //on callback
                    break;

                case OrderItemType.Shipping:     //on callback
                    break;

                case OrderItemType.Tax:     //on callback
                    break;
                }
            }

            //setup other settings
            Req.AcceptMerchantCoupons          = GCheckoutButton.GatewayInstance.CouponsEnabled;
            Req.AcceptMerchantGiftCertificates = GCheckoutButton.GatewayInstance.GiftCertificatesEnabled;
            //Req.CartExpiration = expirationDate;
            string storeDomain  = UrlHelper.GetDomainFromUrl(AbleContext.Current.Store.StoreUrl);
            string storeBaseUrl = "http://" + storeDomain;

            Req.ContinueShoppingUrl   = storeBaseUrl + this.ResolveUrl("~/Default.aspx");
            Req.EditCartUrl           = storeBaseUrl + this.ResolveUrl("~/Basket.aspx");
            Req.MerchantCalculatedTax = true;
            //add at least one tax rule
            Req.AddZipTaxRule("99999", 0F, false);
            string storeBaseSecureUrl = AbleContext.Current.Store.Settings.SSLEnabled ? storeBaseUrl.Replace("http://", "https://") : storeBaseUrl;

            Req.MerchantCalculationsUrl = storeBaseSecureUrl + this.ResolveUrl("~/Checkout/Google/MerchantCalc.ashx");
            Req.PlatformID = 769150108975916;
            Req.RequestBuyerPhoneNumber = true;
            Req.SetExpirationMinutesFromNow(GCheckoutButton.GatewayInstance.ExpirationMinutes);

            //add ship methods
            IList <ShipMethod>   shipMethods      = ShipMethodDataSource.LoadAll();
            List <string>        shipMethodsAdded = new List <string>();
            string               shipMethName;
            decimal              basketTotal      = basket.Items.TotalPrice();
            decimal              defaultRate      = GCheckoutButton.GatewayInstance.DefaultShipRate;
            ShippingRestrictions shipRestrictions = new ShippingRestrictions();

            shipRestrictions.AddAllowedWorldArea();

            foreach (ShipMethod shipMethod in shipMethods)
            {
                if (!shipMethod.Name.Equals("Unknown(GoogleCheckout)") &&
                    (shipMethod.MinPurchase <= 0 || shipMethod.MinPurchase <= basketTotal))
                {
                    //add all other shipmethods as merchant calculated irrespective of whether they
                    //are applicable or not. It will be determined on call-back
                    //GoogleCheckout does not allow to mix merchant calculated shipping methods with other methods
                    if (shipMethod.ShipMethodType == ShipMethodType.FlatRate)
                    {
                        defaultRate = GetFlatShipRate(shipMethod);
                    }
                    else
                    {
                        defaultRate = GCheckoutButton.GatewayInstance.DefaultShipRate;
                    }
                    shipMethName = BuildShipMethodName(shipMethod, shipMethodsAdded);
                    Req.AddMerchantCalculatedShippingMethod(shipMethName, defaultRate, shipRestrictions, shipRestrictions);
                    shipMethodsAdded.Add(shipMethName.ToLowerInvariant());
                }
            }

            GCheckoutResponse Resp = Req.Send();

            if (Resp.IsGood)
            {
                Response.Redirect(Resp.RedirectUrl, true);
            }
            else
            {
                DataList msgList;
                if (_WarningMessageList != null)
                {
                    msgList = _WarningMessageList;
                }
                else
                {
                    msgList            = GCWarningMessageList;
                    phWarnings.Visible = true;
                }
                if (msgList != null)
                {
                    List <string> googleMessages = new List <string>();
                    googleMessages.Add("Google Checkout Failed.");
                    googleMessages.Add("Google Checkout Response.IsGood = " + Resp.IsGood);
                    googleMessages.Add("Google Checkout Error Message = " + Resp.ErrorMessage);
                    msgList.DataSource = googleMessages;
                    msgList.DataBind();
                }
            }
        }
Example #11
0
        /// <summary>
        /// Post cart to google
        /// </summary>
        /// <param name="Req">Pre-generated request</param>
        /// <param name="Cart">Shopping cart</param>
        /// <returns>Response</returns>
        public GCheckoutResponse PostCartToGoogle(CheckoutShoppingCartRequest Req, NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCart Cart)
        {
            foreach (NopSolutions.NopCommerce.BusinessLogic.Orders.ShoppingCartItem sci in Cart)
            {
                ProductVariant productVariant = sci.ProductVariant;
                if (productVariant != null)
                {
                    string  pvAttributeDescription = ProductAttributeHelper.FormatAttributes(productVariant, sci.AttributesXML, NopContext.Current.User, ", ", false);
                    string  fullName    = productVariant.FullProductName;
                    string  description = pvAttributeDescription;
                    decimal unitPrice   = TaxManager.GetPrice(sci.ProductVariant, PriceHelper.GetUnitPrice(sci, NopContext.Current.User, true));
                    Req.AddItem(fullName, description, sci.ShoppingCartItemID.ToString(), unitPrice, sci.Quantity);
                }
            }

            decimal shoppingCartSubTotalDiscount;
            decimal shoppingCartSubTotal = ShoppingCartManager.GetShoppingCartSubTotal(Cart, NopContext.Current.User, out shoppingCartSubTotalDiscount);

            if (shoppingCartSubTotalDiscount > decimal.Zero)
            {
                Req.AddItem("Discount", string.Empty, string.Empty, (decimal)(-1.0) * shoppingCartSubTotalDiscount, 1);
            }

            bool shoppingCartRequiresShipping = ShippingManager.ShoppingCartRequiresShipping(Cart);

            if (shoppingCartRequiresShipping)
            {
                string shippingError = string.Empty;
                //TODO AddMerchantCalculatedShippingMethod
                //TODO AddCarrierCalculatedShippingOption
                ShippingOptionCollection shippingOptions = ShippingManager.GetShippingOptions(Cart, NopContext.Current.User, null, ref shippingError);
                foreach (ShippingOption shippingOption in shippingOptions)
                {
                    Req.AddFlatRateShippingMethod(shippingOption.Name, TaxManager.GetShippingPrice(shippingOption.Rate, NopContext.Current.User));
                }
            }

            //add only US, GB states
            //CountryCollection countries = CountryManager.GetAllCountries();
            //foreach (Country country in countries)
            //{
            //    foreach (StateProvince state in country.StateProvinces)
            //    {
            //        TaxByStateProvinceCollection taxByStateProvinceCollection = TaxByStateProvinceManager.GetAllByStateProvinceID(state.StateProvinceID);
            //        foreach (TaxByStateProvince taxByStateProvince in taxByStateProvinceCollection)
            //        {
            //            if (!String.IsNullOrEmpty(state.Abbreviation))
            //            {
            //                Req.AddStateTaxRule(state.Abbreviation, (double)taxByStateProvince.Percentage, false);
            //            }
            //        }
            //    }
            //}

            XmlDocument customerInfoDoc = new XmlDocument();
            XmlElement  customerInfo    = customerInfoDoc.CreateElement("CustomerInfo");

            customerInfo.SetAttribute("CustomerID", NopContext.Current.User.CustomerID.ToString());
            customerInfo.SetAttribute("CustomerLanguageID", NopContext.Current.WorkingLanguage.LanguageID.ToString());
            customerInfo.SetAttribute("CustomerCurrencyID", NopContext.Current.WorkingCurrency.CurrencyID.ToString());
            Req.AddMerchantPrivateDataNode(customerInfo);

            Req.ContinueShoppingUrl = CommonHelper.GetStoreLocation(false);
            Req.EditCartUrl         = CommonHelper.GetStoreLocation(false) + "ShoppingCart.aspx";

            GCheckoutResponse Resp = Req.Send();

            return(Resp);
        }