首页 > 解决方案 > Stripe - 使用 PaymentMethod 而不是 Source (Token) 与客户创建订阅

问题描述

我在我们的工作流程中集成了Stripe 订阅,但是当使用使用paymentMethod而不是source创建的Customer创建订阅时,我收到错误。This customer has no attached payment source

如果我在浏览器中调用createToken()并将其附加到source现场的客户,它就可以工作。

我们使用新文档将一次性付款与使用createPaymentMethod()和不使用 SCA 的 SCA 集成createToken(),因此我们的客户使用paymentMethod, not保存source,如下所述:

https://stripe.com/docs/payments/cards/saving-cards-after-payment#save-payment-method

curl https://api.stripe.com/v1/customers \
  -u sk_test_secret_token \
  -d payment_method="{{PAYMENT_METHOD_ID}}"

此外,在迁移指南中,它说要替换createToken()createPaymentMethod().

场景 2:向非会话客户收取初始付款时,我看到以下内容:

要创建订阅并在会话外向客户收取初始付款的费用,您需要:

1)CreatePaymentMethod用于收集付款信息

2) 使用PaymentMethod您创建的 ID 创建客户

3) 创建订阅

handleCardSetup4)为认证失败和handleCardPayment授权失败设置错误处理

我遵循了这些步骤。我没有创建一个SetupIntent(就像我没有在一次性付款中创建它并且它在这些情况下有效),并且在尝试创建订阅时收到我之前所说的错误。

paymentMethod是否可以使用而不是与客户创建订阅source

(我们使用创建的客户重复使用卡进行paymentMethod一次性付款,因此能够重复使用相同的客户/卡进行订阅非常重要,而不需要用户在条带元素中输入数据或任何类似的东西,因为它会破坏我们重复使用卡片的流程)

标签: stripe-payments

解决方案


我能够通过在字段default_payment_method中包含付款方式来解决它。

该字段描述如下:

订阅的默认付款方式的 ID。它必须属于与订阅关联的客户。如果未设置,发票将使用客户发票设置中的默认付款方式。

所以我假设它会在未定义时使用我与客户关联的付款方式。似乎它没有发生,很难,所以我需要明确地传递它(它是 Stripe 错误吗?或者创建客户paymentMethod不会使其成为客户发票设置中的默认付款方式?我会联系 Stripe 以确保)。

更新 (2019-09-23)

我联系了 Stripe,询问这是否是一个错误,他们回答说:

[...] 话虽如此,但这并不是我们的错误,而是预期的行为。

如果您希望添加到客户对象的付款方式用于订阅或发票,默认情况下在创建订阅时不指定 default_payment_method,那么您需要附加付款方式并指定 invoice_settings更新客户时的 .default_payment_method 参数。此信息可在我们的 API 参考中找到:

https://stripe.com/docs/api/payment_methods/attach

更新时使用的参数可以在客户对象本身上找到,这里:

https://stripe.com/docs/api/customers/update#update_customer-invoice_settings-default_payment_method

这也可以在创建客户时指定,可以在这里看到:

https://stripe.com/docs/api/customers/create#create_customer-invoice_settings-default_payment_method

指定此参数将表明要添加的卡将是订阅和发票的默认值,因此不需要在订阅或发票创建时指定 default_payment_method。


推荐阅读