Stripe payments Stripe无法向没有活动卡的客户收费

Stripe payments Stripe无法向没有活动卡的客户收费,stripe-payments,Stripe Payments,我不能向顾客收费。虽然这个问题在过去已经被问了十几次,但他们的错误都与我的问题不符 我在node.js中将此函数作为firebase函数调用 const charge = await stripe.charges.create({ customer : customerId, amount : amount, currency : currency }); 请求后正文 { "customer": &q

我不能向顾客收费。虽然这个问题在过去已经被问了十几次,但他们的错误都与我的问题不符

我在node.js中将此函数作为firebase函数调用

const charge = await stripe.charges.create({
      
        customer : customerId,
        amount : amount,
        currency : currency
    });
请求后正文

{
  "customer": "cus_JL4hVfDnym2SIk",
  "amount": "500",
  "currency": "usd"
}
我已经确认Stripe仪表板上的所有值都是正确的。此外,我将测试卡存储在客户机上,并将其明确设置为默认值,我也在仪表板上确认了这一点。我在一个非常不同的步骤中存储卡片信息,不像其他帖子一次处理所有这些

我只想向帐户上有存储卡的客户收费。一切都在测试数据、测试卡等上。这是使用收费api的问题吗?或者测试卡由于某种原因不能在这里工作

错误响应体

{
  "error": {
    "code": "missing",
    "doc_url": "https://stripe.com/docs/error-codes/missing",
    "message": "Cannot charge a customer that has no active card",
    "param": "card",
    "type": "card_error"
  }
}

仪表板中添加的卡现在使用较新的API。您正在使用的模式取决于客户是否具有使用遗留API的
default\u源代码

可以,但我建议将集成更改为使用

如果您已经在客户身上添加了基本测试卡,则需要提供其
id
,作为
支付方法

const paymentIntent = await stripe.paymentIntents.create({
  amount: 2000,
  currency: 'usd',
  payment_method_types: ['card'],
  payment_method: 'pm_123', // put your ID here
  confirm: true,
});

虽然这将适用于4242测试卡,但推荐的方法是与Stripe.js和支持的元素集成。

仪表板中添加的卡现在使用较新的API。您正在使用的模式取决于客户是否具有使用遗留API的
default\u源代码

可以,但我建议将集成更改为使用

如果您已经在客户身上添加了基本测试卡,则需要提供其
id
,作为
支付方法

const paymentIntent = await stripe.paymentIntents.create({
  amount: 2000,
  currency: 'usd',
  payment_method_types: ['card'],
  payment_method: 'pm_123', // put your ID here
  confirm: true,
});

虽然这适用于4242测试卡,但推荐的方法是与Stripe.js和元素集成,以获得支持。

响应良好。理想情况下,我不想存储和传递我的支付方法,因为这会在项目中产生一些边缘案例。但是,这可能是唯一的解决方案,因为我使用“paymenthMethods.attach”和“customers.update”存储了默认的_源。此外,这些教程非常棒,除了我必须将card元素转换为SwiftUI视图,而且我存储的卡和购买流处于完全不同的连接点。稍后可能会将此标记为正确,因为PaymentMethod和Sources API可能具有不同的默认付款对象,这可以解释我的问题。谢谢请注意,使用付款方式时,一次性付款没有内置的“默认”PM。有一个客户
invoice\u设置。发票(和订阅)的默认\u付款方法
,但对于一次性付款,您必须始终明确提供付款方法。如果适合您的业务,您可以保存一个PM id作为默认值使用,但您需要为支付意图提供此参数。哦,这更有意义。我可能会调用“paymentMethods.retrieve”来获取订阅的默认存储卡,作为一种快捷方式。如果这不起作用,那么我将按照您最初的建议通过应用程序传递我的付款方式。谢谢你的帮助!这种快捷方式对我很有效(以防其他人感到奇怪),反应很好。理想情况下,我不想存储和传递我的支付方法,因为这会在项目中产生一些边缘案例。但是,这可能是唯一的解决方案,因为我使用“paymenthMethods.attach”和“customers.update”存储了默认的_源。此外,这些教程非常棒,除了我必须将card元素转换为SwiftUI视图,而且我存储的卡和购买流处于完全不同的连接点。稍后可能会将此标记为正确,因为PaymentMethod和Sources API可能具有不同的默认付款对象,这可以解释我的问题。谢谢请注意,使用付款方式时,一次性付款没有内置的“默认”PM。有一个客户
invoice\u设置。发票(和订阅)的默认\u付款方法
,但对于一次性付款,您必须始终明确提供付款方法。如果适合您的业务,您可以保存一个PM id作为默认值使用,但您需要为支付意图提供此参数。哦,这更有意义。我可能会调用“paymentMethods.retrieve”来获取订阅的默认存储卡,作为一种快捷方式。如果这不起作用,那么我将按照您最初的建议通过应用程序传递我的付款方式。谢谢你的帮助!快捷方式对我很有效(以防其他人对此感到疑惑)