Geschichte
Wir verwenden derzeit ein sogenanntes Weiterleitungsmodell für unsere Online-Zahlungen (bei dem Sie den Zahler an ein Zahlungsgateway senden, wo er seine Zahlungsdetails eingibt - das Gateway führt ihn dann zu einer Rückrufseite für Erfolg / Misserfolg zurück). Das ist einfach und unkompliziert, aber leider ziemlich unpraktisch und manchmal verwirrend für unsere Kunden (Verlassen der Website, Ändern ihrer Kreditkartendaten durch zusätzliches Anmelden auf einer anderen Website usw.).
Absichts- und Problembeschreibung
Wir beabsichtigen nun, durch den Austausch von XML-Anforderungen und -Antworten auf einen integrierten Ansatz umzusteigen. Mein Problem ist, wie ich mit all (oder eher den meisten) Dingen umgehen kann, die während der Verarbeitung passieren können - wenn man bedenkt, dass Einfachheit normalerweise robust ist, während Komplexität fragil ist.
Beispiele
- Benutzerabbruch: Der Benutzer gibt Kreditkartendetails ein und klickt auf Senden. Eine XML-Nachricht an das Gateway des Anbieters wird gesendet und wartet auf eine Antwort. Der Benutzer drückt in seinem Browser auf "Stopp" oder schließt das Fenster.
- ignore_user_abort () in PHP kann eine Option sein - aber ist das zuverlässig?
- Könnte es besser sein, den Benutzer auf eine "Bitte warten" -Seite umzuleiten, die wiederum eine AJAX- oder andere Anfrage an den tatsächlichen Prozessor öffnet, der nicht auf die Verbindung angewiesen ist?
- Datenbank geht weg
- klingt überkompliziert, aber mit z. B. einem Webserver in den USA und einer Datenbank in Großbritannien ist es passiert und wird erneut passieren: Der Benutzer klickt seine Bestellung zusammen, die Zahlungsanforderung wurde an den Anbieter gesendet, aber die Antwort kann nicht im gespeichert werden Datenbank. Welchen Ansatz könnte ich verwenden, um mit PHP eine SQL wie "Transaktion" zu starten, die je nach den einzelnen Schritten erst am Ende festgeschrieben oder zurückgesetzt wird? Sollte dann weder ein Commit noch ein Rollback stattgefunden haben, könnte ich den Benutzer sozusagen "sperren", um zu verhindern, dass er erneut zahlt, oder um Zahlungen nicht ordnungsgemäß zu berücksichtigen - aber wie?
- Und was muss ich technisch noch beachten? Keines der Integrationsbeispiele von z. B. Worldpay, Realex oder SagePay bietet einen Einblick, und entweder meine Suchmaschine oder meine Suchbegriffe waren nicht gut genug, um die Gedanken anderer zu finden.
Vielen Dank für jeden Einblick, wie Sie dies angehen würden!