php - 创建结帐 Session.php 404 未找到
问题描述
<?php
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('sk_test_51HhrRSFFkuyUh5wxaaS0l0yn5S..........R0nzVUJ23jePY6iXme2bOwxtuImLrWv9QilqW4umYvRCIo00vHKf5mKW');
header('Content-Type: application/json');
$YOUR_DOMAIN = 'http://localhost:4242';
$checkout_session = \Stripe\Checkout\Session::create([
'payment_method_types' => ['card'],
'line_items' => [[
'price_data' => [
'currency' => 'usd',
'unit_amount' => 2000,
'product_data' => [
'name' => 'Stubborn Attachments',
'images' => ["https://i.imgur.com/EHyR2nP.png"],
],
],
'quantity' => 1,
]],
'mode' => 'payment',
'success_url' => $YOUR_DOMAIN . '/success.html',
'cancel_url' => $YOUR_DOMAIN . '/cancel.html',
]);
echo json_encode(['id' => $checkout_session->id]);
<!DOCTYPE html>
<html>
<head>
<title>Buy cool new product</title>
<link rel="stylesheet" href="style.css">
<script src="https://polyfill.io/v3/polyfill.min.js?version=3.52.1&features=fetch"></script>
<script src="https://js.stripe.com/v3/"></script>
</head>
<body>
<section>
<div class="product">
<img
src="https://i.imgur.com/EHyR2nP.png"
alt="The cover of Stubborn Attachments"
/>
<div class="description">
<h3>Stubborn Attachments</h3>
<h5>$20.00</h5>
</div>
</div>
<button id="checkout-button">Checkout</button>
</section>
</body>
<script type="text/javascript">
// Create an instance of the Stripe object with your publishable API key
var stripe = Stripe("pk_test_51HhrRSFFkuyUh5wxONDavkFRWnPlNcJ.............rOT7xce3CyW1fTnClCUsVJ2kctOtuJ0hFdf5004x4Gs2YC");
var checkoutButton = document.getElementById("checkout-button");
checkoutButton.addEventListener("click", function () {
fetch("/create-checkout-session.php", {
method: "POST",
})
.then(function (response) {
return response.json();
})
.then(function (session) {
//return stripe.redirectToCheckout({ sessionId: session.id });
return stripe.redirectToCheckout({ sessionId: session.sessionId });
})
.then(function (result) {
// If redirectToCheckout fails due to a browser or network
// error, you should display the localized error message to your
// customer using error.message.
if (result.error) {
alert(result.error.message);
}
})
.catch(function (error) {
console.error("Error:", error);
});
});
</script>
</html>
我已经从这里https://stripe.com/docs/checkout/integration-builder下载了上面的代码,并将文件放在我的 Xampp 文件夹中的 htdocs 下,所以每当我运行 http://localhost/my-projects/stripe -payments-prebuilt/checkout.html 所以它向我显示了结帐页面,但是当我单击结帐按钮时,它显示“checkout.html:30 POST http://localhost/create-checkout-session.php 404 (未找到)”我的意思是我做错了什么,我可以运行其他项目,所以这意味着没有服务器问题,那么可能是什么问题?
解决方案
首先,有一个 404 错误,因为该文件从未存在过。在 localhost 或所有服务器中,如果您/
在文件名之前放置 a ,它将自动成为主机之后,因此/config.php
将成为http://localhost/config.php
. 为防止出现此错误,您应该使用./
意外的令牌<
意味着服务器正在返回 404 文档。
简而言之,在文件名前加一个点,因为我假设这个项目不在根目录中。(表示项目在http://localhost/projectName
)
<?php
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey('sk_test_51HhrRSFFkuyUh5wxaaS0l0yn5S..........R0nzVUJ23jePY6iXme2bOwxtuImLrWv9QilqW4umYvRCIo00vHKf5mKW');
header('Content-Type: application/json');
$YOUR_DOMAIN = 'http://localhost';
$checkout_session = \Stripe\Checkout\Session::create([
'payment_method_types' => ['card'],
'line_items' => [[
'price_data' => [
'currency' => 'usd',
'unit_amount' => 2000,
'product_data' => [
'name' => 'Stubborn Attachments',
'images' => ["https://i.imgur.com/EHyR2nP.png"],
],
],
'quantity' => 1,
]],
'mode' => 'payment',
'success_url' => $YOUR_DOMAIN . '/success.html',
'cancel_url' => $YOUR_DOMAIN . '/cancel.html',
]);
echo json_encode(['id' => $checkout_session->id]);
<!DOCTYPE html>
<html>
<head>
<title>Buy cool new product</title>
<link rel="stylesheet" href="style.css">
<script src="https://polyfill.io/v3/polyfill.min.js?version=3.52.1&features=fetch"></script>
<script src="https://js.stripe.com/v3/"></script>
</head>
<body>
<section>
<div class="product">
<img
src="https://i.imgur.com/EHyR2nP.png"
alt="The cover of Stubborn Attachments"
/>
<div class="description">
<h3>Stubborn Attachments</h3>
<h5>$20.00</h5>
</div>
</div>
<button id="checkout-button">Checkout</button>
</section>
</body>
<script type="text/javascript">
// Create an instance of the Stripe object with your publishable API key
var stripe = Stripe("pk_test_51HhrRSFFkuyUh5wxONDavkFRWnPlNcJ.............rOT7xce3CyW1fTnClCUsVJ2kctOtuJ0hFdf5004x4Gs2YC");
var checkoutButton = document.getElementById("checkout-button");
checkoutButton.addEventListener("click", function () {
fetch("./create-checkout-session.php", {
method: "POST",
})
.then(function (response) {
return response.json();
})
.then(function (session) {
//return stripe.redirectToCheckout({ sessionId: session.id });
return stripe.redirectToCheckout({ sessionId: session.sessionId });
})
.then(function (result) {
// If redirectToCheckout fails due to a browser or network
// error, you should display the localized error message to your
// customer using error.message.
if (result.error) {
alert(result.error.message);
}
})
.catch(function (error) {
console.error("Error:", error);
});
});
</script>
</html>
推荐阅读
- react-native - 关于反应原生的 podfile 问题
- android - 如何确保为每个设备创建一个房间,而不是每次启动应用程序时创建一个新实例
- python - 聚合函数的分组和过滤
- mysql - 如何使用python访问位于不同位置(非本地)的另一台机器上的MySQL数据库
- angular - 使用 ngx-translate/core 进行角度翻译
- excel - 如何在多列中的公式中查找特定文本(基于列标题名称)并替换为不同的文本
- c# - 如何从一组源文件为多个框架编译 C# 代码
- php - 将 foreach 中的值连接到输入值属性中
- r - glmnet 和制作矩阵有问题吗?
- angular - 具有多个条件的Angular 4数据过滤器