2016-03-27 7 views
0

Wir integrieren SagePay mithilfe der Serverintegrationsmethode.Behandlung von Postbenachrichtigungen, die mehr als 20 Sekunden dauern können

Die Benachrichtigung POST von SagePay ruft zurück zu einem PHP-Skript unserer Seite.

Unser PHP-Callback muss mehrere Methoden auf einem externen Webservice aufrufen.

Manchmal dauert unser Callback-Skript aufgrund der Netzwerklatenz mehr als 20 Sekunden. SagePay mag dies nicht und gibt einen neuen Benachrichtigungs-POST erneut aus. Dies führt dazu, dass unser Rückruf letztendlich zweimal oder mehr läuft, was weniger als ideal ist (sendet mehrere Bezahlungs-E-Mails usw.). Grundsätzlich gibt SagePay Benachrichtigungen aus, bis es in weniger als 20 Sekunden eine Antwort erhält.

Wir können nicht einfach die letzte POST-Anfrage von SagePay ignorieren, da sie alle vorherigen Benachrichtigungen "vergessen" und eine Antwort von der letzten erhalten möchten. Wir können auch nichts über die Netzwerklatenz machen.

Hat jemand einen Ratschlag, was in einer solchen Situation zu tun ist?

Antwort

1

Das erste, was Ihr Notification Callback tun könnte, ist die Transaktionstabelle zu überprüfen und wenn nicht bereits aktualisiert, dann aktualisieren Sie die Transaktionstabelle mit der Nachricht und fahren mit Ihrer Geschäftsabwicklung fort oder verwerfen den wiederholten Aufruf. Mir war nicht bewusst, dass Sagepay nur eine Antwort vom zuletzt ausgegebenen Notification Callback akzeptierte und dies wird nicht im Integrationsleitfaden erwähnt.

Sie sollten jedoch immer noch versuchen, es zu beschleunigen. Denken Sie darüber nach, wie Sie Ihre E-Mails jede Minute in einem cron/geplanten Job senden können, damit Ihre Kunden nicht warten müssen, bis Ihre Drittanbieter antworten. Anstatt E-Mails in Ihrem Benachrichtigungs-Callback zu senden, können Sie einfach Zeilen zu einer email_queue-Tabelle hinzufügen, die später vom Cron-Job verarbeitet werden.

+0

Dank Ian, Speichern der Nachricht und dann mit der Verarbeitung fortfahren würde nicht funktionieren. SagePay sagt: "Wenn Ihr Server nicht auf den Benachrichtigungsposten reagiert, senden wir einen weiteren Versuch. Ihr Server muss auf den neuesten Benachrichtigungspost antworten, der von Sage Pay gesendet wurde. Alle Antworten auf ältere bis Benachrichtigungs-Posts werden von Sage Pay ignoriert. ' Am Ende haben wir es geschafft, die Anrufe etwas zu beschleunigen, was geholfen hat. Wir müssen warten, bis die Web-Service-Aufrufe ausgeführt werden, um zu wissen, ob SagePay "ok" zurückgegeben wird oder nicht. – CJD