由Checkout创建的新客户,然后在错误的客户结果上创建订阅:错误:该客户没有附加的付款来源

时间:2019-05-17 23:04:11

标签: stripe-payments

由Checkout创建的新客户,然后在AA = rand(8,8); % example matrix. Assumed square n = 2; % submatrix size. Assumed to divide the size of A mask = repelem(logical(eye(size(AA,1)/n)), n, n); BB = reshape(permute(reshape(AA(mask), n, n, []), [1 3 2]), [], n); 中的Node SDK的同一客户上创建新的订阅。

但是,如果我在仪表板上查看“客户”,则会有一张卡,但未设置为“默认”。通过单击Error: This customer has no attached payment source将其设置为“默认”后,它将起作用。

这是我用来在客户上创建新订阅的代码:

...

我不确定这是否是Checkout的局限性,因为https://stripe.com/docs/payments/checkout

  

更好地支持保存客户详细信息和重复使用保存的付款方式

现在,我的解决方法是使用webhook在const customer = 'cus_xxxxxx' const plan = 'plan_xxxxxx' stripe.subscriptions.create({ customer, items: [ { plan } ] }) 上更新客户的invoice_settings.default_payment_method

这有效,但感觉很奇怪。我错过了什么?为什么Checkout不将唯一的Card设置为payment_method.attached

3 个答案:

答案 0 :(得分:1)

Stripe的这种行为似乎是故意的,来自Checkout的卡以Payment Method的形式附加到客户,并且未设置为默认值。

如果直接用PM创建客户,也会发生同样的事情,

let cust = await stripe.customers.create({ payment_method: "pm_card_visa" });

另外,首先,人们可以直接从Checkout创建订阅,传递plan而不是sku https://stripe.com/docs/stripe-js/reference#stripe-redirect-to-checkout

答案 1 :(得分:0)

从Stripe支持:

  

结帐目前不支持重复使用已保存的付款的功能   方法。我们知道,这是我们许多功能的要求   用户,我们正在努力实现这一目标。

     

如果愿意,您可以看到我们将要进行的更新的路线图   在以下文档中结帐。

     

https://stripe.com/docs/payments/checkout#checkout-roadmap

     

也就是说,您目前所做的工作是相同的   解决我们暂时建议用户的问题。

答案 2 :(得分:0)

经过大量的挖掘,我意识到文档中很容易错过一个步骤:采用附带的付款方式并将其设置为默认付款方式。

这是我用于创建订阅的完整服务器node.js代码:

const customerResponse = await stripe.customers.create({ email, name })
const customer = customerResponse.id

await stripe.paymentMethods.attach(paymentMethodId, { customer })

await stripe.customers.update(customer, {
  invoice_settings: { default_payment_method: paymentMethodId }
})

await stripe.subscriptions.create({
  customer,
  items: [{ price: 'price_XXXXXX' }]
})

paymentMethodId nameemail来自客户端。