Stripe PaymentIntent PHP客户端_secret解析为null

Stripe PaymentIntent PHP客户端_secret解析为null,php,json,stripe-payments,Php,Json,Stripe Payments,我正在尝试将Stripe集成到一个php项目中,除了支付意图客户端_secret始终为空,我知道原因,但不知道如何修复它,我正在使用一个javascript文件,其中有一个用于创建支付意图的提交按钮的侦听器。问题是监听器在创建json数据之前尝试获取json数据,客户机_secret值为null,因为我在创建支付意图之后设置了它的值,如何解决这个问题?任何建议都可以,谢谢 以下是我编写的代码: intent.php: $intent= \Stripe\PaymentIntent::create(

我正在尝试将Stripe集成到一个php项目中,除了支付意图客户端_secret始终为空,我知道原因,但不知道如何修复它,我正在使用一个javascript文件,其中有一个用于创建支付意图的提交按钮的侦听器。问题是监听器在创建json数据之前尝试获取json数据,客户机_secret值为null,因为我在创建支付意图之后设置了它的值,如何解决这个问题?任何建议都可以,谢谢

以下是我编写的代码: intent.php:

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

)
);


$intentcls=$intent->client_secret;  
intent.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);
            }
        });
secret.php:

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

您需要重新安排您的逻辑,以确保PaymentIntent是在对后端的获取请求之前(或期间)创建的

如果您已经知道金额,您可以在页面加载时创建PaymentIntent

更好的解决方案是在调用
/secret
时创建它,然后在对条带API的创建调用完成后返回
客户机\u secret

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

您的答案必须是正确的,我还通过在php文件中内联js代码解决了这个问题,谢谢。