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