Выполнение пользовательских операций с уведомлением шлюза с помощью Payum

Я использую Symfony с PayumBundle и payum-redsys, чтобы принимать платежи через испанский шлюз Redsys.

После каждой попытки оплаты (успешной или нет) Redsys отправляет уведомление на URL-адрес. Я хочу поймать это уведомление и предпринять действия в соответствии с его полезной нагрузкой (был ли платеж успешным? какой номер заказа? и т. д.). Например, предположим, что если платеж прошел успешно, я хочу пометить соответствующий заказ в базе данных как оплаченный, в противном случае я хочу зарегистрировать ошибку. Что-то типа:

if ($paymentSuccessful) {
    $order = $orderRep->find($notif['Ds_Order']);
    $order->setDatePaid($notif['Ds_Date']);
    $em->flush();
} else {
    $logger->error('Failed payment for order ' . $notif['Ds_Order']);
}

Если я позволю Payum обрабатывать запрос на уведомление с его значением по умолчанию NotifyController, он выполнит автоматическую проверку токена, декодирование параметров и т. д., что идеально, но я не вижу, как выполнить свою собственную пользовательскую операцию (см. код выше), отсюда и название этого вопроса.


person kofkof    schedule 04.09.2017    source источник


Ответы (1)


Похоже, что Payum поддерживает прослушивание событий на шлюзе, как видно из PayumEvents. Передаваемое событие в основном содержит только контекст из которого вам нужно собрать необходимую информацию. Вы, вероятно, захотите посмотреть на действия внутри этого контекста, особенно на CapturePaymentAction и Запрос? Как все это связано, мне не ясно, поскольку я в основном расшифровываю это из исходного кода.

Если вы не хотите разбираться во всех событиях, вы можете просто создать прослушиватель, который прослушивает соответствующее событие, а затем использовать xdebug или var_dump для считывания данных из события и продолжения оттуда. По сути, прослушиватель событий должен убедиться, что вы делаете правильное действие, получить Ds_Order и Ds_Date (вероятно, из запроса), а затем вы можете добавить фрагмент, подобный тому, который вы разместили выше.

Если вы не знакомы с системой событий Symfony, я рекомендую прочитать документацию:

редактировать: также Payum предоставляет некоторую документацию о том, как он работает с событиями: https://github.com/Payum/Payum/blob/master/docs/event-dispatcher.md

person dbrumann    schedule 04.09.2017