我想使用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"
}
}
我该如何克服这个问题?
答案 0 :(得分:3)
将PaymentMethod附加到客户之后,您需要将其注册为订阅的默认付款方式。有两种方法可以做到这一点。
您可以在客户的发票设置中将PaymentMethod注册为默认付款方式:
// 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,
},
});
当客户订阅付费计划时,默认情况下将通过此付款方式向他们收费。
第二个选项是在订阅本身上设置默认付款方式:
// 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,
}]
})
这两种方法之间的主要区别在于,如果您采用第二种方法(将默认付款方式添加到订阅中),则必须为该客户将来创建的任何订阅执行相同的操作。另一方面,如果您将付款方式保存为客户发票设置下的默认付款方式,则该付款方式将默认用于以后的所有订阅,而无需执行任何操作。