Как создать платный заряд с помощью токена отправки, отправленного через AJAX на php

Я пытаюсь использовать новую функцию проверки Stripe с помощью специальной кнопки, отправить токен через AJAX POST в файл php, который затем выполнит заряд. К сожалению, у меня возникли проблемы с извлечением маркера из переменной POST. Я надеюсь, что кто-то здесь сможет рассказать мне, что я смущаю, и если есть более простой способ сделать это.

На стороне клиента у меня есть 5 кнопок с различными возможными «пожертвованиями». Вот js, написанный для этого до сих пор (не включает 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(); }); }); 

И это мой php, который обрабатывает вызов 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" => "payinguser@example.com") ); echo 'success'; } catch(Stripe_CardError $e) { // The card has been declined echo $tokenid; } ?> 

Прямой результат этого кода, как отмечено в журналах ошибок php, заключается в том, что переменная POST для токена не может быть «прочитана». Токен создается хорошо (я вижу, что он зарегистрирован на консоли), но он исчезает, когда я отправляю его через AJAX.

Все говорили, что Stripe очень просто реализовать, поэтому я действительно чувствую, что здесь что-то не хватает. Кто-нибудь сможет пролить свет?

Благодаря!

Поэтому после 10-часового сна и более четкой головы я решил заняться этим несколько иначе. Это для всех, кто сталкивается с теми же проблемами, что и я, и, надеюсь, будет работать очень хорошо, как учебник stripe / ajax / php. Оказывается, я думал о том, что данные POST ошибочны. Даже с AJAX вам понадобится пара ключей и значений для отправки любых данных POST. Я перекодировал эту часть моих js для этого:

  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 } }); 

Обратите внимание, что одним основным изменением является атрибут data метода ajax. Консоль, регистрирующая объект токена, показывает весь объект токена JSON, который вы можете использовать для извлечения идентификатора (то, что ваш сервер должен отправить на полосу для оплаты платежа), а также адрес электронной почты (для ваших целей ведения журнала). Поскольку у меня есть переменная сумма пожертвований, я включил это как третий ключ.

Теперь в вашем php, чтобы получить эти POST-переменные и поместить их в php-переменные, вы захватываете их с помощью соответствующих ключей:

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

И тогда все остальное должно быть самоочевидным (почти в том же примере, что и в учебнике по php-плагине).

В любом случае, надеюсь, что это поможет кому-то там. Удачи!