Closed mfritsche-dotsource closed 5 years ago
Hm. Ich habe da jetzt auf die Schnelle keine Idee, wie man das lösen könnte. Was ist denn Shopware-Best-Practice bei reservierten Bestellnummern? Das Problem müsste ja bei mehreren Zahlungsarten auftreten. Bei den Meisten arbeiten wir da ja mit der berühmt-berüchtigten mopt-Nummer als Pseudoreferenz, einige Zahlungsarten benötigen aber die tatsächliche Ordernummer als Referenz.
Das Ändern der Bestellnummer passiert meiner Meinung nach viel zu spät., Da abhängige Plugins die sich an saveOrder hängen, die falsche Bestellnummer verarbeiten.
Anstelle von diesem Code:
$sql = 'UPDATE s_order` SET ordernumber = ? WHERE transactionID = ?';
Shopware()->Db()->query($sql, array($this->session['moptAmazonOrdernum'], $txid));
$this->session['sOrderVariables']->sOrderNumber = $this->session['moptAmazonOrdernum'];
$sql = 'UPDATE `s_order_details` SET ordernumber = ? WHERE orderID = ?';
Shopware()->Db()->query($sql, array($this->session['moptAmazonOrdernum'], $orderId));
sollte ggf. die Methode $my_sOrder->sGetOrderNumber()
via Hook überschrieben und die zuvor generierte Bestellnummer zurückgeben werden, anstatt eine neue generieren zu lassen und diese dann im Nachgang zu überschreiben.
Die zuvor für Amazon generierte Bestellnummer könnte in der Session zwischengespeichert und im Replace-Hook abgefragt werden. Existiert der Sessionkey, wird der Wert dahinter zurückgegeben und der Sessionkey aus der Session gelöscht. Existiert dieser nicht, dann muss eine neue Bestellnummer generiert werden. In dem Fall kann die Original Methode aufgerufen werden.
Danke für den Hinweis, das wird uns weiterhelfen! Wir schauen uns das mal genauer an (SW-183).
Dürfte mit #225 behoben sein!
Hallo,
bei der Zahlung mit AmazonPay tritt ein Fehler bezüglich der Bestellnummern auf. In der Bestellbestätigung steht eine um 1 höhere Bestellnummer als im Shop Backend unter Bestellungen ersichtlich ist.
Bsp: Eine Bestellung mit der Bestellnummer 2001 im Backend wird in der Bestellbestätigung als 2002 angegeben.
Meine Vermutung ist, dass dies mit der Art der Abarbeitung des Prozesses zusammenhängt welcher in der finishAction() des MoptPaymentAmazon Controllers stattfindet.
Zuerst wird hier mittels
eine Bestellnummer reserviert. Diese wird im späteren Verlauf genutzt um die vom Shopware in
generierte zu überschreiben. Dies geschieht nach dem Speichern der Bestellung
Dadurch hat die Bestellung in der Datenbank die zuerst reservierte Bestellnummer. Das Versenden der Transaktionsmail geschieht aber im saveOrder(). Dort erstellt Shopware eine eigene neue Bestellung, welche dann zu dem Zeitpunkt noch eine Bestellnummer hat, welche um eins höher ist als die Reservierte. Dadurch besitzt die Bestellbestätigung noch nicht die Information der reservierten Bestellnummer und gibt eine abweichende Bestellnummer aus.