基本Stripe集成无法加载付款页面

时间:2019-04-18 07:51:46

标签: php stripe-payments

我正在使用服务器快速入门示例将用户发送到Stripe进行付款

https://stripe.com/docs/payments/checkout/server

返回所需的会话ID,我将其发送给Stripe。但是付款页面无法加载。

我已将我的API密钥交换为XXXXX。

将PHP设置为显示所有错误,并且不存在任何错误。

三次检查我的代码是否与集成示例匹配(进行了明显的必要修改)

检查了我的Stripe帐户。

在头

<script src="https://js.stripe.com/v3/"></script>

在PHP

require_once('stripe-php-6.31.5/init.php');

\Stripe\Stripe::setApiKey("pk_test_XXXXXXXXXXXXXXXXXXXXXXX");

$object = \Stripe\Checkout\Session::create([
        'success_url' => 'https://www.example.com/success',
        'cancel_url' => 'https://www.example.com/cancel',
        'payment_method_types' => ['card'],
        'line_items' => [[
        'amount' => 500,
        'currency' => 'gbp',
        'name' => 'T-shirt',
        'description' => 'Comfortable cotton t-shirt',
        'images' => ['https://www.example.com/t-shirt.png'],
        'quantity' => 1,
    ]]
]);

$session_id = $object->id;

if ($session_id) {

    echo "<script>
          var stripe = Stripe('pk_test_XXXXXXXXXXXXXXXXXXXXXXX');
          stripe.redirectToCheckout({
          sessionId: '{{" . $session_id . "}}'
          }).then(function (result) {
          });
          </script>";

} else {

    echo 'No Session ID!';

}

Stripe付款页面应该加载。

此外,一旦我拥有了session_id,javascript就会变成这样

stripe.redirectToCheckout({
                sessionId: 
'{{cs_KmeIFgWSfN5GW6tP2e5IQ0Vb9EA0q3pWGHZNoDfFKAdcc6kW7DwsM6dAbhQ30}}'
            }).then(function (result) {
                // If `redirectToCheckout` fails due to a browser or network
                // error, display the localized error message to your customer
                // using `result.error.message`.
            });

然后用户会看到此页面

<!DOCTYPE html>
<html>
<head>
    <title>KP Balance and Purchase</title>
    <script src="https://js.stripe.com/v3/"></script>

    <script>
        <!--
        function checkout(session_id) {

            var stripe = Stripe('pk_test_yLz5iASFgRnotoAQc79miQGz');

            stripe.redirectToCheckout({
                sessionId: '{{cs_KmeIFgWSfN5GW6tP2e5IQ0Vb9EA0q3pWGHZNoDfFKAdcc6kW7DwsM6dAbhQ30}}'
            }).then(function (result) {
                // If `redirectToCheckout` fails due to a browser or network
                // error, display the localized error message to your customer
                // using `result.error.message`.
            });

            }

        //-->
</script>

</head>
<body>

<form>
    <input type="button" onclick="checkout()" value="Buy Now!" />
</form>

</body>
</html>

2 个答案:

答案 0 :(得分:4)

  

此外,一旦我拥有了session_id,javascript就会变成这样

stripe.redirectToCheckout({
                sessionId: '{{cs_KmeIFgWSfN5GW6tP2e5IQ0Vb9EA0q3…kW7DwsM6dAbhQ30}}'

{{CHECKOUT_SESSION_ID}}通常用于表示技术文档中的“这是一个占位符”,但这并不意味着您应该在实际值中包括花括号。

您的sessionId: '{{cs_KmeI…Q30}}'实际上应该只是sessionId: 'cs_KmeI…Q30'

答案 1 :(得分:-2)

我已经为此苦苦挣扎了好几天,甚至向Stripe请求帮助。我终于得到它的工作。

没有大括号,但也没有引号仅将变量名分配给服务器回复时给您的变量。这就是从id返回的数组的\Stripe\Checkout\Session::create([..])

在您的示例中,它将是 PHP 中的session_id JS 中的sessionId。这意味着您的sessionId: '{{cs_KmeI…Q30}}'实际上应该只是sessionId: 'cs_KmeI…Q30'

Whoopi ..最终加载了结帐页面! :O)

编辑:对不起,但是这是14小时工作日的结束。我的眼睛受伤了,我为此感到头痛。大家早上好。

由于会话易变,因此不想将实际的硬编码会话ID值放在单引号中。一旦该会话到期或启动了用于不同付款的其他会话,则无法使用“ examp123le0fID”。因此,我们要使用分配的动态值。该变量不应包含在任何内容中,不能包含任何花括号,不带引号。

在付款文件初始化时,我使用Stripe返回给我们的数组为会话ID创建了一个变量。我在PHP中所做的,因为这就是我在本节代码中所使用的。然后,我在主体部分之后添加了一个脚本,该脚本将该值(变量)分配给新的Java变量。之后,我立即添加了一个脚本,该脚本将java变量传递给包含Stripe java重定向代码的java文件。在其中,我使用const将该变量分配给新名称,然后将其传递给重定向代码本身。这可能是很长的路要走。我不擅长Java,Jason,Ajax等,并且已经进行了超过10年的实际编程,但是重要的是这种方法对我们有效。

因此,在我们的donation.php文件中,我们具有:

                           $session = \Stripe\Checkout\Session::create([
                            'payment_method_types' => ['card'],
                            'line_items' => [[
                              'name' => 'Custom t-shirt',
                              'description' => 'Your custom designed t-shirt',
                              'amount' => 5000, /* order.amount */
                              'currency' => 'usd',
                              'quantity' => 1,
                            ]],
                            'success_url' => 'https://example.com/success',
                            'cancel_url' => 'https://example.com/cancel',
                          ]);

                        $stripeSession = array($session);
                        $sessId = ($stripeSession[0]['id']);

然后在同一文件的正文结尾之后,我将其放置:

<script type="text/javascript"> var ssId = "<?php echo $sessId ?>";</script> 

<script src="./client.js"></script>

其中client是包含Stripe重定向代码的js文件。在该文件中,我们有以下内容:

const stripe = Stripe('pk_test_UKRcYdXTmraCEZspx8PE7NzB00QZyoUXp3');
const checkout_Id = (ssId);

和Stripe重定向:

 stripe.redirectToCheckout({
 sessionId: checkout_Id,
   });

然后返回了带有付款部分的整页结帐表格。