条纹-使用PaymentMethod而不是来源(令牌)与客户一起创建订阅

时间:2019-09-20 12:57:27

标签: stripe-payments

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

如果我在浏览器createToken()中调用并将其附加到客户的source字段中,它将起作用。

我们使用带有createPaymentMethod()而不是createToken()的SCA新文档集成了一次性付款,因此我们的客户是用paymentMethod保存的,而不是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}}"

此外,在migration guide中表示将createToken()替换为createPaymentMethod()

Scenario 2: Charging customers off-session for their initial payment中,我看到了以下内容:

  

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

     

1)使用CreatePaymentMethod收集付款信息

     

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

     

3)创建订阅

     

4)使用handleCardSetup设置身份验证失败的错误处理,并使用handleCardPayment设置授权失败的错误处理

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

是否可以通过paymentMethod而不是source与客户创建订阅?

(我们使用由paymentMethod创建的客户重复使用卡进行一次性付款,因此能够重用同一客户/卡进行订阅非常重要,而无需用户以条带元素或类似形式输入数据,因为这会破坏我们重复使用卡的流程)

1 个答案:

答案 0 :(得分:1)

我可以通过在字段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   订阅或发票创建。