Интеграция с Stripe Payment PHP JSON проблема с передачей электронной почты через рабочий процесс

#javascript #php #arrays #json #stripe-payments

#javascript #php #массивы #json #stripe-платежи

Вопрос:

Я тестирую интеграцию с платежной системой stripe в PHP и загрузил тестовые файлы непосредственно из stripe. Я хочу иметь возможность добавлять «receipt_email» в рабочий процесс. Если я определю это непосредственно на create.php и это работает нормально, но проблема возникает, когда я определяю его как скрытый ввод в форме на checkout.html Я не знаю, как прочесть это в create.php с тех пор , как client.js является получение create.php

    checkout.htm

   <form id="payment-form">

   <input type="hidden" id="email"  value="email@domain.com">

  <div id="card-element"><!--Stripe.js injects the Card Element--></div>
  <button id="submit">
    <div class="spinner hidden" id="spinner"></div>
    <span id="button-text">Pay</span>
  </button>
  <p id="card-error" role="alert"></p>
  <p class="result-message hidden">
    Payment succeeded, see the result in your
    <a href="" target="_blank">Stripe dashboard.</a> Refresh the page to pay again.
  </p>
  </form>


 client.js

// The items the customer wants to buy
var purchase = {
 items: [{ id: "shirt" }]
};

var formData = {
        'email': document.getElementById("email").value
};

  // Disable the button until we have Stripe set up on the page
  document.querySelector("button").disabled = true;
 fetch("create.php", {
  method: "POST",
  headers: {
  "Content-Type": "application/json"
    },
    body: JSON.stringify(purchase)  //I have tried using FormData Here but 
                                      need purchase also
   })
  .then(function(result) {
   return result.json();
   })
  .then(function(data) {
    var elements = stripe.elements();

 create.php

     function calculateOrderAmount(array $items): int {
     // Replace this constant with a calculation of the order's amount
     // Calculate the order total on the server to prevent
     // customers from directly manipulating the amount on the client
     return 1400;
     }

     header('Content-Type: application/json');

      try {
      // retrieve JSON from POST body
      $json_str = file_get_contents('php://input');
       $json_obj = json_decode($json_str);


     $paymentIntent = StripePaymentIntent::create([
    'amount' => calculateOrderAmount($json_obj->items),
    'currency' => 'usd',
    'receipt_email' => ??, //ok if defined here but I need to pull it from 
                                    input in checkout.html
     ]);
 

Комментарии:

1. API Stripe не принимает JSON. Вам следует использовать официальную библиотеку stripe-php , но если вы по какой-то причине не можете, есть рабочий пример того, как форматировать запросы в исходном коде библиотеки .

2. Этот код, которым я поделился, взят непосредственно из stripe. Существует так много документации, что это почти ошеломляет. Я выбираю этот метод, потому что это самый простой подход, который я смог найти, и он работает. Единственная проблема, с которой я сталкиваюсь, — это передача электронной почты через этот рабочий процесс. Я могу определить это на create.php и это тоже прекрасно работает. Проблема заключается в получении электронной почты из формы на checkout.htm к тому create.php . Вероятно, это был бы простой вопрос для тех, кто понимает этот рабочий процесс лучше, чем я.

3. Можете ли вы связать меня с документами, в которых мы рекомендуем кодировку JSON? Я позабочусь о том, чтобы мы просмотрели их и обновили, если это неправильно. Спасибо!

4. stripe.com/docs/payments/integration-builder Эта ссылка содержит пользовательский поток платежей, с которым я работаю. для загрузки доступны 4 файла, и весь код, который я показал выше, взят непосредственно отсюда. Спасибо

5. Ах, я вижу, я неправильно понял ваш вопрос. JSON поступает в серверную часть (не напрямую в Stripe API). Можете ли вы уточнить, какое поле в приведенном выше коде является скрытым, которое вы пытаетесь отправить, а также как выглядит JSON на серверной части при отправке?