如标题所示,我正在尝试使用一次性付款方式(信用卡)付款,但该付款方式未保存在客户的个人资料中。我仍然希望能够在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"
});

07-27 19:38