web-dev-qa-db-ja.com

Stripeに支払い要求を送信する際の「No such token」エラー

ユーザーがiPadで自分のStripeアカウントにログインし、誰からでも支払いを受け取ることができるように、Stripe APIを使用して支払いを設定しています。これを行うには、Stripe Connectを使用してログインし、アカウントIDを保存し、STPPaymentCardTextFieldを使用してクレジットカードの詳細を取得し、Stripe iOS SDKを使用してカードを送信します(テストカード情報-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)
  })
})
39
Jordan H

サーバーとクライアントで同じAPIキーを使用しているのですか?
サーバーは(ライブ/テスト)シークレットキーを使用し、iOSアプリは ストライプテスト で説明されているように(ライブ/テスト)公開可能キーを使用する必要があります。

59
jflinter

受け入れられた答えは私にはうまくいきません。クライアントとサーバーに正しいキーを使用していますが、まだ問題は残っています。ストライプの例RocketRidesに基づいて、iOSからサーバーにもソースを送信していますが、クレジットカードのソースIDである "card_xxx"を送信していますが、うまくいきません。サーバー側の呼び出しに「顧客」属性を追加する必要があります。

例:(python)

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

私は私のテスト環境で同じ問題に直面していましたが、私が行っていた間違い、私はこのようなStripeが受け取ったトークンを追加していましたsource: 'tok_18nnwSJ6tVEvTdcVs3dNIhGs'が、テスト環境ではsource: 'tok_visa'を使用する必要があります。

以下は、Stripeが提供するテストソースのリストです。 https://stripe.com/docs/testing#cards

それは私のための顧客を作成しました、それが同様に他の誰かを助けたかどうか私に知らせてください。

9
Hamza Khan

ここでの答えはどちらもうまくいきませんでした。

StripeのPHPライブラリを使用して、すでにこのようなファイルに保存されているカードを請求しようとしていました...

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

そして、私は上記のno such tokenエラーを受け取っていました。

それを機能させるには、次のように顧客IDも提供する必要がありました...

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