web-dev-qa-db-fra.com

Erreur "Aucun de ces jetons" lors de la demande de paiement à Stripe

Je configure des paiements à l'aide de l'API Stripe pour permettre à un utilisateur de se connecter à son compte Stripe sur un iPad et d'accepter des paiements de quiconque. Pour ce faire, j'utilise Stripe Connect pour les connecter et enregistrer leur identifiant de compte, puis j'utilise STPPaymentCardTextField pour obtenir les détails de ma carte de crédit, puis j'utilise le SDK iOS Stripe, je soumets une carte (avec la carte de test info - 4242 ...) et récupérer un jeton via createTokenWithCard. Cela renvoie avec succès un jeton. À ce stade, je dois soumettre ce jeton avec l'identifiant du compte de destination (fourni à l'application après que l'utilisateur se soit connecté) et d'autres informations (devise, montant, etc.) sur mon propre serveur pour soumettre le paiement à Stripe. J'ai vérifié que les informations sont soumises et transmises à Stripe, mais Stripe renvoie une erreur:

{ 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 }

Si nous soumettons les informations de carte de crédit directement, en évitant le jeton, le paiement aboutit. Quelque chose ne va pas avec ce jeton, et nous ne savons pas pourquoi il échoue. Qu'est-ce qui pourrait mal se passer ici?

[[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)
  })
})
31
Jordan H

La réponse acceptée ne fonctionne pas pour moi. J'utilise la clé correcte pour le client et le serveur, mais le problème est toujours là. J'envoie également le code source d'iOS au serveur, basé sur l'exemple de bande RocketRides, qui envoie l'ID source de la carte de crédit, "card_xxx", et cela ne fonctionnera pas. Vous devrez ajouter l'attribut "client" pour l'appel côté serveur.

Par exemple: (python)

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

Êtes-vous sûr que vous utilisez les mêmes clés API sur votre serveur et votre client?
Votre serveur doit utiliser votre clé secrète (live/test) et votre application iOS doit utiliser votre clé publiable (live/test) comme indiqué ici/ Stripe Testing .

50
jflinter

J'avais été confronté au même problème pour mon environnement de test et l'erreur que j'avais commise, j'ai ajouté le jeton reçu par Stripe comme celui-ci source: 'tok_18nnwSJ6tVEvTdcVs3dNIhG', mais pour l'environnement de test, nous devons utiliser source: 'tok_visa'.

Voici la liste des sources de test fournies par Stripe. https://stripe.com/docs/testing#cards

Cela a créé un client pour moi, laissez-moi savoir si cela a également aidé quelqu'un d'autre.

1
Hamza Khan

Aucune des réponses ici n'a fonctionné pour moi.

J'essayais d'utiliser la bibliothèque PHP de Stripe pour charger une carte que j'avais déjà dans un fichier comme celui-ci ...

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

Et je recevais l'erreur de jeton de ce type ci-dessus.

Pour que cela fonctionne, je devais également fournir l'identifiant du client comme suit ...

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