简体   繁体   English

条纹结账集成

[英]Stripe Checkout Integration

I'm trying to do the simplest possible thing: sending the user to Stripe's hosted checkout page with 1 product.我正在尝试做最简单的事情:将用户发送到带有 1 个产品的 Stripe 托管结帐页面。

None of Stripe's examples seem to work, so far what I've got is: Stripe 的示例似乎都不起作用,到目前为止我所得到的是:

PHP create-checkout-session.php PHP create-checkout-session.php

require_once 'shared.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' => $domain . '/success.html?session_id={CHECKOUT_SESSION_ID}',
    'cancel_url' => $domain . '/canceled.html',
    'payment_method_types' => ['card'], //, 'alipay'
    'mode' => 'payment',
    'line_items' => [[
        'amount' => $price,
        'currency' => 'usd',
        'name' => $product,
        'quantity' => 1,
    ]]
  ]);
  
echo json_encode(['sessionId' => $checkout_session['id']]);

That PHP page correctly returns a session ID.该 PHP 页面正确返回会话 ID。

HTML HTML

<html>
  <head>
    <title>Buy cool new product</title>
    <script src="https://js.stripe.com/v3/"></script>
  </head>
  <body>
    <button id="checkout-button">Checkout</button>

    <script type="text/javascript">
      // Create an instance of the Stripe object with your publishable API key
      var stripe = Stripe('pk_test_key'); // removed for Stackoverflow 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: session.id });
        })
        .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>
  </body>
</html>

When I click the button nothing happens and I get this error on Chrome devtools:当我单击该按钮时,没有任何反应,并且在 Chrome devtools 上出现此错误:

Error: IntegrationError: stripe.redirectToCheckout: You must provide one of lineItems, items, or sessionId.
    at new t (https://js.stripe.com/v3/:1:11100)
    at Lu (https://js.stripe.com/v3/:1:152624)
    at qu (https://js.stripe.com/v3/:1:152923)
    at Fu (https://js.stripe.com/v3/:1:153599)
    at Bu (https://js.stripe.com/v3/:1:153713)
    at e.redirectToCheckout (https://js.stripe.com/v3/:1:154128)
    at https://emu.net/stripetest/test.html:24:25

I don't understand this error.我不明白这个错误。 It seems like the sessionId is not being passed correctly.似乎 sessionId 没有被正确传递。 The HTML code came directly from the Stripe doc at: https://stripe.com/docs/payments/checkout/accept-a-payment HTML 代码直接来自 Stripe 文档: https : //stripe.com/docs/payments/checkout/accept-a-payment

To be honest at this point I don't know where I'm supposed to look.老实说,在这一点上我不知道我应该看哪里。 None of the Stripe examples seem to work. Stripe 示例似乎都不起作用。 Anyone have any idea what I'm doing wrong?任何人都知道我做错了什么?

Judging by the structure of session you need to pass从你需要通过的session的结构来看

{ sessionId: session.sessionId }

not不是

{ sessionId: session.id }

take a look at the error message:看一下错误信息:

Error: IntegrationError: stripe.redirectToCheckout: You must provide one of lineItems, items, or sessionId .错误:IntegrationError:stripe.redirectToCheckout:您必须提供 lineItems、items 或sessionId 之一 at new t ( https://js.stripe.com/v3/:1:11100 ) enter code here在新的 t ( https://js.stripe.com/v3/:1:11100 ) 在此处输入代码

You need to send back "sessionId: session.sessionId".您需要发回“sessionId:session.sessionId”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM