资源缺失错误:无法在 Stripe 上升级计划



>我想使用 Stripe Billing 来实现允许用户在订阅业务中升级其计划的功能。用户已经是免费计划的成员。它需要 2 个步骤。

1( 注册信用卡

stripe.paymentMethods.attach(
paymentMethodId,
{ customer: customerId }
)

2( 升级订阅计划

stripe.subscriptions.update(subscriptionId, {
cancel_at_period_end: false,
proration_behavior: 'create_prorations',
items: [{
id: subscription.items.data[0].id,
plan: planId,
}]
})

我本可以通过 1(。但问题发生在 2( 中。

错误:

{
"error": {
"code": "resource_missing",
"doc_url": "https://stripe.com/docs/error-codes/resource-missing",
"message": "This customer has no attached payment source or default payment method.",
"type": "invalid_request_error"
}
}

我怎样才能克服这个问题?

将付款方式附加到客户后,您需要将其注册为订阅的默认付款方式。有两种方法可以做到这一点。

您可以在客户的发票设置中将付款方式注册为默认付款方式:

https://stripe.com/docs/api/customers/update?lang=node#update_customer-invoice_settings-default_payment_method

// add this after attaching the PaymentMethod to the Customer
// (i.e, this won't work unless the PaymentMethod is attached to the Customer)
await stripe.customers.update(customerId, {
invoice_settings: {
default_payment_method: paymentMethodId,
},
});

当客户订阅付费计划时,默认情况下将向他们收取此付款方式的费用。

第二个选项是在订阅本身上设置默认付款方式:

https://stripe.com/docs/api/subscriptions/create?lang=node#create_subscription-default_payment_method

// add this after attaching the PaymentMethod to the Customer
stripe.subscriptions.update(subscriptionId, {
default_payment_method: paymentMethodId,
cancel_at_period_end: false,
proration_behavior: 'create_prorations',
items: [{
id: subscription.items.data[0].id,
plan: planId,
}]
})

这两种方法之间的主要区别在于,如果使用第二种方法(将默认付款方式添加到订阅(,则必须为该客户创建的任何未来订阅执行相同的操作。另一方面,如果您在客户的发票设置下将付款方式保存为默认付款方式,则默认情况下将在将来的任何订阅中使用该付款方式,而无需执行任何操作。

最新更新