由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
?
答案 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
name
和email
来自客户端。