예제 #1
0
        public IList <ShippingOption> GetAvailableOptions(IList <Product> products, Address shipperInfo, Address receiverInfo)
        {
            var shippingOptions = new List <ShippingOption>();

            var shipmentTable = CreateShipmentConfig(products, shipperInfo, receiverInfo);

            var resource = InitResource();
            var shipment = resource.CreateShipment(shipmentTable);

            if (shipment.Rates.Length == 0)
            {
                var error = JsonConvert.SerializeObject(shipment.Messages);
                throw new EvenCartException(error);
            }

            foreach (Rate rate in shipment.Rates)
            {
                var name = $"{rate.Provider + " - " + rate.Servicelevel.Name?.ToString()}";
                shippingOptions.Add(new ShippingOption
                {
                    Rate         = Convert.ToDecimal(rate.Amount),
                    DeliveryTime = rate.EstimatedDays?.ToString(),
                    Description  = rate.DurationTerms?.ToString(),
                    Name         = name,
                    Remarks      = rate.Servicelevel.Terms?.ToString(),
                    Id           = rate.ObjectId,
                });
            }

            return(shippingOptions);
        }
예제 #2
0
        private static string GetCustomerId(User user, PaymentMethod paymentMethod, Address address)
        {
            var customerId = user.GetPropertyValueAs <string>(StripeCustomerIdKey);

            if (!customerId.IsNullEmptyOrWhiteSpace())
            {
                return(customerId);
            }
            var service = new CustomerService();
            var options = new CustomerCreateOptions
            {
                Email   = user.Email,
                Address = new AddressOptions()
                {
                    City       = address.City,
                    Country    = address.Country.Name,
                    Line1      = address.Address1,
                    Line2      = address.Address2,
                    PostalCode = address.ZipPostalCode,
                    State      = address.StateProvinceName
                },
                Name = user.Name + "-" + user.Email
            };

            if (paymentMethod != null)
            {
                options.PaymentMethod   = paymentMethod.Id;
                options.InvoiceSettings = new CustomerInvoiceSettingsOptions
                {
                    DefaultPaymentMethod = paymentMethod.Id,
                };
            }
            var customer = service.Create(options);

            customerId = customer.Id;
            //save for future use
            user.SetPropertyValue(StripeCustomerIdKey, customerId);
            return(customerId);
        }
예제 #3
0
        private static void GetFinalAmountDetails(decimal inAmount, string inCurrencyCode, Address address, out string currencyCode, out decimal amount)
        {
            var priceAccountant = DependencyResolver.Resolve <IPriceAccountant>();

            amount       = inAmount;
            currencyCode = inCurrencyCode.ToLower();
            //if target country in India, send converted amount
            if (address.Country.Code == "IN")
            {
                var indianCurrency = DependencyResolver.Resolve <ICurrencyService>()
                                     .FirstOrDefault(x => x.IsoCode == "INR");
                if (indianCurrency == null)
                {
                    return;
                }
                amount       = 100 * priceAccountant.ConvertCurrency(amount, indianCurrency);
                currencyCode = indianCurrency.IsoCode.ToLower();
                return;
            }

            amount = 100 * amount;
        }