Stripe PaymentIntent PHP client_secret разрешено до нуля - PullRequest
0 голосов
/ 24 апреля 2020

Я пытаюсь интегрировать Stripe в проект php, и все работает нормально, за исключением того факта, что намерение оплаты client_secret всегда равно null, и я действительно знаю, почему, но не могу понять, как это исправить, я использую javascript файл, в котором находится прослушиватель для кнопки отправки для создания платежного намерения. Проблема в том, что слушатель пытается извлечь данные json перед их созданием, значение client_secret равно нулю, потому что я устанавливаю его значение сразу после создания платежного намерения. Как это можно решить? Любой совет может помочь, спасибо.

Вот код, который я написал: намерение. php:

$intent= \Stripe\PaymentIntent::create(
array(
'amount' => $price + ($price * $tva),
'currency' => 'EUR',
    'setup_future_usage' => 'off_session',

)
);


$intentcls=$intent->client_secret;  

намерение. js:

var form = document.getElementById('payment-form');

form.addEventListener('submit', function(event) {

    var response = fetch('/secret').then(function(response) {
        return response.json();
    }).then(function(responseJson) {
        var clientSecret = responseJson.client_secret;
        stripe.confirmCardPayment(
            clientSecret,
            {
                payment_method: {card: card}
            }
        ).then(function(result) {
            if (result.error) {
                var errorElement = document.getElementById('card-errors');
                errorElement.textContent = result.error.message;
            } else {
                var errorElement = document.getElementById('card-errors');
                errorElement.textContent = 'Paiement effectué avec succées';
                stripeTokenHandler(result.token);
            }
        });

секрет. php:

echo json_encode(array('clientsecret' => $intentcls));

1 Ответ

1 голос
/ 24 апреля 2020

Вам нужно изменить порядок логики c, чтобы убедиться, что PaymentIntent создан до (или во время) запроса на выборку для серверной части.

Если вы уже знаете сумму, вы можете создать PaymentIntent на странице загрузки.

Лучшее решение - создать его после вызова /secret, а затем вернуть client_secret после завершения вызова создания для Stripe API.

secret. php может быть:

$intent = \Stripe\PaymentIntent::create(
  array(
    'amount' => $amount, // calculate amount before this block
    'currency' => 'EUR',
    'setup_future_usage' => 'off_session',
  )
);  

echo json_encode(array('client_secret' => $intent->client_secret));

// perhaps store the ID in your database here
...