web-dev-qa-db-fra.com

Stripe: Aucun tel jeton .. un objet similaire existe en mode test, mais une clé de mode en direct a été utilisée pour effectuer cette demande

Lorsque j'utilise Stripe en mode direct, j'obtiens ceci PHP:

Aucun tel jeton tok_fgfhn .. un objet similaire existe en mode test, mais une clé de mode en direct a été utilisée pour effectuer cette demande

Tout fonctionne bien en mode de test Stripe, et je suis passé à une clé API en direct.

Je crée un nouveau client comme celui-ci:

$token  = $_POST['stripeToken'];
    $email  = $_POST['email'];

$customer = \Stripe\Customer::create(array(
      'email' => $email,
      'card'  => $token
    ));

    //charge for user ads
    $charge = \Stripe\Charge::create(array(
      'customer' => $customer->id,
      'amount'   => $amount,
      'currency' => 'eur'
    ));

J'ai testé plusieurs heures mais je reçois toujours cette erreur. Comment puis-je le réparer?

22
Julien

Il semble que vous essayez de facturer un client qui existe sur votre compte de test, pas sur votre compte en direct. Assurez-vous que vous créez un nouveau client avec vos clés en direct et utilisez leur jeton pour créer la charge.

10
Jake T.

Vous aurez deux clés différentes dans votre compte Stripe. Veuillez vous assurer que vous avez remplacé les deux clés de test par des clés actives:

clé de section en direct: sk_live_000000000000000000000

clé de publication en direct: pk_live_000000000000000000000

1- La clé secrète remplacera dans tous vos scripts php où vous chargez

  \Stripe\Stripe::setApiKey("sk_live_00000000000000000000");

2- La clé de publication remplacera dans votre fichier .JS à travers lequel vous validez votre formulaire de paiement ce même fichier crée également un jeton après une validation réussie. Il peut appeler stripe.js ou tout autre nom dont vous avez besoin pour localiser ce fichier, il aura une clé de publication que vous devez remplacer de test à live:

 Stripe.setPublishableKey('pk_live_0000000000000'); //this would be publish key

            function stripeResponseHandler(status, response) { //token function
                if (response.error) {
                    // re-enable the submit button
                    $('.submit-button').removeAttr("disabled");
                    // show hidden div
                    document.getElementById('a_x200').style.display = 'block';
                    // show the errors on the form
                    $(".payment-errors").html(response.error.message);
                } else {
                    var form$ = $("#payment-form");
                    // token contains id, last4, and card type
                    var token = response['id'];
                    // insert the token into the form so it gets submitted to the server
                    form$.append("<input type='hidden' name='stripeToken' value='" + token + "' />");
                    // and submit
                    form$.get(0).submit();
                }
            }
2
A.Aleem11

Examinez le javascript qui utilise la clé API publique de test pour récupérer le jeton. Remplacez-le par votre clé API publique en direct.

Ça devrait être quelque chose comme ça

Stripe.setPublishableKey('pk_test_axEdfdasdfasfsadfsad');
2
devXen

Après y avoir passé quelques heures. Je laisse cela ici si cela peut aider quelqu'un d'autre:

J'ai une application déployée sur Heroku avec la clé secrète et publiable stockée dans la variable d'environnement sur heroku.

J'utilise <%= ENV.fetch('STRIPE_PU_KEY') %> dans un .coffee.erb

Sachez que si vous changez et redémarrez votre serveur, cela ne sera pas suffisant. Vous devrez régénérer votre application.js sinon il prendra toujours la valeur capturée.

J'espère que ça aide

0
Daniel Costa