如标题所示,我正在尝试使用一次性付款方式(信用卡)付款,但该付款方式未保存在客户的个人资料中。我仍然希望能够在Stripe的客户资料中记录该费用。
根据the docs,可以通过在发送到id
的有效负载中的customer
密钥中传递客户的Stripe.customers.createCharge
来完成此操作。但是,这样做时,我收到一条错误消息,指出该卡未与客户链接(这显然不是,并且我不希望这样)。
客户cus_***
没有ID为tok_visa的卡
为了解决这个问题,我暂时应用了提到的in this answer修复程序,该修复程序基本上涉及为付款创建一个临时卡,然后将其删除。
我想知道,如果没有明确说明,API怎么会不起作用,希望有人在同一时间体验过Stripe铃声。
这是我要运行的代码:
await stripeService.charges.create({
source: token, // temporary token received from Checkout
customer: user.stripeCustomerId, // the Stripe customer ID from my database
amount,
currency: 'usd',
description: 'Test charge'
});
最佳答案
您显式链接到的一次性使用源文档仅适用于Sources,但是tok_visa
会创建一个Card对象。我相信这就是您得到错误的原因。
如果您尝试使用您通过前端的Elements / Checkout获得的Source(其ID为'src_xxx'之类的ID)(例如createSource),它将成功,我已经对其进行了测试。您也可以使用以下代码进行测试:
const src = await stripe.sources.create({
type : "card",
token : "tok_visa"
});
const charge = await stripe.charges.create({
source : src.id,
customer : "cus_xxxx",
amount : 1000,
currency : "usd"
});