所以我已经在这个问题上挣扎了几天,需要找到一个解决方案。我遵循了一个关于如何设置条形支付的教程,下面的代码是我遇到错误的地方:
var buyBtn = document.getElementById('payButton');
var responseContainer = document.getElementById('paymentResponse');
// Create a Checkout Session with the selected product
var createCheckoutSession = function(stripe) {
return fetch("stripe_charge.php", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
checkoutSession: 1,
}),
}).then(function(result) {
return result.json(); // JSON PASSED FROM HERE
});
};
// Handle any errors returned from Checkout
var handleResult = function(result) {
if (result.error) {
responseContainer.innerHTML = '<p>' + result.error.message + '</p>';
}
buyBtn.disabled = false;
buyBtn.textContent = 'Buy Now';
};
// Specify Stripe publishable key to initialize Stripe.js
var stripe = Stripe('<?php echo STRIPE_PUBLISHABLE_KEY; ?>');
buyBtn.addEventListener("click", function(evt) {
buyBtn.disabled = true;
buyBtn.textContent = 'Please wait...';
createCheckoutSession().then(function(data) { // TO HERE - ERROR IS HERE
if (data.sessionId) {
stripe.redirectToCheckout({
sessionId: data.sessionId,
}).then(handleResult);
} else {
handleResult(data);
}
});
});
所以你可以在上面看到我试图在哪里返回json,以及我在哪里接收它。我仔细检查了返回的值,如下所示:
下面是我得到的错误:
checkout.php:1 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
根据我所看到的,似乎在data.json()的返回中的某个地方。数据正在被更改,以便稍后在代码中不被接受。如果有人能对此有所帮助,或者对情况有更多的了解,我将不胜感激。我已经查看了在线加载,但除了正在传递的HTML文件之外,似乎找不到任何其他内容。问题是,即使在查看调试时,我也不知道这是如何发生的。非常感谢。
发布于 2020-08-30 12:29:43
有一个结果,是的,但它不是JSON。您的stripe_charge.php
请求几乎肯定会返回一个HTML页面,而不是您期望的JSON。当您尝试return result.json()
时发生错误。您需要检查网络响应并调试服务器代码。
查看此处:https://www.codeproject.com/Tips/1239019/Unexpected-token-in-JSON-at-position
发布于 2021-03-02 03:07:33
这可能是因为您已将代码放在自定义文件夹中。我只需在checkout.html中删除fetch("/create-checkout-session.php", {method: "POST",})
中的"/“即可。
https://stackoverflow.com/questions/63647002
复制相似问题