Diese Frage ist ähnlich wie diese , aber mit einer Wendung (so die Antwort akzeptiert für die ältere Frage ist im folgenden Szenario nicht gültig)
Ich habe eine Website für den Verkauf von Tickets (PHP / MySQL). Angenommen, ich habe nur noch ein Ticket:
Ich kann länger warten, aber ich denke nicht, dass dies das Problem im allgemeineren Fall lösen wird. Außerdem, wenn ich das tue, wird es möglich sein, eine Art von DoS zu machen und die Artikel auf Lager für längere Zeit zu sperren.
Was ist der beste Weg, um dieses Szenario zu behandeln?
Alle Zahlungs-Gateways führen ein Postback durch, um Sie (zB) über die Zahlungsreferenz usw. zu informieren. Die meisten werden auch Autorisierungs- / Authentifizierungsinformationen wie CSC / CVV2-Prüfergebnisse zurückgeben, damit Sie (der Händler) das letzte Wort haben ob die Zahlung akzeptiert wird oder nicht.
Nach Erhalt des Postbacks sollten Sie prüfen können, ob das Ticket noch "gesperrt" ist, und wenn nicht, dann eine Zahlungsstornierung über das Zahlungsgateway veranlassen, um die Zahlung zu stornieren. Sie müssen dann eine Nachricht anzeigen "sorry, Timeout überschritten, bitte versuchen Sie es erneut"
Wenn das Gateway keine "Instant-Reversal" -Funktionalität unterstützt, dann werden sie zumindest eine Art von "Leere" -Funktionalität unterstützen, wobei die Gelder niemals wirklich von der Kundenkarte genommen werden, und die Autorisierungssperre automatisch abfällt nach zwei Tagen, obwohl es bei einigen Karten länger dauern kann). Für die (hoffentlich kleine) Anzahl von Transaktionen, die eine Zeitüberschreitung aufweisen, kann dies akzeptabel sein. Es würde sich lohnen, zu überwachen, wie viele Transaktionen auslaufen, so dass die Zeitüberschreitung angepasst werden kann.
Wenn das Ticket nicht mehr gesperrt ist (und wenn das Gateway dies unterstützt), senden Sie alternativ eine Rückerstattungszahlung zurück.
Es ist wahrscheinlich, dass Sie keine Einstiegsseite für ein externes Zahlungsgateway verwenden können und das tun, was Sie versuchen zu tun.
Paypal und viele andere Prozessoren haben eine direkte Webservice-Integrationsroute. Das bedeutet, dass Sie die Zahlungsinformationen auf Ihrer Seite erfassen, sie an Ihren Server gesendet werden und Sie den Web-Service-Anruf tätigen und eine sofortige Antwort vom Prozessor erhalten. (Ich erinnere mich nicht, wie PayPal das Produkt nennt, das das tut, aber es hieß früher PayFlow Pro und wurde von Verisign gekauft.)
Sie sperren also die Tickets nicht, wenn sie in den Einkaufswagen gelegt werden. Ihr Workflow wäre:
Sie müssen sich nicht mit Sperrzeitüberschreitungen befassen. Sie sind nur lange genug gesperrt, um eine gültige Zahlung zu bestätigen.
Sie haben nicht darum gebeten, das Problem zu lösen und gleichzeitig die PCI-Exposition zu verhindern. Da wirst du wahrscheinlich fragen:
Es gibt Prozessoren, mit denen Sie die Zahlungsinformationensammlung in Ihre eigene Seite einbetten können. Es gibt einige, die es Ihnen ermöglichen, ein "Token" zu erhalten, um eine Kartennummer zu ersetzen, so dass Ihr Server niemals eine Kartennummer erhält. Das Token kann dann auf dem serverseitigen Web-Service-Aufruf verwendet werden. Sie bekommen, was Sie brauchen, und Sie müssen sich nicht mit PCI-Problemen rund um den Erhalt von Kartennummern auseinandersetzen.
Wie wäre es mit einer eher sozialen als einer technischen Lösung? Warum sollte es nicht absolut offensichtlich sein, dass ein Ticket freigeschaltet wird, wenn Sie zu lange warten?
Ich denke, du solltest das Ticket nicht blockieren, wenn jemand es in seinen Einkaufswagen legt wie in diesen 5 Minuten. Sie könnten am Ende einige andere Kunden vertreiben ...
Ich schlage vor, dass Sie jedem erlauben, das Ticket in seinen Warenkorb zu legen, es sei denn, jemand nimmt die Zahlung tatsächlich vor und kauft sie. Wenn nun andere zur Kasse gehen, blicke einfach eine Nachricht als "Entschuldigung, du bist spät ... Ticket ausverkauft !!!" und Ticket sollte aus ihrem Warenkorb entfernt werden.
Auf diese Weise wird das Ticket nicht von Ihren Kunden blockiert und das Szenario, dass zwei Personen die Zahlung für dasselbe Ticket tätigen, wird nicht auftreten.
Tags und Links php transactions e-commerce payment payment-gateway