Здравствуйте.
На сайте intaxi.si пытаюсь сделать следующее:
Оплата на сайте происходит через Stripe. Создается сессия, редиректит на stripe и при успешной/неуспешной оплате редиректит на success или error. Это работает.
Нужно добавить пользователю возможность (на десктопе) произвести оплату через сканирование QR кода.
1. Во время чекаута генерируем URL оплаты.
2. URL используем для генерации QR кода который пользователь откроет на смартфоне.
3. Пользователь проводит оплату.
4. На телефоне нужно показать success/error page.
4a. На десктопе нужно поймать статус успешной оплаты (я так понимаю это можно сделать через webhook)
4b. На десктопе показать success/error page.
В Stripe есть документация которая описывает webhook
https://stripe.com/docs/webhooks
Но так как я с ними на работал, не могу понять логики :/
Соответственно что сделал:
1. В Stripe dashboard создал endpoint на страничку
https://intaxi.si/vendor/check-payment.php
2. В check-payment.php написал код с примера
spoiler
require("autoload.php");
// Set your secret key: remember to change this to your live secret key in production
// See your keys here: https://dashboard.stripe.com/account/apikeys
\Stripe\Stripe::setApiKey('sk_live_lfKxVo45GfJnq4b2C7M00Y96Ry');
// You can find your endpoint's secret in your webhook settings
$endpoint_secret = 'whsec_0WmnjFilEdqjugtuhzJhvol7WWdHiarg';
$payload = @file_get_contents('php://input');
$sig_header = $_SERVER['HTTP_STRIPE_SIGNATURE'];
$event = null;
try {
$event = \Stripe\Webhook::constructEvent(
$payload, $sig_header, $endpoint_secret
);
} catch(\UnexpectedValueException $e) {
// Invalid payload
http_response_code(400);
exit();
} catch(\Stripe\Exception\SignatureVerificationException $e) {
// Invalid signature
http_response_code(400);
exit();
}
// Handle the checkout.session.completed event
if ($event->type == 'checkout.session.completed') {
$session = $event->data->object;
// Fulfill the purchase...
handle_checkout_session($session);
}
http_response_code(200);
Я понимаю что где то, что то упускаю.
Как принять webhook, получить статус "checkout.session.completed", и в зависимости от статуса направить пользователя на success или error ?
Спасибо!