使用Payum对网关通知执行自定义操作

时间:2017-09-04 14:27:36

标签: php symfony payum

我正在将Symfony与PayumBundlepayum-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处理通知请求,它会执​​行自动令牌验证,参数解码等,这是完美的但是我看不到如何执行我自己的自定义操作(参见上面的代码),因此这个问题的标题。

1 个答案:

答案 0 :(得分:0)

Payum似乎支持在PayumEvents中看到网关上的事件。传递的事件基本上只包含Context,您需要从中收集所需的信息。您可能希望查看此上下文中的操作,尤其是CapturePaymentActionRequest?这一切如何联系在一起对我来说并不清楚,因为我基本上是从源代码中解读这个。

如果您不想弄清楚所有事件的内容,您可以创建一个侦听相应事件的侦听器,然后使用xdebug或var_dump从事件中读出数据并从那里继续。基本上,事件监听器应该确保您处于正确的操作中,获取Ds_OrderDs_Date(可能来自请求),然后您可以添加一个类似上面发布的片段。< / p>

如果您不熟悉Symfony的事件系统,我建议您阅读文档:

编辑:此外,Payum还提供了一些文档如何处理事件:https://github.com/Payum/Payum/blob/master/docs/event-dispatcher.md