Stripe php integration Error: ReferenceError: sessionId is not defined

Stripe php integration Error: ReferenceError: sessionId is not defined

我无法将 stripe 的预构建支付网关集成到我的项目中。

我正在编写非常简单的 Eshop(没有 login/registration 和购物车),只是一个简单的项目,使用表单和条纹结账作为支付方式...

我一直在关注官方的 stripe 文档,但我很难找到如何将他们的“简单的预构建结账页面”实现为程序的答案 PHP。

目前我遇到了这个错误...所提供的代码是我从他们的官方文档中使用的代码“仍然收到错误 ReferenceError: sessionId is not defined in the console in devtools://

还有 IDK 如何在没有 PHP 框架(例如 Slim/Laravel)的情况下在我的服务器上配置端点...配置端点时,stripe 提供的所有示例都使用 Slim 框架....有什么想法吗?

<?php
//config PHP 

require_once("vendor/autoload.php");

// === SET UP STRIPE PAYMENT GATEWAY ===
$stripe = [
    "secret_key"      => "sk_test_4eC39HqLyjWDarjtT1zdp7dc",
    "publishable_key" => "pk_test_TYooMQauvdEDq54NiTphI7jx",
];

\Stripe\Stripe::setApiKey($stripe['secret_key']);
?>
<?php

//create-checkout-session.php

require_once '_includes/config.php';

// ?session_id={CHECKOUT_SESSION_ID} means the redirect will have the session ID set as a query param
$checkout_session = \Stripe\Checkout\Session::create([
    'success_url' => 'http://localhost:8888/Avanza---Eshop/success.php?session_id={CHECKOUT_SESSION_ID}',
    'cancel_url' => 'http://localhost:8888/Avanza---Eshop/canceled.php',
    'payment_method_types' => ['card'], //, 'alipay'
    'mode' => 'payment',
    'line_items' => [[
        'amount' => 2000,
        'currency' => 'usd',
        'name' => 'mikina',
        'quantity' => 1,
    ]]
]);

header('Content-type: application/json');
echo json_encode(['sessionId' => $checkout_session['id']]);
<!--order.php actual page that will be displayed to users-->

<button style="width: 100px; height: 100px" id="checkout-button"></button>

            <script type="text/javascript">
                // Create an instance of the Stripe object with your publishable API key
                var stripe = Stripe('pk_test_51HjoRfIaBaXJG6udQspXdLRNwMesCriMwZoR7nGCF0hZtu2Zp9FUxCFWwVpwwU4BZs7fTxJtYorVTuoK1vqXp2Uw002r6qvmO7'); // removed for Whosebug post
                var checkoutButton = document.getElementById('checkout-button');

                checkoutButton.addEventListener('click', function() {
                    // Create a new Checkout Session using the server-side endpoint you
                    // created in step 3.
                    fetch('create-checkout-session.php', {
                        method: 'POST',
                    })
                        .then(function(response) {
                            return response.json();
                        })
                        .then(function(session) {
                            return stripe.redirectToCheckout({ sessionId: 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>

我认为您需要将 return stripe.redirectToCheckout({ sessionId: sessionId}); 替换为 return stripe.redirectToCheckout({ sessionId: session.sessionId});

它对我有用。如果您看到更多错误或遇到任何问题,请在浏览器控制台的“网络”选项卡中搜索。

$(function() {
    var stripe = Stripe('<?= Config::STRIPE_PUB_KEY ?>'); // here write: pk_test_5...
    $(document).on('click', '.buy_now_btn', function(e) {
        let id = $(this).attr('id');
        $(this).text('Please wait...');
        $.ajax({
            url: 'action.php',
            method: 'post',
            data: {
                id: id,
                stripe_payment_process: 1
            },
            dataType: 'json',
            success: function(response) {
                console.log(response);
                return stripe.redirectToCheckout({
                    sessionId: response.id
                });
            },
        })
    })
});