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); }
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 }); } } }