public override void HandleAuthorizationAmountNotification(
            string requestXml,
            AuthorizationAmountNotification notification)
        {
            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.ProviderName = "WebStoreGCheckoutNotificationHandlerProvider";
            gLog.NotificationType = "AuthorizationAmountNotification";
            gLog.RawResponse = requestXml;
            gLog.SerialNumber = notification.serialnumber;
            gLog.OrderNumber = notification.googleordernumber;
            gLog.GTimestamp = notification.timestamp;
            gLog.AuthAmt = notification.authorizationamount.Value;
            gLog.AuthExpDate = notification.authorizationexpirationdate;
            gLog.CvnResponse = notification.cvnresponse;
            gLog.AvsResponse = notification.avsresponse;

            gLog.Save();

            Guid orderGuid = GoogleCheckoutLog.GetCartGuidFromOrderNumber(notification.googleordernumber);

            if (orderGuid == Guid.Empty) return;

            Order order = new Order(orderGuid);
            if (order.OrderGuid != orderGuid) return;

            Store store = new Store(order.StoreGuid);
            if (store.Guid != order.StoreGuid) return;

            gLog.SiteGuid = store.SiteGuid;
            gLog.UserGuid = order.UserGuid;
            gLog.CartGuid = order.OrderGuid;
            gLog.StoreGuid = order.StoreGuid;
            gLog.Save();
        }
        private static List <GoogleCheckoutLog> LoadListFromReader(IDataReader reader)
        {
            List <GoogleCheckoutLog> googleCheckoutLogList = new List <GoogleCheckoutLog>();

            try
            {
                while (reader.Read())
                {
                    GoogleCheckoutLog googleCheckoutLog = new GoogleCheckoutLog();
                    googleCheckoutLog.rowGuid          = new Guid(reader["RowGuid"].ToString());
                    googleCheckoutLog.createdUtc       = Convert.ToDateTime(reader["CreatedUtc"]);
                    googleCheckoutLog.siteGuid         = new Guid(reader["SiteGuid"].ToString());
                    googleCheckoutLog.userGuid         = new Guid(reader["UserGuid"].ToString());
                    googleCheckoutLog.storeGuid        = new Guid(reader["StoreGuid"].ToString());
                    googleCheckoutLog.cartGuid         = new Guid(reader["CartGuid"].ToString());
                    googleCheckoutLog.notificationType = reader["NotificationType"].ToString();
                    googleCheckoutLog.rawResponse      = reader["RawResponse"].ToString();
                    googleCheckoutLog.serialNumber     = reader["SerialNumber"].ToString();
                    googleCheckoutLog.gTimestamp       = Convert.ToDateTime(reader["GTimestamp"]);
                    googleCheckoutLog.orderNumber      = reader["OrderNumber"].ToString();
                    googleCheckoutLog.buyerId          = reader["BuyerId"].ToString();
                    googleCheckoutLog.fullfillState    = reader["FullfillState"].ToString();
                    googleCheckoutLog.financeState     = reader["FinanceState"].ToString();
                    googleCheckoutLog.emailListOptIn   = Convert.ToBoolean(reader["EmailListOptIn"]);
                    googleCheckoutLog.avsResponse      = reader["AvsResponse"].ToString();
                    googleCheckoutLog.cvnResponse      = reader["CvnResponse"].ToString();
                    googleCheckoutLog.authExpDate      = Convert.ToDateTime(reader["AuthExpDate"]);
                    googleCheckoutLog.authAmt          = Convert.ToDecimal(reader["AuthAmt"]);
                    googleCheckoutLog.discountTotal    = Convert.ToDecimal(reader["DiscountTotal"]);
                    googleCheckoutLog.shippingTotal    = Convert.ToDecimal(reader["ShippingTotal"]);
                    googleCheckoutLog.taxTotal         = Convert.ToDecimal(reader["TaxTotal"]);
                    googleCheckoutLog.orderTotal       = Convert.ToDecimal(reader["OrderTotal"]);
                    googleCheckoutLog.latestChgAmt     = Convert.ToDecimal(reader["LatestChgAmt"]);
                    googleCheckoutLog.totalChgAmt      = Convert.ToDecimal(reader["TotalChgAmt"]);
                    googleCheckoutLog.latestRefundAmt  = Convert.ToDecimal(reader["LatestRefundAmt"]);
                    googleCheckoutLog.totalRefundAmt   = Convert.ToDecimal(reader["TotalRefundAmt"]);
                    googleCheckoutLog.latestChargeback = Convert.ToDecimal(reader["LatestChargeback"]);
                    googleCheckoutLog.totalChargeback  = Convert.ToDecimal(reader["TotalChargeback"]);
                    googleCheckoutLog.cartXml          = reader["CartXml"].ToString();
                    googleCheckoutLog.providerName     = reader["ProviderName"].ToString();
                    googleCheckoutLogList.Add(googleCheckoutLog);
                }
            }
            finally
            {
                reader.Close();
            }

            return(googleCheckoutLogList);
        }
        private void HandleNewOrderNotificationExtended(NewOrderNotificationExtended newOrder)
        {
            NotificationSerialNumber = newOrder.serialnumber;

            string merchantDataString = GetMerchantData(newOrder.shoppingcart.merchantprivatedata.Any);
            MerchantData merchantData = DeserializeMerchantData(merchantDataString);

            if (merchantData != null)
            {
                GCheckoutNotificationHandlerProvider provider
                    = GCheckoutNotificationManager.Providers[merchantData.ProviderName];

                if (provider != null)
                {
                    provider.HandleNewOrderNotificationExtended(RequestXml, newOrder, merchantData);

                    return;
                }

            }

            // if no providers found just log it
            SiteSettings siteSettings = CacheHelper.GetCurrentSiteSettings();

            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.SiteGuid = siteSettings.SiteGuid;
            gLog.RawResponse = RequestXml;
            gLog.NotificationType = "NewOrderNotification";
            gLog.SerialNumber = newOrder.serialnumber;
            gLog.OrderNumber = newOrder.googleordernumber;
            gLog.OrderTotal = newOrder.ordertotal.Value;
            gLog.BuyerId = newOrder.buyerid.ToString(CultureInfo.InvariantCulture);
            gLog.FullfillState = newOrder.fulfillmentorderstate.ToString();
            gLog.FinanceState = newOrder.financialorderstate.ToString();
            gLog.ShippingTotal = newOrder.ShippingCost;
            gLog.TaxTotal = newOrder.orderadjustment.totaltax.Value;
            //gLog.DiscountTotal = ext.orderadjustment.adjustmenttotal.Value;
            gLog.EmailListOptIn = newOrder.buyermarketingpreferences.emailallowed;
            gLog.GTimestamp = newOrder.timestamp;
            gLog.CartXml = merchantDataString;
            gLog.Save();
        }
        public override void HandleOrderStateChangeNotification(
            string requestXml,
            OrderStateChangeNotification notification)
        {
            GoogleCheckoutLog gLog = new GoogleCheckoutLog();

            Guid orderGuid = GoogleCheckoutLog.GetCartGuidFromOrderNumber(notification.googleordernumber);

            gLog.RawResponse = requestXml;
            gLog.NotificationType = "OrderStateChangeNotification";
            gLog.ProviderName = "WebStoreGCheckoutNotificationHandlerProvider";
            gLog.SerialNumber = notification.serialnumber;
            gLog.OrderNumber = notification.googleordernumber;
            gLog.FinanceState = notification.newfinancialorderstate.ToString();
            gLog.FullfillState = notification.newfulfillmentorderstate.ToString();
            gLog.GTimestamp = notification.timestamp;
            gLog.AvsResponse = notification.reason;
            gLog.CartGuid = orderGuid;
            gLog.Save();

            if (orderGuid == Guid.Empty) return;

            Order order = new Order(orderGuid);
            if (order.OrderGuid != orderGuid) return;

            Store store = new Store(order.StoreGuid);
            if (store.Guid != order.StoreGuid) return;

            gLog.SiteGuid = store.SiteGuid;
            gLog.UserGuid = order.UserGuid;
            gLog.CartGuid = order.OrderGuid;
            gLog.StoreGuid = order.StoreGuid;
            gLog.Save();

            if (notification.newfinancialorderstate == FinancialOrderState.CHARGED)
            {
                order.StatusGuid = OrderStatus.OrderStatusFulfillableGuid;
                order.Save();

                if (!order.HasShippingProducts())
                {
                    // order only has download products so tell google the order is fulfilled

                    try
                    {
                        CommerceConfiguration commerceConfig = SiteUtils.GetCommerceConfig();

                        string gEvironment;
                        if (commerceConfig.GoogleEnvironment == GCheckout.EnvironmentType.Sandbox)
                        {
                            gEvironment = "Sandbox";
                        }
                        else
                        {
                            gEvironment = "Production";
                        }

                        GCheckout.OrderProcessing.DeliverOrderRequest fulfillNotification
                            = new GCheckout.OrderProcessing.DeliverOrderRequest(
                                commerceConfig.GoogleMerchantID,
                                commerceConfig.GoogleMerchantKey,
                                gEvironment,
                                notification.googleordernumber);

                        fulfillNotification.Send();

                        StoreHelper.ConfirmOrder(store, order);
                        PayPalLog.DeleteByCart(order.OrderGuid);

                        log.Info("Sent DeliverOrderRequest to google api for google order " + notification.googleordernumber);
                    }
                    catch (Exception ex)
                    {
                        log.Error(ex);
                    }
                }

            }
        }
        private static List<GoogleCheckoutLog> LoadListFromReader(IDataReader reader)
        {
            List<GoogleCheckoutLog> googleCheckoutLogList = new List<GoogleCheckoutLog>();
            try
            {
                while (reader.Read())
                {
                    GoogleCheckoutLog googleCheckoutLog = new GoogleCheckoutLog();
                    googleCheckoutLog.rowGuid = new Guid(reader["RowGuid"].ToString());
                    googleCheckoutLog.createdUtc = Convert.ToDateTime(reader["CreatedUtc"]);
                    googleCheckoutLog.siteGuid = new Guid(reader["SiteGuid"].ToString());
                    googleCheckoutLog.userGuid = new Guid(reader["UserGuid"].ToString());
                    googleCheckoutLog.storeGuid = new Guid(reader["StoreGuid"].ToString());
                    googleCheckoutLog.cartGuid = new Guid(reader["CartGuid"].ToString());
                    googleCheckoutLog.notificationType = reader["NotificationType"].ToString();
                    googleCheckoutLog.rawResponse = reader["RawResponse"].ToString();
                    googleCheckoutLog.serialNumber = reader["SerialNumber"].ToString();
                    googleCheckoutLog.gTimestamp = Convert.ToDateTime(reader["GTimestamp"]);
                    googleCheckoutLog.orderNumber = reader["OrderNumber"].ToString();
                    googleCheckoutLog.buyerId = reader["BuyerId"].ToString();
                    googleCheckoutLog.fullfillState = reader["FullfillState"].ToString();
                    googleCheckoutLog.financeState = reader["FinanceState"].ToString();
                    googleCheckoutLog.emailListOptIn = Convert.ToBoolean(reader["EmailListOptIn"]);
                    googleCheckoutLog.avsResponse = reader["AvsResponse"].ToString();
                    googleCheckoutLog.cvnResponse = reader["CvnResponse"].ToString();
                    googleCheckoutLog.authExpDate = Convert.ToDateTime(reader["AuthExpDate"]);
                    googleCheckoutLog.authAmt = Convert.ToDecimal(reader["AuthAmt"]);
                    googleCheckoutLog.discountTotal = Convert.ToDecimal(reader["DiscountTotal"]);
                    googleCheckoutLog.shippingTotal = Convert.ToDecimal(reader["ShippingTotal"]);
                    googleCheckoutLog.taxTotal = Convert.ToDecimal(reader["TaxTotal"]);
                    googleCheckoutLog.orderTotal = Convert.ToDecimal(reader["OrderTotal"]);
                    googleCheckoutLog.latestChgAmt = Convert.ToDecimal(reader["LatestChgAmt"]);
                    googleCheckoutLog.totalChgAmt = Convert.ToDecimal(reader["TotalChgAmt"]);
                    googleCheckoutLog.latestRefundAmt = Convert.ToDecimal(reader["LatestRefundAmt"]);
                    googleCheckoutLog.totalRefundAmt = Convert.ToDecimal(reader["TotalRefundAmt"]);
                    googleCheckoutLog.latestChargeback = Convert.ToDecimal(reader["LatestChargeback"]);
                    googleCheckoutLog.totalChargeback = Convert.ToDecimal(reader["TotalChargeback"]);
                    googleCheckoutLog.cartXml = reader["CartXml"].ToString();
                    googleCheckoutLog.providerName = reader["ProviderName"].ToString();
                    googleCheckoutLogList.Add(googleCheckoutLog);

                }
            }
            finally
            {
                reader.Close();
            }

            return googleCheckoutLogList;
        }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByRawResponse(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.RawResponse.CompareTo(googleCheckoutLog2.RawResponse);
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByNotificationType(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.NotificationType.CompareTo(googleCheckoutLog2.NotificationType);
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByFullfillState(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.FullfillState.CompareTo(googleCheckoutLog2.FullfillState);
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareBySerialNumber(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.SerialNumber.CompareTo(googleCheckoutLog2.SerialNumber));
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByNotificationType(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.NotificationType.CompareTo(googleCheckoutLog2.NotificationType));
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByCreatedUtc(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.CreatedUtc.CompareTo(googleCheckoutLog2.CreatedUtc));
 }
        private void HandleRiskInformationNotification(RiskInformationNotification notification)
        {
            NotificationSerialNumber = notification.serialnumber;

            string providerName = GoogleCheckoutLog.GetProviderNameFromOrderNumber(notification.googleordernumber);

            if (providerName.Length > 0)
            {
                GCheckoutNotificationHandlerProvider provider
                    = GCheckoutNotificationManager.Providers[providerName];

                if (provider != null)
                {
                    provider.HandleRiskInformationNotification(RequestXml, notification);

                    return;
                }

            }

            // if no provider found just log it
            SiteSettings siteSettings = CacheHelper.GetCurrentSiteSettings();

            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.SiteGuid = siteSettings.SiteGuid;
            gLog.RawResponse = RequestXml;
            gLog.NotificationType = "RiskInformationNotification";
            gLog.SerialNumber = notification.serialnumber;
            gLog.OrderNumber = notification.googleordernumber;
            gLog.GTimestamp = notification.timestamp;
            gLog.AvsResponse = notification.riskinformation.avsresponse;
            gLog.CvnResponse = notification.riskinformation.cvnresponse;
            gLog.BuyerId = notification.riskinformation.ipaddress;
            gLog.Save();
        }
        private void HandleRefundAmountNotification(RefundAmountNotification notification)
        {
            NotificationSerialNumber = notification.serialnumber;

            string providerName = GoogleCheckoutLog.GetProviderNameFromOrderNumber(notification.googleordernumber);

            if (providerName.Length > 0)
            {
                GCheckoutNotificationHandlerProvider provider
                    = GCheckoutNotificationManager.Providers[providerName];

                if (provider != null)
                {
                    provider.HandleRefundAmountNotification(RequestXml, notification);

                    return;
                }

            }

            // if no provider found just log it
            SiteSettings siteSettings = CacheHelper.GetCurrentSiteSettings();

            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.SiteGuid = siteSettings.SiteGuid;
            gLog.NotificationType = "RefundAmountNotification";
            gLog.RawResponse = RequestXml;
            gLog.SerialNumber = notification.serialnumber;
            gLog.OrderNumber = notification.googleordernumber;
            gLog.GTimestamp = notification.timestamp;

            gLog.LatestRefundAmt = notification.latestrefundamount.Value;
            gLog.TotalRefundAmt = notification.totalrefundamount.Value;

            gLog.Save();
        }
        private void HandleOrderStateChangeNotification(OrderStateChangeNotification notification)
        {
            NotificationSerialNumber = notification.serialnumber;

            string providerName = GoogleCheckoutLog.GetProviderNameFromOrderNumber(notification.googleordernumber);

            if (providerName.Length > 0)
            {
                GCheckoutNotificationHandlerProvider provider
                    = GCheckoutNotificationManager.Providers[providerName];

                if (provider != null)
                {
                    provider.HandleOrderStateChangeNotification(RequestXml, notification);

                    return;
                }

            }

            // if no provider found just log it
            log.Info("No GCheckoutNotification Provider found for google order " + notification.googleordernumber + " so just logging it");

            Guid orderGuid = GoogleCheckoutLog.GetCartGuidFromOrderNumber(notification.googleordernumber);

            SiteSettings siteSettings = CacheHelper.GetCurrentSiteSettings();

            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.SiteGuid = siteSettings.SiteGuid;
            gLog.RawResponse = RequestXml;
            gLog.NotificationType = "OrderStateChangeNotification";
            gLog.SerialNumber = notification.serialnumber;
            gLog.OrderNumber = notification.googleordernumber;
            gLog.FinanceState = notification.newfinancialorderstate.ToString();
            gLog.FullfillState = notification.newfulfillmentorderstate.ToString();
            gLog.GTimestamp = notification.timestamp;
            gLog.AvsResponse = notification.reason;
            gLog.CartGuid = orderGuid;

            gLog.Save();
        }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByBuyerId(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.BuyerId.CompareTo(googleCheckoutLog2.BuyerId);
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByGTimestamp(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.GTimestamp.CompareTo(googleCheckoutLog2.GTimestamp));
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByCreatedUtc(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.CreatedUtc.CompareTo(googleCheckoutLog2.CreatedUtc);
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByOrderNumber(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.OrderNumber.CompareTo(googleCheckoutLog2.OrderNumber));
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByGTimestamp(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.GTimestamp.CompareTo(googleCheckoutLog2.GTimestamp);
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByBuyerId(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.BuyerId.CompareTo(googleCheckoutLog2.BuyerId));
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByOrderNumber(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.OrderNumber.CompareTo(googleCheckoutLog2.OrderNumber);
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByFinanceState(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.FinanceState.CompareTo(googleCheckoutLog2.FinanceState));
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareBySerialNumber(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.SerialNumber.CompareTo(googleCheckoutLog2.SerialNumber);
 }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByCvnResponse(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.CvnResponse.CompareTo(googleCheckoutLog2.CvnResponse));
 }
        public override void HandleNewOrderNotificationExtended(
            string requestXml,
            NewOrderNotificationExtended newOrder, 
            MerchantData merchantData)
        {
            //NotificationSerialNumber = newOrder.serialnumber;

            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.ProviderName = "WebStoreGCheckoutNotificationHandlerProvider";
            gLog.RawResponse = requestXml;
            gLog.NotificationType = "NewOrderNotification";
            gLog.SerialNumber = newOrder.serialnumber;
            gLog.OrderNumber = newOrder.googleordernumber;
            gLog.OrderTotal = newOrder.ordertotal.Value;
            gLog.BuyerId = newOrder.buyerid.ToString(CultureInfo.InvariantCulture);
            gLog.FullfillState = newOrder.fulfillmentorderstate.ToString();
            gLog.FinanceState = newOrder.financialorderstate.ToString();
            gLog.ShippingTotal = newOrder.ShippingCost;
            gLog.TaxTotal = newOrder.orderadjustment.totaltax.Value;
            //gLog.DiscountTotal = ext.orderadjustment.adjustmenttotal.Value;
            gLog.EmailListOptIn = newOrder.buyermarketingpreferences.emailallowed;
            gLog.GTimestamp = newOrder.timestamp;
            gLog.CartXml = SerializationHelper.RestoreXmlDeclaration(merchantData.SerializedObject);
            gLog.Save();

            Cart gCart = DeserializeCart(merchantData);

            Guid cartGuid = Guid.Empty;
            if (gCart != null)
                cartGuid = gCart.CartGuid;

            if (cartGuid == Guid.Empty) return;

            Cart cart = new Cart(cartGuid);
            if (cart.CartGuid != cartGuid) return;

            Store store = new Store(gCart.StoreGuid);
            if (store.Guid != cart.StoreGuid) return;

            gCart.DeSerializeCartOffers();

            gLog.SiteGuid = store.SiteGuid;
            gLog.UserGuid = gCart.UserGuid;
            gLog.CartGuid = gCart.CartGuid;
            gLog.StoreGuid = gCart.StoreGuid;
            gLog.Save();

            gCart.OrderInfo.CompletedFromIP = SiteUtils.GetIP4Address();

            gCart.OrderInfo.Completed = DateTime.UtcNow;
            if (newOrder.buyerbillingaddress.structuredname != null)
            {
                gCart.OrderInfo.CustomerFirstName = newOrder.buyerbillingaddress.structuredname.firstname;
                gCart.OrderInfo.CustomerLastName = newOrder.buyerbillingaddress.structuredname.lastname;
            }
            else
            {
                gCart.OrderInfo.CustomerFirstName = newOrder.buyerbillingaddress.contactname;
                gCart.OrderInfo.CustomerLastName = newOrder.buyerbillingaddress.contactname;
            }
            gCart.OrderInfo.CustomerEmail = newOrder.buyerbillingaddress.email;
            gCart.OrderInfo.CustomerCompany = newOrder.buyerbillingaddress.companyname;
            gCart.OrderInfo.CustomerAddressLine1 = newOrder.buyerbillingaddress.address1;
            gCart.OrderInfo.CustomerAddressLine2 = newOrder.buyerbillingaddress.address2;
            gCart.OrderInfo.CustomerCity = newOrder.buyerbillingaddress.city;
            gCart.OrderInfo.CustomerState = newOrder.buyerbillingaddress.region;
            gCart.OrderInfo.CustomerCountry = newOrder.buyerbillingaddress.countrycode;
            gCart.OrderInfo.CustomerPostalCode = newOrder.buyerbillingaddress.postalcode;
            gCart.OrderInfo.CustomerTelephoneDay = newOrder.buyerbillingaddress.phone;

            gCart.CopyCustomerToBilling();

            if (newOrder.buyershippingaddress.structuredname != null)
            {
                gCart.OrderInfo.DeliveryFirstName = newOrder.buyershippingaddress.structuredname.firstname;
                gCart.OrderInfo.DeliveryLastName = newOrder.buyershippingaddress.structuredname.lastname;
            }
            else
            {
                gCart.OrderInfo.DeliveryFirstName = newOrder.buyershippingaddress.contactname;
                gCart.OrderInfo.DeliveryLastName = newOrder.buyershippingaddress.contactname;
            }
            gCart.OrderInfo.DeliveryCompany = newOrder.buyershippingaddress.companyname;
            gCart.OrderInfo.DeliveryAddress1 = newOrder.buyershippingaddress.address1;
            gCart.OrderInfo.DeliveryAddress2 = newOrder.buyershippingaddress.address2;
            gCart.OrderInfo.DeliveryCity = newOrder.buyershippingaddress.city;
            gCart.OrderInfo.DeliveryState = newOrder.buyershippingaddress.region;
            gCart.OrderInfo.DeliveryCountry = newOrder.buyershippingaddress.countrycode;
            gCart.OrderInfo.DeliveryPostalCode = newOrder.buyershippingaddress.postalcode;

            gCart.TaxTotal = newOrder.orderadjustment.totaltax.Value;
            if (newOrder.ShippingCost > 0)
            {
                gCart.ShippingTotal = newOrder.ShippingCost;
            }
            gCart.OrderTotal = newOrder.ordertotal.Value;

            Guid orderStatusGuid = OrderStatus.OrderStatusReceivedGuid;

            if (
                (newOrder.financialorderstate == FinancialOrderState.CHARGEABLE)
                || (newOrder.financialorderstate == FinancialOrderState.CHARGED)
                || (newOrder.financialorderstate == FinancialOrderState.CHARGING)
                )
            {
                orderStatusGuid = OrderStatus.OrderStatusFulfillableGuid;

            }

            StoreHelper.EnsureUserForOrder(gCart);

            gCart.Save();

            //Currency currency = new Currency(store.DefaultCurrencyId);
            SiteSettings siteSettings = new SiteSettings(store.SiteGuid);

            Order order = Order.CreateOrder(
                store,
                gCart,
                gLog.RawResponse,
                gLog.OrderNumber,
                string.Empty,
                siteSettings.GetCurrency().Code,
                "GoogleCheckout",
                orderStatusGuid);

            //StoreHelper.ClearCartCookie(cart.StoreGuid);
            if (orderStatusGuid == OrderStatus.OrderStatusFulfillableGuid)
            {
                StoreHelper.ConfirmOrder(store, order);
                PayPalLog.DeleteByCart(order.OrderGuid);

            }

            if (orderStatusGuid == OrderStatus.OrderStatusReceivedGuid)
            {
                StoreHelper.ConfirmOrderReceived(store, order);
            }
        }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByAuthExpDate(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return(googleCheckoutLog1.AuthExpDate.CompareTo(googleCheckoutLog2.AuthExpDate));
 }
        public override void HandleRiskInformationNotification(
            string requestXml,
            RiskInformationNotification notification)
        {
            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.ProviderName = "WebStoreGCheckoutNotificationHandlerProvider";
            gLog.RawResponse = requestXml;
            gLog.NotificationType = "RiskInformationNotification";
            gLog.SerialNumber = notification.serialnumber;
            gLog.OrderNumber = notification.googleordernumber;
            gLog.GTimestamp = notification.timestamp;
            gLog.AvsResponse = notification.riskinformation.avsresponse;
            gLog.CvnResponse = notification.riskinformation.cvnresponse;
            gLog.BuyerId = notification.riskinformation.ipaddress;
            gLog.Save();

            Guid orderGuid = GoogleCheckoutLog.GetCartGuidFromOrderNumber(notification.googleordernumber);

            if (orderGuid == Guid.Empty) return;

            Order order = new Order(orderGuid);
            if (order.OrderGuid != orderGuid) return;

            Store store = new Store(order.StoreGuid);
            if (store.Guid != order.StoreGuid) return;

            gLog.SiteGuid = store.SiteGuid;
            gLog.UserGuid = order.UserGuid;
            gLog.CartGuid = order.OrderGuid;
            gLog.StoreGuid = order.StoreGuid;
            gLog.Save();
        }
 /// <summary>
 /// Compares 2 instances of GoogleCheckoutLog.
 /// </summary>
 public static int CompareByAuthExpDate(GoogleCheckoutLog googleCheckoutLog1, GoogleCheckoutLog googleCheckoutLog2)
 {
     return googleCheckoutLog1.AuthExpDate.CompareTo(googleCheckoutLog2.AuthExpDate);
 }
        public override void HandleChargeAmountNotification(
            string requestXml,
            ChargeAmountNotification notification)
        {
            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.ProviderName = "WebStoreGCheckoutNotificationHandlerProvider";
            gLog.RawResponse = requestXml;
            gLog.NotificationType = "ChargeAmountNotification";
            gLog.SerialNumber = notification.serialnumber;
            gLog.OrderNumber = notification.googleordernumber;
            gLog.GTimestamp = notification.timestamp;
            gLog.TotalChgAmt = notification.totalchargeamount.Value;
            gLog.LatestChgAmt = notification.latestchargeamount.Value;

            gLog.Save();

            Guid orderGuid = GoogleCheckoutLog.GetCartGuidFromOrderNumber(notification.googleordernumber);

            if (orderGuid == Guid.Empty) return;

            Order order = new Order(orderGuid);
            if (order.OrderGuid != orderGuid) return;

            Store store = new Store(order.StoreGuid);
            if (store.Guid != order.StoreGuid) return;

            gLog.SiteGuid = store.SiteGuid;
            gLog.UserGuid = order.UserGuid;
            gLog.CartGuid = order.OrderGuid;
            gLog.StoreGuid = order.StoreGuid;
            gLog.Save();
        }
        private void HandleAuthorizationAmountNotification(AuthorizationAmountNotification notification)
        {
            NotificationSerialNumber = notification.serialnumber;

            string providerName = GoogleCheckoutLog.GetProviderNameFromOrderNumber(notification.googleordernumber);

            if (providerName.Length > 0)
            {
                GCheckoutNotificationHandlerProvider provider
                    = GCheckoutNotificationManager.Providers[providerName];

                if (provider != null)
                {
                    provider.HandleAuthorizationAmountNotification(RequestXml, notification);

                    return;
                }

            }

            // if no provider found just log it
            SiteSettings siteSettings = CacheHelper.GetCurrentSiteSettings();

            GoogleCheckoutLog gLog = new GoogleCheckoutLog();
            gLog.SiteGuid = siteSettings.SiteGuid;
            gLog.NotificationType = "AuthorizationAmountNotification";
            gLog.RawResponse = RequestXml;
            gLog.SerialNumber = notification.serialnumber;
            gLog.OrderNumber = notification.googleordernumber;
            gLog.GTimestamp = notification.timestamp;
            gLog.AuthAmt = notification.authorizationamount.Value;
            gLog.AuthExpDate = notification.authorizationexpirationdate;
            gLog.CvnResponse = notification.cvnresponse;
            gLog.AvsResponse = notification.avsresponse;

            gLog.Save();
        }