2017-09-04 3 views
0

Ich benutze Symfony mit PayumBundle und payum-redsys, um die Zahlung über die spanische Redsys-Gateway zu akzeptieren.Führen Sie benutzerdefinierte Operationen auf Gateway Benachrichtigung mit Payum

Nach jedem Zahlungsversuch (ob erfolgreich oder nicht) sendet Redsys eine Benachrichtigung an eine URL. Ich möchte diese Benachrichtigung abfangen und Maßnahmen entsprechend ihrer Nutzlast ergreifen (war die Zahlung erfolgreich? Welche Bestellnummer? Usw.). Nehmen wir zum Beispiel an, dass, wenn die Zahlung erfolgreich war, ich den entsprechenden Auftrag als bezahlt in der Datenbank markieren möchte, andernfalls möchte ich den Fehler protokollieren. Etwas wie:

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']); 
} 

Wenn ich ließ Payum die Benachrichtigungsanforderung mit seinem Standard behandeln NotifyController, führt er automatische Token-Validierung, Dekodierung von Parametern usw., die perfekt ist aber Ich kann nicht sehen, wie mein auszuführen eigene benutzerdefinierte Operation (siehe Code oben), daher der Titel dieser Frage.

Antwort

0

Payum scheint das Abhören von Ereignissen auf dem Gateway zu unterstützen, wie in PayumEvents zu sehen ist. Das Ereignis, das herumgereicht wird, enthält im Grunde nur eine Context, von der Sie die Information sammeln müssen, die Sie benötigen. Sie möchten wahrscheinlich die Aktionen in diesem Kontext betrachten, insbesondere die CapturePaymentAction und die Request? Wie das alles zusammenhängt, ist mir nicht klar, da ich das im Grunde aus dem Quellcode entziffere.

Wenn Sie nicht alle Ereignisse des Ereignisses herausfinden möchten, können Sie einfach einen Listener erstellen, der auf das entsprechende Ereignis hört und dann xdebug oder var_dump verwendet, um die Daten des Ereignisses auszulesen und von dort fortzufahren. Im Grunde sollte der Event-Listener sicherstellen, dass Sie in der richtigen Aktion sind, erhalten Sie die und Ds_Date (wahrscheinlich aus der Anfrage) und dann können Sie in ein Snippet wie die, die Sie oben gepostet hinzufügen.

Wenn Sie nicht vertraut sind mit Symfony des Event-System I auf der Dokumentations-Lesung bis empfehlen:

edit: Auch Payum eine Dokumentation bietet, wie es mit Ereignissen befasst außerdem: https://github.com/Payum/Payum/blob/master/docs/event-dispatcher.md

Verwandte Themen