ユーザーが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)
})
})
サーバーとクライアントで同じAPIキーを使用しているのですか?
サーバーは(ライブ/テスト)シークレットキーを使用し、iOSアプリは ストライプテスト で説明されているように(ライブ/テスト)公開可能キーを使用する必要があります。
受け入れられた答えは私にはうまくいきません。クライアントとサーバーに正しいキーを使用していますが、まだ問題は残っています。ストライプの例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'})
私は私のテスト環境で同じ問題に直面していましたが、私が行っていた間違い、私はこのようなStripeが受け取ったトークンを追加していましたsource: 'tok_18nnwSJ6tVEvTdcVs3dNIhGs'が、テスト環境ではsource: 'tok_visa'を使用する必要があります。
以下は、Stripeが提供するテストソースのリストです。 https://stripe.com/docs/testing#cards
それは私のための顧客を作成しました、それが同様に他の誰かを助けたかどうか私に知らせてください。
ここでの答えはどちらもうまくいきませんでした。
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',
]);