条纹 paymentIntent api |条纹仪表板上的未完成付款
stripe paymentIntent api | incomplete payment on stripe dashboard
我正在从 Changes API 迁移到 PaymentIntent API。我设置代码成功了。
但我很奇怪 每次我加载页面时 stripe 创建一个付款意图显示在 stripe 仪表板上,带有“不完整 " 付款 status,在单击包含所有详细信息的付款按钮后,此状态变为“成功”status。
PHP代码
$customer = \Stripe\Customer::create(array(
'email' => $_SESSION['userEmail']
));
$intent = \Stripe\PaymentIntent::create([
'amount' => $varTotalPrice,
'currency' => 'eur',
'customer' => $customer->id,
'payment_method_types' => ['card'],
'description' => $arrCreditResult['creditTitle']
]);
如你所知,这为我提供了在 js 脚本中使用的 client_secret 键。
JS代码
<script type="text/javascript">
var stripe = Stripe('<?php echo $pubkey; ?>');
var elements = stripe.elements();
var payBtnHtml = document.getElementById("submit").innerHTML;
var card = elements.create('card', {
style: {
base: {
iconColor: '#666EE8',
color: '#31325F',
lineHeight: '40px',
fontWeight: 600,
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSize: '15px',
'::placeholder': {
color: '#31325F',
fontWeight:300,
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSize: '15px'
}
}
}
});
card.mount('#card-element');
var cardholderName = document.querySelector('input[name=cardholder-name]');
var form = document.getElementById('payment-form');
var clientSecret = document.getElementById('payment-form').getAttribute("data-secret");
card.on('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(ev) {
ev.preventDefault();
document.getElementById("submit").disabled = true;
document.getElementById("submit").innerHTML = WAIT;
stripe.confirmCardPayment(clientSecret, {
payment_method: {
card: card,
billing_details: {
name: cardholderName.value
}
}
}).then(function(result) {
if (result.error) {
// Show error to your customer (e.g., insufficient funds)
document.getElementById("submit").disabled = false;
console.log(result.error.message);
} else {
// The payment has been processed!
if (result.paymentIntent.status === 'succeeded') {
document.getElementById("submit").disabled = false;
document.getElementById("payBtn").innerHTML=payBtnHtml
alert("paymemt done");
debug(result);
return false;
// Show a success message to your customer
// There's a risk of the customer closing the window before callback
// execution. Set up a webhook or plugin to listen for the
// payment_intent.succeeded event that handles any business critical
// post-payment actions.
}
}
});
});
</script>
我只想在用户 按下支付按钮时创建支付。 与费用 API 相同。
您可以重构代码以仅在需要时创建付款意向。步骤如下:
- 停止在每次加载页面时创建付款意向并删除
data-secret
属性。
- 在您的服务器上创建一个 URL,它将根据需要创建一个支付意向和 return 其客户端密码(通常它会 return 在 JSON 中提供此信息) .
- 在您的 JavaScript 中,当您的客户按下付款按钮时,获取创建付款意向的 URL。在响应中使用客户端密码而不是
data-secret
的值来完成支付。
特别感谢@justinMichael的建议
经过一番努力,我在这里找到了一个可行的解决方案:-
https://github.com/stripe-samples/accept-a-card-payment
这里我使用方法“without-webhooks”:-
https://github.com/stripe-samples/accept-a-card-payment/tree/master/without-webhooks/server/php
这很容易实现,只需要做一些小改动。
更改条带键。
如果要重命名文件夹,请检查 stripe.js 中的文件路径。他们在这里使用 fetch("stripe-key.php") 来获取键和其他东西
根据要求在 pay.php 文件中进行更改。
您可能需要一些更有用的链接:-
我正在从 Changes API 迁移到 PaymentIntent API。我设置代码成功了。
但我很奇怪 每次我加载页面时 stripe 创建一个付款意图显示在 stripe 仪表板上,带有“不完整 " 付款 status,在单击包含所有详细信息的付款按钮后,此状态变为“成功”status。
PHP代码
$customer = \Stripe\Customer::create(array(
'email' => $_SESSION['userEmail']
));
$intent = \Stripe\PaymentIntent::create([ 'amount' => $varTotalPrice, 'currency' => 'eur', 'customer' => $customer->id, 'payment_method_types' => ['card'], 'description' => $arrCreditResult['creditTitle'] ]);
如你所知,这为我提供了在 js 脚本中使用的 client_secret 键。
JS代码
<script type="text/javascript">
var stripe = Stripe('<?php echo $pubkey; ?>');
var elements = stripe.elements();
var payBtnHtml = document.getElementById("submit").innerHTML;
var card = elements.create('card', {
style: {
base: {
iconColor: '#666EE8',
color: '#31325F',
lineHeight: '40px',
fontWeight: 600,
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSize: '15px',
'::placeholder': {
color: '#31325F',
fontWeight:300,
fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
fontSize: '15px'
}
}
}
});
card.mount('#card-element');
var cardholderName = document.querySelector('input[name=cardholder-name]');
var form = document.getElementById('payment-form');
var clientSecret = document.getElementById('payment-form').getAttribute("data-secret");
card.on('change', function(event) {
var displayError = document.getElementById('card-errors');
if (event.error) {
displayError.textContent = event.error.message;
} else {
displayError.textContent = '';
}
});
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(ev) {
ev.preventDefault();
document.getElementById("submit").disabled = true;
document.getElementById("submit").innerHTML = WAIT;
stripe.confirmCardPayment(clientSecret, {
payment_method: {
card: card,
billing_details: {
name: cardholderName.value
}
}
}).then(function(result) {
if (result.error) {
// Show error to your customer (e.g., insufficient funds)
document.getElementById("submit").disabled = false;
console.log(result.error.message);
} else {
// The payment has been processed!
if (result.paymentIntent.status === 'succeeded') {
document.getElementById("submit").disabled = false;
document.getElementById("payBtn").innerHTML=payBtnHtml
alert("paymemt done");
debug(result);
return false;
// Show a success message to your customer
// There's a risk of the customer closing the window before callback
// execution. Set up a webhook or plugin to listen for the
// payment_intent.succeeded event that handles any business critical
// post-payment actions.
}
}
});
});
</script>
我只想在用户 按下支付按钮时创建支付。 与费用 API 相同。
您可以重构代码以仅在需要时创建付款意向。步骤如下:
- 停止在每次加载页面时创建付款意向并删除
data-secret
属性。 - 在您的服务器上创建一个 URL,它将根据需要创建一个支付意向和 return 其客户端密码(通常它会 return 在 JSON 中提供此信息) .
- 在您的 JavaScript 中,当您的客户按下付款按钮时,获取创建付款意向的 URL。在响应中使用客户端密码而不是
data-secret
的值来完成支付。
特别感谢@justinMichael的建议
经过一番努力,我在这里找到了一个可行的解决方案:-
https://github.com/stripe-samples/accept-a-card-payment
这里我使用方法“without-webhooks”:-
https://github.com/stripe-samples/accept-a-card-payment/tree/master/without-webhooks/server/php
这很容易实现,只需要做一些小改动。
更改条带键。
如果要重命名文件夹,请检查 stripe.js 中的文件路径。他们在这里使用 fetch("stripe-key.php") 来获取键和其他东西
根据要求在 pay.php 文件中进行更改。
您可能需要一些更有用的链接:-