Как работать с webhook-ами?

Здравствуйте.

На сайте 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
spoiler

5e3abdda7428d249018621.png

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 ?

Спасибо!
  • Вопрос задан
  • 1346 просмотров
Решения вопроса 1
mad_maximus
@mad_maximus
Вы уже написали "процесс принятия" вебхука. Вебхук - это когда сторонний сайт шлет запрос на ваш сайт и ждет от вас (чаще всего) простого 'ok' в ответ на то, что вы приняли успешно вебхук. Дальше вы уже работаете с документацией страйпа. Там можно получить статус платежа.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы