public async Task <InvokeResult> UpdateSubscriptionAsync(Subscription subscription, EntityHeader org, EntityHeader user) { await AuthorizeAsync(user, org, "updateSubscription", subscription); var oldSubscription = await _subscriptionRepo.GetSubscriptionAsync(subscription.Id, true); ValidationCheck(subscription, Actions.Update); if (oldSubscription.PaymentToken != subscription.PaymentToken) { if (String.IsNullOrEmpty(oldSubscription.PaymentToken)) { var result = await _paymentCustomers.CreateCustomerAsync(subscription.Id.ToString(), subscription.PaymentToken); if (!result.Successful) { return(result.ToInvokeResult()); } subscription.CustomerId = result.Result; } else { var result = await _paymentCustomers.AddPaymentSource(subscription.CustomerId, subscription.PaymentToken); if (!result.Successful) { return(result.ToInvokeResult()); } } subscription.PaymentTokenStatus = Subscription.PaymentTokenStatus_OK; subscription.Status = Subscription.Status_OK; subscription.PaymentTokenDate = DateTime.UtcNow; } await _subscriptionRepo.UpdateSubscriptionAsync(subscription); return(new InvokeResult()); }