#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 как ты это исправил?