'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
它为我创造了客户,如果它对其他人也有帮助,请告诉我。
- 首先检查 api 键是否在前端和后端相同。
- 如果您正在使用测试 api 密钥,那么您必须传递 source: 'tok_visa' 而不是您的卡源令牌 source : 'tok_kb3kb23k2bk32bk3b2'.
我正在使用 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
它为我创造了客户,如果它对其他人也有帮助,请告诉我。
- 首先检查 api 键是否在前端和后端相同。
- 如果您正在使用测试 api 密钥,那么您必须传递 source: 'tok_visa' 而不是您的卡源令牌 source : 'tok_kb3kb23k2bk32bk3b2'.