Stripe предварительно построил размещенную проверку с ошибкой (неожиданный токен < в JSON в позиции 0) в Opencart

#stripe-payments #opencart #opencart2.3

#stripe-платежи #opencart #opencart2.3

Вопрос:

Недавно я тестировал Stripe предварительно построенную размещенную проверку. Пока, следуя официальным документам, он работает без каких-либо проблем в обычном PHP.

 https://stripe.com/docs/checkout/integration-builder
  

Однако, когда я пытаюсь протестировать его с помощью Opencart 2.3.0.2, я получил синтаксическую ошибку: неожиданный токен < в JSON в позиции 0 .

test.php

 <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_1111111");
var checkoutButton = document.getElementById("checkout-button");

checkoutButton.addEventListener("click", function () {
  fetch("catalog/controller/extension/payment/stripe.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>
  

Stripe.php

 class ControllerExtensionPaymentStripe extends Controller {
    
    
    public function index() {

        require(DIR_SYSTEM . "library/stripe/init.php");
        
        StripeStripe::setApiKey('sk_test_2222222');
        
        $response = array( 
            'status' => 0, 
            'error' => array( 
                'message' => 'Invalid Request!'    
            ) 
        ); 
        
        if ($this->request->server['REQUEST_METHOD'] == 'POST') { 
            $input = file_get_contents('php://input'); 
            $request = json_decode($input);     
        } 
         
        if (json_last_error() !== JSON_ERROR_NONE) { 
            http_response_code(400); 
            echo json_encode($response); 
            exit; 
        } 

        //header('Content-Type: application/json');

        $YOUR_DOMAIN = 'http://localhost/oc_stripe';
        $checkout_session = StripeCheckoutSession::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.php?session_id={CHECKOUT_SESSION_ID}',
          'cancel_url' => $YOUR_DOMAIN . '/cancel.php',
        ]);

        echo json_encode(['id' => $checkout_session->id]);
        
    }
    
}
  

введите описание изображения здесь

Выше приведен скриншот ошибки.

После нажатия кнопки отображается ошибка и не перенаправляется на страницу проверки stripe… Кто-нибудь может помочь? Пожалуйста, посоветуйте. Спасибо!

Комментарии:

1. Подтвердили ли вы (путем регистрации), что возвращаете идентификатор сеанса с вашего серверного сервера? Исходя из ошибки, которую вы видите, кажется, что вам не удается создать сеанс проверки на стороне сервера, и в результате у вас нет действительного session.ID значения при вызове redirectToCheckout на стороне клиента.

2. уже удалось урегулировать. ошибка связана с «выборкой («catalog/controller/extension/payment/stripe.php «)

3. @gosulove как ты это исправил?