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

时间:2020-06-01 19:54:11

标签: javascript google-cloud-functions stripe-payments

我想使用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"
  }
}

我该如何克服这个问题?

1 个答案:

答案 0 :(得分:3)

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

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

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,
  }]
})

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