【问题标题】:Perform custom operations on gateway notification with Payum使用 Payum 对网关通知执行自定义操作
【发布时间】:2017-09-04 14:27:36
【问题描述】:

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

【问题讨论】:

    标签: php symfony payum


    【解决方案1】:

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

    如果您不想找出所有事件内容,您可以创建一个侦听器来侦听相应的事件,然后使用 xdebug 或 var_dump 从事件中读出数据并从那里继续。基本上,事件侦听器应确保您采取了正确的操作,获取Ds_OrderDs_Date(可能来自请求),然后您可以像上面发布的那样添加一个sn-p。

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

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

    【讨论】:

      猜你喜欢
      • 2014-07-25
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 2017-02-04
      • 2017-11-30
      相关资源
      最近更新 更多