Stripe Checkout PHP 导致神秘的 404 错误 OnLoad
Stripe Checkout PHP Causes mysterious 404 Error OnLoad
我很难在本地 xampp 服务器上从 single-checkout-subscription 测试 Stripe Checkout。到目前为止,我有一个 Stripe 帐户,创建了我的测试密钥、产品和价格,安装了 Stripe Cli 并创建了一个测试 webhook,并将它们全部添加到我服务器中的 .env 文件中
DOMAIN="http://localhost/stripe/server/public/"
BASIC_PRICE_ID="price_xxx"
PRO_PRICE_ID="price_xxx"
STATIC_DIR="STATIC_DIR=../../client"
STRIPE_PUBLISHABLE_KEY="pk_test_xxx"
STRIPE_SECRET_KEY="sk_test_xxx"
STRIPE_WEBHOOK_SECRET="1mwhxxx"
但是当我在我的本地主机上测试它时:http://localhost/stripe/server/public/ 我得到了前端,但是当我点击按钮时没有任何反应。它甚至不会转到预建的结帐页面。
我检查了控制台,问题似乎来自我的 config.php
我的 script.js:
上出现两个控制台错误
fetch("/config.php").then(function(json)
这是路由:
我的 config.php > 需要 shared.php > 需要 '..vendor/autoload.php' 并解析 '../conifg/ini' > conifg.ini 包含我的测试键:
stripe_secret_key ="sk_test_444"
stripe_publishable_key = "pk_test_444"
stripe_webhook_secret = "1mw444"
domain = "http://localhost/stripe/server/public/"
basic_price_id = "price_444"
pro_price_id = "price_555"
Script.js 在我的服务器上:
// Create a Checkout Session with the selected plan ID
var createCheckoutSession = function(priceId) {
return fetch("/create-checkout-session.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
priceId: priceId
})
}).then(function(result) {
return result.json();
});
};
// Handle any errors returned from Checkout
var handleResult = function(result) {
if (result.error) {
var displayError = document.getElementById("error-message");
displayError.textContent = result.error.message;
}
};
/* Get your Stripe publishable key to initialize Stripe.js */
fetch("/config.php")
.then(function(result) {
return result.json();
})
.then(function(json) {
var publishableKey = json.publishableKey;
var basicPriceId = json.basicPrice;
var proPriceId = json.proPrice;
var stripe = Stripe(publishableKey);
// Setup event handler to create a Checkout Session when button is clicked
document
.getElementById("basic-plan-btn")
.addEventListener("click", function(evt) {
createCheckoutSession(basicPriceId).then(function(data) {
// Call Stripe.js method to redirect to the new Checkout page
stripe
.redirectToCheckout({
sessionId: data.sessionId
})
.then(handleResult);
});
});
// Setup event handler to create a Checkout Session when button is clicked
document
.getElementById("pro-plan-btn")
.addEventListener("click", function(evt) {
createCheckoutSession(proPriceId).then(function(data) {
// Call Stripe.js method to redirect to the new Checkout page
stripe
.redirectToCheckout({
sessionId: data.sessionId
})
.then(handleResult);
});
});
});
我精通 HTML、Bootstrap、CSS 和一些 PHP 和 JavaScript,但我似乎不会遵循有关如何使 Stripe 订阅结帐工作的困难指示。有人可以指出我正确的方向或告诉我如何修复我的代码。我的假期很紧迫。
首先,出现 404 错误,因为该文件根本不存在。在 localhost 或所有服务器中,如果你在文件名前加上 /
,它会自动变成在主机之后,所以 /config.php
会变成 http://localhost/config.php
。为防止此错误,您应该使用 ./
意外标记 <
表示服务器正在返回 404 文档。
简而言之,在文件名前加一个点,因为我假设这个项目不在根目录中。 (表示项目在http://localhost/projectName
)
// Create a Checkout Session with the selected plan ID
var createCheckoutSession = function(priceId) {
return fetch("./create-checkout-session.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
priceId: priceId
})
}).then(function(result) {
return result.json();
});
};
和
/* Get your Stripe publishable key to initialize Stripe.js */
fetch("./config.php")
.then(function(result) {
return result.json();
})
.then(function(json) {
var publishableKey = json.publishableKey;
var basicPriceId = json.basicPrice;
var proPriceId = json.proPrice;
var stripe = Stripe(publishableKey);
// Setup event handler to create a Checkout Session when button is clicked
document
.getElementById("basic-plan-btn")
.addEventListener("click", function(evt) {
createCheckoutSession(basicPriceId).then(function(data) {
// Call Stripe.js method to redirect to the new Checkout page
stripe
.redirectToCheckout({
sessionId: data.sessionId
})
.then(handleResult);
});
});
// Setup event handler to create a Checkout Session when button is clicked
document
.getElementById("pro-plan-btn")
.addEventListener("click", function(evt) {
createCheckoutSession(proPriceId).then(function(data) {
// Call Stripe.js method to redirect to the new Checkout page
stripe
.redirectToCheckout({
sessionId: data.sessionId
})
.then(handleResult);
});
});
});
我很难在本地 xampp 服务器上从 single-checkout-subscription 测试 Stripe Checkout。到目前为止,我有一个 Stripe 帐户,创建了我的测试密钥、产品和价格,安装了 Stripe Cli 并创建了一个测试 webhook,并将它们全部添加到我服务器中的 .env 文件中
DOMAIN="http://localhost/stripe/server/public/"
BASIC_PRICE_ID="price_xxx"
PRO_PRICE_ID="price_xxx"
STATIC_DIR="STATIC_DIR=../../client"
STRIPE_PUBLISHABLE_KEY="pk_test_xxx"
STRIPE_SECRET_KEY="sk_test_xxx"
STRIPE_WEBHOOK_SECRET="1mwhxxx"
但是当我在我的本地主机上测试它时:http://localhost/stripe/server/public/ 我得到了前端,但是当我点击按钮时没有任何反应。它甚至不会转到预建的结帐页面。
我检查了控制台,问题似乎来自我的 config.php
fetch("/config.php").then(function(json)
这是路由:
我的 config.php > 需要 shared.php > 需要 '..vendor/autoload.php' 并解析 '../conifg/ini' > conifg.ini 包含我的测试键:
stripe_secret_key ="sk_test_444"
stripe_publishable_key = "pk_test_444"
stripe_webhook_secret = "1mw444"
domain = "http://localhost/stripe/server/public/"
basic_price_id = "price_444"
pro_price_id = "price_555"
Script.js 在我的服务器上:
// Create a Checkout Session with the selected plan ID
var createCheckoutSession = function(priceId) {
return fetch("/create-checkout-session.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
priceId: priceId
})
}).then(function(result) {
return result.json();
});
};
// Handle any errors returned from Checkout
var handleResult = function(result) {
if (result.error) {
var displayError = document.getElementById("error-message");
displayError.textContent = result.error.message;
}
};
/* Get your Stripe publishable key to initialize Stripe.js */
fetch("/config.php")
.then(function(result) {
return result.json();
})
.then(function(json) {
var publishableKey = json.publishableKey;
var basicPriceId = json.basicPrice;
var proPriceId = json.proPrice;
var stripe = Stripe(publishableKey);
// Setup event handler to create a Checkout Session when button is clicked
document
.getElementById("basic-plan-btn")
.addEventListener("click", function(evt) {
createCheckoutSession(basicPriceId).then(function(data) {
// Call Stripe.js method to redirect to the new Checkout page
stripe
.redirectToCheckout({
sessionId: data.sessionId
})
.then(handleResult);
});
});
// Setup event handler to create a Checkout Session when button is clicked
document
.getElementById("pro-plan-btn")
.addEventListener("click", function(evt) {
createCheckoutSession(proPriceId).then(function(data) {
// Call Stripe.js method to redirect to the new Checkout page
stripe
.redirectToCheckout({
sessionId: data.sessionId
})
.then(handleResult);
});
});
});
我精通 HTML、Bootstrap、CSS 和一些 PHP 和 JavaScript,但我似乎不会遵循有关如何使 Stripe 订阅结帐工作的困难指示。有人可以指出我正确的方向或告诉我如何修复我的代码。我的假期很紧迫。
首先,出现 404 错误,因为该文件根本不存在。在 localhost 或所有服务器中,如果你在文件名前加上 /
,它会自动变成在主机之后,所以 /config.php
会变成 http://localhost/config.php
。为防止此错误,您应该使用 ./
意外标记 <
表示服务器正在返回 404 文档。
简而言之,在文件名前加一个点,因为我假设这个项目不在根目录中。 (表示项目在http://localhost/projectName
)
// Create a Checkout Session with the selected plan ID
var createCheckoutSession = function(priceId) {
return fetch("./create-checkout-session.php", {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({
priceId: priceId
})
}).then(function(result) {
return result.json();
});
};
和
/* Get your Stripe publishable key to initialize Stripe.js */
fetch("./config.php")
.then(function(result) {
return result.json();
})
.then(function(json) {
var publishableKey = json.publishableKey;
var basicPriceId = json.basicPrice;
var proPriceId = json.proPrice;
var stripe = Stripe(publishableKey);
// Setup event handler to create a Checkout Session when button is clicked
document
.getElementById("basic-plan-btn")
.addEventListener("click", function(evt) {
createCheckoutSession(basicPriceId).then(function(data) {
// Call Stripe.js method to redirect to the new Checkout page
stripe
.redirectToCheckout({
sessionId: data.sessionId
})
.then(handleResult);
});
});
// Setup event handler to create a Checkout Session when button is clicked
document
.getElementById("pro-plan-btn")
.addEventListener("click", function(evt) {
createCheckoutSession(proPriceId).then(function(data) {
// Call Stripe.js method to redirect to the new Checkout page
stripe
.redirectToCheckout({
sessionId: data.sessionId
})
.then(handleResult);
});
});
});