Пример #1
0
        static public async Task PortCustomersAsync()
        {
            List <ShopifySharp.Customer> customers = Shopify.GetCustomers();

            foreach (ShopifySharp.Customer customer in customers)
            {
                CustomersApi api = new CustomersApi();
                if (customer.DefaultAddress != null)
                {
                    await api.CreateCustomerAsync(new CreateCustomerRequest(
                                                      GivenName : customer.FirstName,
                                                      FamilyName : customer.LastName,
                                                      EmailAddress : customer.Email,
                                                      Address : new Address(
                                                          AddressLine1 : customer.DefaultAddress.Address1,
                                                          AddressLine2 : customer.DefaultAddress.Address2,
                                                          Locality : customer.DefaultAddress.City,
                                                          AdministrativeDistrictLevel1 : customer.DefaultAddress.ProvinceCode,
                                                          PostalCode : customer.DefaultAddress.Zip,
                                                          Country : "US"),
                                                      PhoneNumber : customer.Phone,
                                                      ReferenceId : customer.Id.Value.ToString()
                                                      ));
                }
                else
                {
                    await api.CreateCustomerAsync(new CreateCustomerRequest(
                                                      GivenName : customer.FirstName,
                                                      FamilyName : customer.LastName,
                                                      EmailAddress : customer.Email,
                                                      PhoneNumber : customer.Phone,
                                                      ReferenceId : customer.Id.Value.ToString()));
                }
            }
        }
Пример #2
0
        public async Task <PurchaseResponseModel> Purchase(PurchaseModel purchaseModel, User user)
        {
            var purchaseResponse = new PurchaseResponseModel
            {
                Success = false,
                Nanrs   = 0
            };

            try
            {
                if (purchaseModel.SaveBilling)
                {
                    CustomersApi customerApi = new CustomersApi(configuration);
                    if (string.IsNullOrWhiteSpace(user.BillingId))
                    {
                        CreateCustomerRequest createCustomer = new CreateCustomerRequest(Guid.NewGuid().ToString(), Nickname: user.Username, EmailAddress: user.Email, ReferenceId: user.Id.ToString());
                        var customerResponse = await customerApi.CreateCustomerAsync(createCustomer);

                        if (customerResponse.Errors != null && customerResponse.Errors.Any())
                        {
                            return(purchaseResponse);
                        }
                        user.BillingId = customerResponse.Customer.Id;
                    }
                    CreateCustomerCardRequest cardRequest = new CreateCustomerCardRequest(purchaseModel.Token);
                    var cardResponse = await customerApi.CreateCustomerCardAsync(user.BillingId, cardRequest);

                    if (cardResponse.Errors != null && cardResponse.Errors.Any())
                    {
                        return(purchaseResponse);
                    }
                    user.CardId = cardResponse.Card.Id;
                }
                (int price, int amount) = GetPricing(purchaseModel.Amount !);
                string idempotencyKey = Guid.NewGuid().ToString();
                Money  money          = new Money(price, "USD");
                CreatePaymentRequest body;
                if (purchaseModel.UseSaved || purchaseModel.SaveBilling)
                {
                    body = new CreatePaymentRequest(SourceId: user.CardId, CustomerId: user.BillingId, IdempotencyKey: idempotencyKey, AmountMoney: money, Note: $"{user.Id} {purchaseModel.Amount}");
                }
                else
                {
                    body = new CreatePaymentRequest(SourceId: purchaseModel.Token, IdempotencyKey: idempotencyKey, AmountMoney: money, Note: $"{user.Id} {purchaseModel.Amount}");
                }
                PaymentsApi paymentsApi = new PaymentsApi(configuration);
                var         response    = await paymentsApi.CreatePaymentAsync(body);

                if (response.Payment.Status == "COMPLETED")
                {
                    user.Balance   += amount;
                    user.Repurchase = purchaseModel.Refill;
                    if (user.Repurchase)
                    {
                        user.RepurchaseAmount = purchaseModel.Amount;
                    }
                    else
                    {
                        user.RepurchaseAmount = null;
                    }
                    var purchase = new Purchase
                    {
                        Id         = Guid.NewGuid(),
                        NanrAmount = amount,
                        UsdAmount  = price,
                        Timestamp  = DateTime.UtcNow
                    };
                    context.Purchases.Add(purchase);
                    await emailManager.SendPurchase(user, purchase);
                }
                else
                {
                    return(purchaseResponse);
                }
                await context.SaveChangesAsync();

                purchaseResponse.Success = true;
                purchaseResponse.Nanrs   = amount;
                return(purchaseResponse);
            } catch (Exception ex)
            {
                Console.WriteLine(ex);
                return(purchaseResponse);
            }
        }