没有这样的标记'向Stripe提交付款请求时出错

时间:2015-10-14 22:55:43

标签: ios node.js stripe-payments stripe-connect

我使用Stripe API设置付款,以允许用户在iPad上登录其Stripe帐户并接受任何人的付款。为此,我使用Stripe Connect将其登录并保存其帐户ID,然后我使用STPPaymentCardTextField获取信用卡详细信息,然后使用Stripe iOS SDK I&#39 ;提交一张卡片(带有测试卡信息--4242 ......)并通过createTokenWithCard取回令牌。这成功返回一个令牌。此时我需要将该令牌连同目标帐户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)
  })
})

5 个答案:

答案 0 :(得分:55)

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

答案 1 :(得分:7)

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

例如:(python)

textBox.bind("<Return>", newQuote, add="+")

答案 2 :(得分:4)

我在测试环境中遇到了同样的问题,我一直在做错误,我正在添加Stripe收到的令牌,就像这样一个来源:'tok_18nnwSJ6tVEvTdcVs3dNIhGs'一样,但是对于测试环境我们必须使用 source:'tok_visa'

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

它为我创造了客户,让我知道它是否也对其他人有所帮助。

答案 3 :(得分:1)

  1. 首先检查api密钥,使其在前端和后端都相同。
  2. 如果您正在使用测试api键,则必须传递源:“ tok_visa” ,而不是卡源令牌源:“ tok_kb3kb23k2bk32bk3b2”

答案 4 :(得分:0)

这里没有一个答案对我有用。

我正在尝试使用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',
]);