簡體   English   中英

向 Stripe 提交付款請求時出現“無此類令牌”錯誤

[英]'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',
]);
  1. 首先檢查api鍵是否在前端和后端相同。
  2. 如果您正在使用測試 api 密鑰,那么您必須傳遞source: 'tok_visa'而不是您的卡源令牌source: 'tok_kb3kb23k2bk32bk3b2'

我在嘗試交換新的 Secret API Key 和 Public API Key 時遇到了同樣的問題。 我找到了重新啟動服務器和客戶端的解決方案。 通常,我們將 Stripe 密鑰保存到 env 文件中。 只有在我們重新啟動項目時才會重新加載 env 文件。 希望能幫到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM