Exemplo n.º 1
0
        public static CreateZohoSubscriptionRequest CreateCustomerSubscription(CreateSubscriptionRequest request, WpUsers user, string customerID, bool isGift, List <Addon> associatedAddons)
        {
            CreateZohoSubscriptionRequest subscriptionRequest = new CreateZohoSubscriptionRequest();

            subscriptionRequest.CustomerID   = customerID;
            subscriptionRequest.CustomFields = new List <CustomField>()
            {
                new CustomField()
                {
                    Label = "IsGift",
                    Value = isGift?"true":"false"
                }, new CustomField()
                {
                    Label = "CreatedBy",
                    Value = request.UserID
                }
            };
            if (!isGift)
            {
                subscriptionRequest.Customer = new Customer().CreateCustomerObject(request, user);
            }
            else
            {
                subscriptionRequest.Customer = new Customer().CreateCustomerForGiftObject(request, user);
            }
            subscriptionRequest.Plan   = new Plan().CreatePlanObject(request);
            subscriptionRequest.Addons = new List <Addon>().CreateAddOns(associatedAddons);
            return(subscriptionRequest);
        }
Exemplo n.º 2
0
        public async Task <object> CreateSubscriptionAsync(CreateSubscriptionRequest request)
        {
            var token        = this.httpClientFactory.Token(HttpClientFactory.APIType.ZohoSubscription).Result.AccessToken;
            var userMappings = await unitOfWork.ZohoCustomerMappingRepository.All();

            var productsURl = "https://subscriptions.zoho.com/api/v1/addons";
            var plans       = await this.httpClientFactory
                              .GetAsync <AddonsResponse>(productsURl,
                                                         HttpClientFactory.APIType.ZohoSubscription,
                                                         token);

            var planAddons = plans.result.Addons.ToList();

            var data = (from addon in planAddons
                        from p in addon.Plans
                        where p.PlanCode == request.PlanCode
                        select addon).Select(s => new Addon()
            {
                AddonCode        = s.AddonCode,
                Price            = s.PriceBrackets.Single().Price,
                AddonDescription = s.Name
            });

            var user = await unitOfWork.UserRepository.Single(u => u.Id == long.Parse(request.UserID));

            var userMapping = userMappings.Where(u => u.UserId == long.Parse(request.UserID));

            if (!request.IsGift && userMapping.Count() > 0)
            {
                var subcriptionURL = "https://subscriptions.zoho.com/api/v1/subscriptions";
                var requestObject  = ZohoCreateSubscriptionFactory.CreateCustomerSubscription(request, user, userMapping.Single().ZohoCustomerId, request.IsGift, data.ToList());
                var updateCustomer = await this.httpClientFactory.PutAsync <CreateCustomerResponse, CreateCustomerRequest>(
                    $"https://subscriptions.zoho.com/api/v1/customers/{userMapping.Single().ZohoCustomerId}", new CreateCustomerRequest()
                {
                    BillingAddress = new BillingAddress()
                    {
                        Attention = $"{request.FirstName} {request.LastName}",
                        Country   = "NG",
                        State     = request.BillingState,
                        City      = request.BillingCity,
                        Street    = $"{request.BillingAddress.Street}"
                    },
                    ShippingAddress = new ShippingAddress()
                    {
                        Attention = $"{request.ShippingFirstName} {request.ShippingLastName}",
                        Country   = "NG",
                        State     = request.ShippingState,
                        City      = request.ShippingCity,
                        Street    = request.ShippingStreet
                    }
                }, HttpClientFactory.APIType.ZohoSubscription, token
                    );

                var zohoSubscription = await this.httpClientFactory.PostAsync <CreateZohoSubscriptionResponse, CreateZohoSubscriptionRequest>(
                    subcriptionURL, requestObject, HttpClientFactory.APIType.ZohoSubscription, token
                    );

                if (zohoSubscription.result.Code == 0)
                {
                    //if (string.IsNullOrWhiteSpace(request.CustomerID))
                    //{
                    //    context.WpZohocustomerMapping.Add(new WpZohocustomerMapping()
                    //    {
                    //        UserId = long.Parse(request.UserID),
                    //        ZohoCustomerId = zohoSubscription.Subscription.Customer.CustomerId
                    //    });
                    //    context.SaveChanges();
                    //}
                    await unitOfWork.UserPaymentSubscriptionDetailsRepository.Add(new WpUserpaymentsubcriptiondetails()
                    {
                        AuthorizationCode = string.Empty,
                        CreatedDate       = DateTime.Now,
                        CustomerId        = userMapping.Single().ZohoCustomerId,
                        UserId            = request.UserID,
                        PaymentReference  = zohoSubscription.result.Subscription.SubscriptionId,
                        SubscriptionId    = zohoSubscription.result.Subscription.SubscriptionId
                    });

                    await unitOfWork.SaveChangesAsync();

                    if (request.IsRequestFromWebApp)
                    {
                        var paymentInitializeUrl = "https://api.paystack.co/transaction/initialize";
                        var paymentURLResponse   = await httpClientFactory.PostAsync <PaystackInitializeResponse, PaystackInitializeRequest>(paymentInitializeUrl, new PaystackInitializeRequest()
                        {
                            Amount    = zohoSubscription.result.Subscription.Amount,
                            Email     = zohoSubscription.result.Subscription.Customer.Email,
                            Reference = zohoSubscription.result.Subscription.SubscriptionId
                        }, HttpClientFactory.APIType.Paystack, string.Empty);

                        if (paymentURLResponse.result.Status)
                        {
                            return(new
                            {
                                Status = true,
                                Message = "Subscription Created Successfully",
                                Data = paymentURLResponse.result.Data,
                                ZohoSubscriptionToken = zohoSubscription.token
                            });
                        }
                        else
                        {
                            return(new
                            {
                                Status = false,
                                Message = "Something went wrong",
                                ZohoSubscriptionToken = zohoSubscription.token
                            });
                        }
                    }
                    else
                    {
                        return(new
                        {
                            Status = true,
                            Message = "Subscription Created Successfully",
                            Data = zohoSubscription.result.Subscription,
                            ZohoSubscriptionToken = zohoSubscription.token
                        });
                    }
                }
                else
                {
                    return(new
                    {
                        Status = false,
                        Mesage = "Something went wrong"
                    });
                }
            }
            else
            {
                var subcriptionURL = "https://subscriptions.zoho.com/api/v1/subscriptions";
                (CreateZohoSubscriptionResponse result, string token)zohoSubscription;
                if (!string.IsNullOrWhiteSpace(request.CustomerID))
                {
                    CreateZohoSubscriptionRequest requestSubscriptionForOldCustomer = ZohoCreateSubscriptionFactory.CreateCustomerSubscription(request, user, request.CustomerID, request.IsGift, data.ToList());
                    zohoSubscription = await this.httpClientFactory.PostAsync <CreateZohoSubscriptionResponse, CreateZohoSubscriptionRequest>(
                        subcriptionURL, requestSubscriptionForOldCustomer, HttpClientFactory.APIType.ZohoSubscription, token
                        );
                }
                else
                {
                    CreateZohoSubscriptionForNewCustomerRequest requestSubscriptionForNewCustomer = ZohoCreateSubscriptionFactory.CreateNewCustomerSubscription(request, user, request.IsGift, data.ToList());
                    zohoSubscription = await this.httpClientFactory.PostAsync <CreateZohoSubscriptionResponse, CreateZohoSubscriptionForNewCustomerRequest>(
                        subcriptionURL, requestSubscriptionForNewCustomer, HttpClientFactory.APIType.ZohoSubscription, token
                        );
                }


                if (zohoSubscription.result.Code == 0)
                {
                    await unitOfWork.UserPaymentSubscriptionDetailsRepository.Add(new WpUserpaymentsubcriptiondetails()
                    {
                        AuthorizationCode = string.Empty,
                        CreatedDate       = DateTime.Now,
                        CustomerId        = userMapping.Single().ZohoCustomerId,
                        UserId            = request.UserID,
                        PaymentReference  = zohoSubscription.result.Subscription.SubscriptionId,
                        SubscriptionId    = zohoSubscription.result.Subscription.SubscriptionId
                    });


                    if (!request.IsGift && string.IsNullOrWhiteSpace(request.CustomerID))
                    {
                        await unitOfWork.ZohoCustomerMappingRepository.Add(new WpZohocustomerMapping()
                        {
                            UserId         = long.Parse(request.UserID),
                            ZohoCustomerId = zohoSubscription.result.Subscription.Customer.CustomerId
                        });
                    }
                    await unitOfWork.SaveChangesAsync();

                    if (request.IsRequestFromWebApp)
                    {
                        var paymentInitializeUrl = "https://api.paystack.co/transaction/initialize";
                        var paymentURLResponse   = await httpClientFactory.PostAsync <PaystackInitializeResponse, PaystackInitializeRequest>(paymentInitializeUrl, new PaystackInitializeRequest()
                        {
                            Amount    = zohoSubscription.result.Subscription.Amount,
                            Email     = zohoSubscription.result.Subscription.Customer.Email,
                            Reference = zohoSubscription.result.Subscription.SubscriptionId
                        }, HttpClientFactory.APIType.Paystack, string.Empty);

                        if (paymentURLResponse.result.Status)
                        {
                            return(new
                            {
                                Status = true,
                                Message = "Subscription Created Successfully",
                                Data = paymentURLResponse.result.Data,
                                ZohoData = zohoSubscription.result.Subscription,
                                ZohoSubscriptionToken = zohoSubscription.token
                                                        //TODO : Add Invoice ID ,
                            });
                        }
                        else
                        {
                            return(new
                            {
                                Status = false,
                                Message = "Something went wrong"
                            });
                        }
                    }
                    else
                    {
                        return(new
                        {
                            Status = true,
                            Message = "Subscription Created Successfully",
                            Data = zohoSubscription.result.Subscription,
                            ZohoSubscriptionToken = zohoSubscription.token
                        });
                    }
                }
                else
                {
                    return(new
                    {
                        Status = false,
                        Mesage = zohoSubscription.result.Message
                    });
                }
            }
        }