[英]'No such token' error upon submitting payment request to Stripe
我正在使用 Stripe API 設置付款,以允許用戶在 iPad 上登錄他們的 Stripe 帳戶並接受任何人的付款。 為此,我使用 Stripe Connect 讓他們登錄並保存他們的帳戶 ID,然后我使用STPPaymentCardTextField
獲取信用卡詳細信息,然后使用 Stripe iOS SDK 我正在提交一張卡(帶有測試卡info - 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
}
節點JS:
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 密鑰嗎?
您的服務器應該使用您的(實時/測試)密鑰,而您的 iOS 應用程序應該使用您的(實時/測試)可發布密鑰,如Stripe Testing 中所述。
我的測試環境一直面臨着同樣的問題,我一直在做這個錯誤,我正在添加 Stripe 收到的令牌,就像這樣一個來源: 'tok_18nnwSJ6tVEvTdcVs3dNIhGs' ,但對於測試環境,我們必須使用source: 'tok_visa' 。
這是 Stripe 提供的測試源列表。 https://stripe.com/docs/testing#cards
它為我創造了客戶,如果它也幫助了其他人,請告訴我。
接受的答案對我不起作用。 我正在為客戶端和服務器使用正確的密鑰,但問題仍然存在。 我也將源從 iOS 發送到服務器,基於條紋示例 RocketRides,它正在發送信用卡的源 ID,即“card_xxx”,但這是行不通的。 您必須為服務器端的調用添加“客戶”屬性。
例如:(蟒蛇)
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',
]);
我在嘗試交換新的 Secret API Key 和 Public API Key 時遇到了同樣的問題。 我找到了重新啟動服務器和客戶端的解決方案。 通常,我們將 Stripe 密鑰保存到 env 文件中。 只有在我們重新啟動項目時才會重新加載 env 文件。 希望能幫到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.