Shop Hosting
Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Rechnung by Sofort, Bestellungen doppelt gespeichert

    AGI

    • modified Team
    • Beiträge: 303
    • Geschlecht:
    Hallo,

    mit eurer Hilfe würde ich gern ein Problem in einem Shop zu lösen, bei dem Bestellungen, bezahlt mit "Rechnung by Sofort", doppelt gespeichert werden.
    Es sind jedoch nicht alle Bestellungen betroffen.

    Es handelt sich um einen modified eCommerce v1.06 rev 4356.
    Es wird das Modul sofort_sofortrechnung eingesetzt, wie es dem Donwload-Paket beiliegt.

    Die jeweils erste Bestellung wird doppelt im Shop gespeichert und per Mail bestätigt.
    Eine darauf folgende, neue Bestellung wird nur einmal gespeichert und bestätigt, sodass ich erst einmal einen Zusammenhang mit einer Session vermute.
    Löschen von Cookies und wechseln des Browsers ändern nichts daran dass, weitere Bestellungen nur einmal gespeichert werden.
    Das Problem tritt erst nach einigen Stunden wieder auf.

    Da doppelte Bestellungen auch per Mail bestätigt werden, habe ich mir ein paar Server-Variablen in die Mails schreiben lassen um zu sehen, welche Scripte für die Bestätigung auslösen.

    Bei der ersten Bestellung werden die Mails von folgenden Scripts ausgelöst:
    1a) /callback/sofort/callback.php wird per POST aufgerufen
    1b) /checkout_process.php wird per GET aufgerufen, ist wohl die Weiterleitung von Sofort.de

    Die 2. Bestellung wird nur noch über die checkout_process.php (per GET) bestätigt.
    Ob ebenfalls die callback.php aufgerufen wurde, kann ich nicht sagen.
    Wenn ja, dann hat diese jetzt erkannt dass die Bestellung schon besteht und nicht erneut gespeichert werden muss.

    An den Bestellnummern fällt mir folgendes auf:
    Bestellung 1a (über callback.php) wird zuerst gespeichert, anschließend 1b (über checkout_process.php).
    Heißt, 1b hat die höhere Bestellnummer.
    Außerdem ist 1a mit der Testadresse von Sofortrechnung gespeichert, 1b mit der Rechnungsadresse aus dem Shop.

    Zum Vergleich enthält Bestellung 2 nur die Testadresse von Sofortrechnung.

    Bestellung 1a und 1b wurden laut Timestamp zur selben Zeit in die Datenbank geschrieben.
    Bestellung 1a und 2 wurden laut Datenbank je 2 Sekunden nach Eintragung modifiziert. (Vermutlich Bestellstatus)
    Bestellung 1b und 2 sind mit der selben IP gespeichert, Bestellung 1 mit einer IP der Sofort AG.

    Ich weiß gerade nicht mehr, wo ich mit der Problemlösung ansetzen soll.
    Vor allem, da die doppelten Bestellungen 1a und 1b zur selben Zeit in der DB gelandet sind, jedoch über verschiedene Scripte und somit eine Prüfung nach diversen Dopplungen ausfallen wird.

    Wie läuft der Bestätigungsprozess über sofort.de ab?
    Da in der checkout_process.php keine Routinen zur Prüfung auf doppelte Bestellungen enthalten sind, wird diese vermutlich zuerst aufgerufen um die Bestellung in die Datenbank zu schreiben.
    Die /callback/sofort/callback.php wird vermutlich später aufgerufen, um die zuvor gespeicherte Bestellung der checkout_process.php abzuändern, sofern die Bestellung in der DB gefunden wird.

    Werden beide Scripte zur selben Zeit aufgerufen, wird die Bestellung doppelt gespeichert.
    Vermutlich ist es der falsche Lösungsansatz, das Speichern der Bestellung in der checkout_process.php zu unterbinden, wenn per sofortrechnung bezahlt wird.
    Eventuell sind noch weitere Sofort-Module betroffen.

    Was meint ihr?
    Und warum wird nur die erste der Bestellungen doppelt gespeichert?

    Viele Grüße
    Andreas

    Linkback: https://www.modified-shop.org/forum/index.php?topic=25693.0

    AGI

    • modified Team
    • Beiträge: 303
    • Geschlecht:
    Re: Rechnung by Sofort, Bestellungen doppelt gespeichert
    Antwort #1 am: 17. April 2013, 15:33:13
    Hallo,

    wie ich feststellen musste, tritt das gleiche Problem auch bei Zahlung über Sofortüberweisung (sofort_sofortueberweisung) auf.
    Kann das irgendjemand bestätigen oder ist es doch ein Shop-spezifisches Problem?

    Viele Grüße
    Andreas

    AGI

    • modified Team
    • Beiträge: 303
    • Geschlecht:
    Re: Rechnung by Sofort, Bestellungen doppelt gespeichert
    Antwort #2 am: 24. April 2013, 11:18:12
    Hallo,

    mit einer kleinen Änderung in der Datei callback/sofort/sofort.php scheint das Problem behoben zu sein.

    ich verzögere die Ausführungen in der Funktion "_finalizeOrderprocessAfterSuccessfulPayment" per php sleep() um eine Sekunde:

    Code: PHP  [Auswählen]
    /**
     * manager for: save orderdata in shop-DB, emails, cleanup sofort-tables (if a notification has not done it before)
     * @return nothing (always redirects)
     */

    function _finalizeOrderprocessAfterSuccessfulPayment($transactionId, $paymentSecret) {
      sleep(1); // ADD By AGI
      //get serialized session
      $savedSession = $this->SofortOrderhandling->getSavedSessionData($transactionId, $paymentSecret);
     

    Die Funktion wird über before_process()-Methode des Payment-Objekts in der checkout_process.php aufgerufen.

    Ob diese "Lösung" wirklich ausreicht, wird sich zeigen.

    Viele Grüße
    Andreas
    0 Antworten
    243 Aufrufe
    05. August 2023, 17:32:45 von smoker
    2 Antworten
    1688 Aufrufe
    30. April 2018, 15:38:53 von longchuan
    0 Antworten
    1304 Aufrufe
    08. Oktober 2016, 11:21:06 von Hendrik1