web-dev-qa-db-fra.com

Stripe Error 400 - Impossible d'utiliser plusieurs fois le jeton Stripe

Je continue de recevoir le code d'erreur 400 sur mon tableau de bord à rayures. Il semble que j'utilise le même jeton de bande plus d'une fois et cela produit une erreur. Voici mon code.

Js:

    <script src="https://checkout.stripe.com/checkout.js"></script>
    <script>

    var handler = StripeCheckout.configure({
        key: 'pk_test_******************',
        image: '/img/documentation/checkout/marketplace.png',
        token: function(token) {
          /*$.post("php/charge.php",{stripeToken:token.id},function(data,status){
              console.log("Data: "+ data+"\nStatus: "+status);
          });*/
          alert(token.used);//alerts false
          $.post("php/charge.php",{stripeToken:token.id});
          alert(token.used);// still alerts false
        }
      });

      $('#myButton').on('click', function(e) {
        // Open Checkout with further options
        handler.open({
          name: 'Demo Site',
          description: '2 widgets',
          currency: "cad",
          amount: 2000
        });
        e.preventDefault();
      });

      // Close Checkout on page navigation
      $(window).on('popstate', function() {
        handler.close();
      });
    </script>

Php:

<?php
  require_once('config.php');

  $token  = $_POST['stripeToken'];

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

  //try {
    $charge = \Stripe\Charge::create(array(
      "amount" => 1000, // amount in cents, again
      "currency" => "cad",
      "source" => $token,
      "description" => "Example charge")
    );
    //}catch(\Stripe\Error\Card $e) {
      // The card has been declined
    //}
?>

Quelqu'un peut-il me dire pourquoi je ne peux pas facturer un client? Comment utiliser plusieurs fois une clé?

20
alaboudi

Vous utilisez le jeton deux fois.

Tout d'abord, lors de la création du client. Deuxièmement, lorsque vous essayez de charger la carte.

Au lieu de cela, vous pouvez créer un client, puis transmettre $customer->id à Stripe lorsque vous créez la charge:

$charge = \Stripe\Charge::create(array(
  "amount" => 1000, // amount in cents, again
  "currency" => "cad",
  "customer" => $customer->id,
  "description" => "Example charge")
);
48
Tushar

Vous devez créer le client pour le facturer plusieurs fois.

1) Ajoutez le jeton de carte de crédit au client et créez un client

2) Utilisez l'ID client pour facturer les utilisateurs

if (isset($_POST['stripeToken'])){

        $token = $_POST['stripeToken'];

// Create a Customer
$customer = \Stripe\Customer::create(array(
  "source" => $token,
  "description" => "Example customer")
);

// Charge the Customer instead of the card
\Stripe\Charge::create(array(
  "amount" => 1000, # amount in cents, again
  "currency" => "usd",
  "customer" => $customer->id)
);
    }

pour plus d'aide, visitez: https://stripe.com/docs/tutorials/charges

4
Ali Zain