Comment créer une charge de bande avec un jeton de paiement envoyé par AJAX à php

J'essaie d'utiliser la nouvelle fonctionnalité de caisse Stripe avec un bouton personnalisé, envoyez le jeton via AJAX POST à ​​un fichier php qui exécutera ensuite la charge. Malheureusement, j'ai des difficultés à récupérer le jeton de la variable POST. J'espère que quelqu'un ici pourrait me dire ce que je suis trop compliqué et s'il existe un moyen plus simple de le faire.

Du côté du client, j'ai 5 boutons avec différents "dons" possibles. Voici les js écrits jusqu'à maintenant (ne comprend pas le html):

$(function() { var donationAmt = ''; var handler = StripeCheckout.configure({ key: 'pk_test_3plF76arhkygGMgwCEerThpa', image: '/square-image.png', token: function(token, args) { // Use the token to create the charge with a server-side script. // You can access the token ID with `token.id` console.log(token) var chargeData = { donationAmt: donationAmt, token: token } $.ajax({ url: '/link/to/php/stripeDonate.php', type: 'post', data: {chargeData: chargeData}, success: function(data) { if (data == 'success') { console.log("Card successfully charged!") } else { console.log("Success Error!") } }, error: function(data) { console.log("Ajax Error!"); console.log(data); } }); // end ajax call } }); $('.donate-button').bind('click', function(e) { donationAmt = $(this).html().substring(1) + '00'; donationAmt = parseInt(donationAmt); // Grabs the donation amount in the html of the button and store it in a variable // Open Checkout with further options handler.open({ name: 'Company Name', description: 'A donation', amount: donationAmt }); e.preventDefault(); }); }); 

Et c'est mon php qui traite l'appel AJAX POST:

 <?php require_once('Stripe.php'); // Set your secret key: remember to change this to your live secret key in production // See your keys here https://manage.stripe.com/account Stripe::setApiKey("sk_test_APIKEYREDACTED"); // Get the credit card details submitted by the form $token = json_decode($_POST['chargeData']); $tokenid = $token['id']; // Create the charge on Stripe's servers - this will charge the user's card try { $charge = Stripe_Charge::create(array( "amount" => 2000, // amount in cents, again "currency" => "usd", "card" => $tokenid, "description" => "[email protected]") ); echo 'success'; } catch(Stripe_CardError $e) { // The card has been declined echo $tokenid; } ?> 

Le résultat direct de ce code tel qu'indiqué dans les journaux d'erreur php est que la variable POST pour le jeton ne peut pas être "lue". Le jeton est bien créé (je le vois connecté à la console) mais disparaît lorsque je l'envoie via AJAX.

Tout le monde a dit que Stripe est super facile à mettre en œuvre, donc j'ai vraiment l'impression qu'il me manque quelque chose ici. Quelqu'un pourrait-il faire preuve de lumière?

Merci!

Donc, après une sieste de 10 heures et une tête beaucoup plus claire, j'ai décidé d'aborder cela de manière légèrement différente. C'est pour quelqu'un d'autre qui trébuchent dans les mêmes problèmes que je suis et j'espère travailler vraiment bien en tant que tutoriel stripe / ajax / php. Il s'avère que j'ai pensé que les données POST étaient fausses. Même avec AJAX, vous aurez besoin d'une paire de clés et de valeurs pour envoyer n'importe quel type de données POST. J'ai recodé cette partie de mes js pour cela:

  var handler = StripeCheckout.configure({ key: 'PUBLISHABLEKEY', image: '/square-image.png', token: function(token, args) { // Use the token to create the charge with a server-side script. // You can access the token ID with `token.id` console.log(token) $.ajax({ url: 'link/to/php/stripeDonate.php', type: 'post', data: {tokenid: token.id, email: token.email, donationAmt: donationAmt}, success: function(data) { if (data == 'success') { console.log("Card successfully charged!"); } else { console.log("Success Error!"); } }, error: function(data) { console.log("Ajax Error!"); console.log(data); } }); // end ajax call } }); 

Notez que le changement principal est l'attribut de données de la méthode ajax. La connexion de la logique à l'objet token révèle l'intégralité de l'objet jeton JSON que vous pouvez utiliser pour extraire l'ID (ce que votre serveur doit envoyer à stripe pour facturer un paiement) ainsi que le courrier électronique (à des fins de journalisation). Étant donné que j'ai un montant variable de dons, je l'ai inclus comme troisième clé.

Maintenant dans votre php, afin d'obtenir ces variables POST et de les mettre dans les variables php, vous les attrapez à l'aide de leurs clés respectives:

 $tokenid = $_POST['tokenid']; $donation = $_POST['donationAmt']; $email = $_POST['email']; 

Et alors, tout le reste devrait s'expliquer soi-même (en suivant à peu près exactement le même exemple que le tutoriel php de strip).

Quoi qu'il en soit, espérons que cela aide quelqu'un là-bas. Bonne chance!