Stripe payments 购买完成后更改条带签出按钮
我试图让我的按钮显示“付费”,或者甚至获得某种Stripe payments 购买完成后更改条带签出按钮,stripe-payments,Stripe Payments,我试图让我的按钮显示“付费”,或者甚至获得某种控制台。当用户通过条带签出付费时,记录。我当前的代码如下所示,但我得到的错误标记未在我的控制台错误中定义 HTML: 接受并支付(23.99英镑) JavaScript: <script src="https://checkout.stripe.com/checkout.js"></script> <script> var handler = StripeCheckout.configure({
控制台。当用户通过条带签出付费时,记录。我当前的代码如下所示,但我得到的错误标记未在我的控制台错误中定义
HTML:
接受并支付(23.99英镑)
JavaScript:
<script src="https://checkout.stripe.com/checkout.js"></script>
<script>
var handler = StripeCheckout.configure({
key: 'pk_test_CF2GDj8RsSNWc23MhUJ9kylU00CkI1AJZ5',
locale: 'auto',
token: function(token) {
// You can access the token ID with `token.id`.
// Get the token ID to your server-side code for use.
chargeStatus(token);
}
});
var buyButtons = document.getElementsByClassName('purchaseButton');
for (i = 0; i < buyButtons.length; i++) {
buyButtons[i].addEventListener('click', function(e) {
// Open Checkout with further options:
handler.open({
name: this.dataset.name,
amount: this.dataset.amount,
src: "https://checkout.stripe.com/checkout.js",
class: "stripe-button",
key: "pk_test_6pRNASCoBOKtIshFeQd4XMUh",
email: this.dataset.email,
currency: "gbp",
description: this.dataset.description,
});
e.preventDefault();
});
}
// Close Checkout on page navigation:
window.addEventListener('popstate', function() {
handler.close();
});
function chargeStatus(theObject) {
fetch("/charge", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(theObject.id)
})
.then(response => {
if (!response.ok)
throw response;
return response.json();
})
.then(output => {
console.log("Purchase succeeded:", output);
})
.catch(err => {
console.log("Purchase failed:", err);
})
}
</script>
var handler=StripeCheckout.configure({
键:“pk_测试\u CF2GDj8RsSNWc23MhUJ9kylU00CkI1AJZ5”,
区域设置:“自动”,
令牌:函数(令牌){
//您可以使用“token.ID”访问令牌ID。
//获取服务器端代码的令牌ID以供使用。
收费状态(代币);
}
});
var buyButtons=document.getElementsByClassName('purchaseButton');
对于(i=0;i{
如果(!response.ok)
投掷反应;
返回response.json();
})
。然后(输出=>{
console.log(“购买成功:”,输出);
})
.catch(错误=>{
console.log(“购买失败:”,错误);
})
}
fetch
块试图访问该范围内不存在的变量令牌。应在条带签出返回令牌供您使用后执行提取。将fetch
代码包装到函数中,并在token:function(token){}
处理程序中调用该函数。Hi Paul,我已经编辑了代码并将其包装在一个函数中,但不幸的是,在您传递的对象函数中,令牌未定义
,但仍然引用令牌
。此外,您没有将任何内容传递到chargeStatus
。将chargeStatus
中的token
更改为object.id
,并将token
传递到您的chargeStatus
函数中,它应该可以工作。谢谢Paul,我已经更新了上面的代码。我现在收到一个JS错误帖子http://domain.local/charge 400(错误请求)
但我猜这是因为我不在安全的https域上。这只是意味着你的浏览器不能点击http://domain.local/charge
。可能是因为您的后端未设置为在该路由接收请求。签出将在http中工作,但仅适用于测试模式。一旦你上线,你需要启用SSL。谢谢Paul,还有什么方法可以保持在同一页面上,只更改按钮文本吗?
<script src="https://checkout.stripe.com/checkout.js"></script>
<script>
var handler = StripeCheckout.configure({
key: 'pk_test_CF2GDj8RsSNWc23MhUJ9kylU00CkI1AJZ5',
locale: 'auto',
token: function(token) {
// You can access the token ID with `token.id`.
// Get the token ID to your server-side code for use.
chargeStatus(token);
}
});
var buyButtons = document.getElementsByClassName('purchaseButton');
for (i = 0; i < buyButtons.length; i++) {
buyButtons[i].addEventListener('click', function(e) {
// Open Checkout with further options:
handler.open({
name: this.dataset.name,
amount: this.dataset.amount,
src: "https://checkout.stripe.com/checkout.js",
class: "stripe-button",
key: "pk_test_6pRNASCoBOKtIshFeQd4XMUh",
email: this.dataset.email,
currency: "gbp",
description: this.dataset.description,
});
e.preventDefault();
});
}
// Close Checkout on page navigation:
window.addEventListener('popstate', function() {
handler.close();
});
function chargeStatus(theObject) {
fetch("/charge", {
method: "POST",
headers: {"Content-Type": "application/json"},
body: JSON.stringify(theObject.id)
})
.then(response => {
if (!response.ok)
throw response;
return response.json();
})
.then(output => {
console.log("Purchase succeeded:", output);
})
.catch(err => {
console.log("Purchase failed:", err);
})
}
</script>