<?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 (Not Found)" Я имею в виду, что я сделал неправильно, я могу запускать другие проекты, значит, проблем с сервером нет, так в чем может быть проблема?
Прежде всего, возникает ошибка 404, потому что файла никогда не было. На локальном хосте или на всех серверах, если вы поместите /
перед именем файла, оно автоматически станет после хоста, поэтому /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>
Не могли бы вы сказать мне, почему я сталкиваюсь с этой ошибкой в ответе SyntaxError: Unexpected token < in JSON at position 0
Я упоминал об этом выше. Вы уверены, что создали файл create-checkout-session.php
?
Да, это в моей папке
Приведенный выше php-файл — это тот же файл create-checkout-session.php, а HTML-файл — checkout.html.
Обязательно помните, что всегда