![](/img/trans.png)
[英]When creating a subscription with Stripe, automatically charge for the first month
[英]Stripe; how to get subscriptionId when creating a customer with a new subscription
我正在創建一個新客戶並將他們添加到一個訂閱中,如下所示:
StripeConfiguration.SetApiKey(StripeData.ApiKey);
var customerService = new CustomerService();
var myCustomer = new CustomerCreateOptions
{
Email = stripeEmail,
Source = stripeToken,
Plan = StripeData.MonthlySubscriptionPlanId
};
Customer stripeCustomer = customerService.Create(myCustomer);
然后我曾經能夠做到這一點:
myLocalUser.StripeCustomerId = stripeCustomer.Id;
myLocalUser.StripeSubscriptionId = stripeCustomer.Subscriptions.Data[0]?.Id;
但是現在 API 沒有返回客戶的訂閱,因此第二行失敗
我現在不得不用這個丑陋的代碼再次調用 API 來獲取客戶的訂閱 ID:
if (stripeCustomer.Subscriptions != null)
{
user.StripeSubscriptionId = stripeCustomer.Subscriptions.Data[0]?.Id;
}
else
{
//get subscriptionId
var cust = customerService.Get(stripeCustomer.Id, new CustomerGetOptions
{
Expand = new System.Collections.Generic.List<string> { "subscriptions" }
});
if (cust.Subscriptions.Any())
{
stripeSubscriptionId = cust.Subscriptions.First().Id;
}
}
CustomerService.Create() 沒有與 Get() 方法相同的 Expand 參數選項......
這是意料之中的,因為訂閱不再默認包含在客戶 object 中,除非您從API 版本 2020-08-27開始擴展它們。
仍然可以創建具有來源和計划的客戶(盡管不再是推薦的集成路徑,因為您可能會遇到 3DS 和稅率問題),但由於您使用的是較新的 API 版本,您將無法獲得subscriptions
列表. 如果可以的話,您應該更新為通過他們自己的 API創建訂閱。
但是,如果您仍然想使用這個舊的集成路徑,您仍然可以在客戶創建調用中獲取訂閱,您只需要在創建時擴展訂閱:
var customerService = new CustomerService();
var myCustomer = new CustomerCreateOptions
{
Email = stripeEmail,
Source = stripeToken,
Plan = StripeData.MonthlySubscriptionPlanId
};
myCustomer.AddExpand("subscriptions");
Customer stripeCustomer = customerService.Create(myCustomer);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.