我正在将Symfony与PayumBundle和payum-redsys一起使用,以便通过西班牙语Redsys网关接受付款。
每次付款尝试(无论成功与否),Redsys都会向网址发送通知。我想抓住这个通知并根据其有效负载采取行动(付款是否成功?哪个订单号?等等)。例如,假设付款成功,我想在数据库中标记相应的订单,否则我想记录错误。类似的东西:
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
处理通知请求,它会执行自动令牌验证,参数解码等,这是完美的但是我看不到如何执行我自己的自定义操作(参见上面的代码),因此这个问题的标题。
答案 0 :(得分:0)
Payum似乎支持在PayumEvents中看到网关上的事件。传递的事件基本上只包含Context,您需要从中收集所需的信息。您可能希望查看此上下文中的操作,尤其是CapturePaymentAction和Request?这一切如何联系在一起对我来说并不清楚,因为我基本上是从源代码中解读这个。
如果您不想弄清楚所有事件的内容,您可以创建一个侦听相应事件的侦听器,然后使用xdebug或var_dump从事件中读出数据并从那里继续。基本上,事件监听器应该确保您处于正确的操作中,获取Ds_Order
和Ds_Date
(可能来自请求),然后您可以添加一个类似上面发布的片段。< / p>
如果您不熟悉Symfony的事件系统,我建议您阅读文档:
编辑:此外,Payum还提供了一些文档如何处理事件:https://github.com/Payum/Payum/blob/master/docs/event-dispatcher.md