'No such token' 向 Stripe 提交付款请求时出错

'No such token' error upon submitting payment request to Stripe

我正在使用 Stripe API 设置付款,以允许用户在 iPad 上登录他们的 Stripe 帐户并接受任何人的付款。为此,我使用 Stripe Connect 让他们登录并保存他们的帐户 ID,然后我使用 STPPaymentCardTextField 获取信用卡详细信息,然后使用 Stripe iOS SDK提交卡片(带有测试卡信息 - 4242...)并通过 createTokenWithCard 取回令牌。这样就成功了returns一个token。此时,我需要将该令牌连同目标帐户 ID(在用户登录后提供给应用程序)和其他信息(货币、金额等)一起提交到我自己的服务器,以将付款提交给 Stripe。我已验证信息正在提交并转发到 Stripe,但 Stripe 返回错误:

{ type: 'invalid_request_error',
app[web.1]:      message: 'No such token: tok_13vxes2eZkKYli2C9bHY1YfX',
app[web.1]:      param: 'source',
app[web.1]:      statusCode: 400,
app[web.1]:      requestId: 'req_7AIT8cEasnzEaq' },
app[web.1]:   requestId: 'req_7AIT8cEasnzEaq',
app[web.1]:   statusCode: 400 }

如果我们直接提交信用卡信息,完全避开令牌,支付成功。这个令牌有问题,我们不确定它失败的原因。这里可能出了什么问题?

[[STPAPIClient sharedClient] createTokenWithCard:card completion:^(STPToken *token, NSError *error) {
    //submit tokenId and other info to 'charge' endpoint below
}

NodeJS:

app.post('/charge', (req, res, next) => {
  stripe.charges.create({
    amount: req.body.amount,
    currency: req.body.currency,
    source: req.body.token,
    description: req.body.description,
    destination: req.body.destination
  }, (err, charge) => {
    if (err) return next(err)
    res.json(charge)
  })
})

您确定您在服务器和客户端上使用相同的 API 密钥吗?
您的服务器应该使用您的 (live/test) 密钥,并且您的 iOS 应用程序应该使用您的(实时/测试)可发布密钥,如 Stripe Testing.

中所述

已接受的答案对我不起作用。我为客户端和服务器使用了正确的密钥,但问题仍然存在。我也将源代码从 iOS 发送到服务器,基于条带示例 RocketRides,它正在发送信用卡的源 ID,即 "card_xxx",这是行不通的。您必须在服务器端为调用添加 "customer" 属性。

例如:(python)

stripe.Charge.create(amount=1000, currency='usd', source="card_xxxxx", **customer**='cus_xxxx', application_fee=600,destination={'account': 'acct_xxxx'})

这里的答案都不适合我。

我正尝试使用 Stripe 的 PHP 库对一张我已经存档的卡进行收费...

$charge = \Stripe\Charge::create([
    'amount' => 1000,
    'currency' => 'gbp',
    'card' => 'card_xxx',
    'description' => 'Payment for Sam',
]);

而且我收到上面没有此类令牌的错误。

为了让它工作,我还必须像这样提供客户 ID...

$charge = \Stripe\Charge::create([
    'amount' => 1000,
    'currency' => 'gbp',
    'customer' => 'cus_xxx',
    'card' => 'card_xxx',
    'description' => 'Payment for Sam',
]);

我的测试环境和我一直犯的错误一直面临着同样的问题,我正在添加 Stripe 收到的令牌,就像这样 来源:'tok_18nnwSJ6tVEvTdcVs3dNIhGs' ,但对于测试环境我们必须使用 source: 'tok_visa'.

这是 Stripe 提供的测试源列表。 https://stripe.com/docs/testing#cards

它为我创造了客户,如果它对其他人也有帮助,请告诉我。

  1. 首先检查 api 键是否在前端和后端相同。
  2. 如果您正在使用测试 api 密钥,那么您必须传递 source: 'tok_visa' 而不是您的卡源令牌 source : 'tok_kb3kb23k2bk32bk3b2'.