Stripe PaymentIntent PHP client_secret已解析为null



我正在尝试将Stripe集成到一个php项目中,除了支付意向client_secret始终为null这一事实之外,一切都很好,我确实知道为什么,但不知道如何修复它,我使用了一个javascript文件,其中有一个用于创建支付意向的提交按钮的侦听器。问题是,侦听器试图在创建json数据之前获取json数据,client_secret值为null,因为我在创建支付意向后才设置它的值,如何解决这个问题?任何建议都有帮助,谢谢。

这是我写的代码:intet.php:

$intent= StripePaymentIntent::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时创建它,然后在对Stripe API的创建调用完成后返回client_secret

secret.php可以是:

$intent = StripePaymentIntent::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

最新更新