#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 на серверной части при отправке?