Ich versuche mich einmal dem Problem zu nähern:
Voraussetzung: Shopware 5.5.6 und Bezahlvorgang via PayPal ohne ExpressCheckout.
In der checkout/finishAction holt sich der Shop die Bestelldaten aus der Session (ca. Zeile 317) via
$orderVariables = $this->session['sOrderVariables']->getArrayCopy();
In der nachfolgenden Abfrage wird auf die sOrderNumber
geprüft und wenn nicht leer die entsprechende Variable sAddresses
für die Daten der View mit Billing und Shipping Adresse gefüllt. sOrderNumber
ist aber gar nicht in $orderVariables
enthalten, sondern nur in $order
. Folgender Code schafft in der finishAction bei mir Abhilfe:
...
$orderVariables = $this->session['sOrderVariables']->getArrayCopy();
// Neu: Prüfung auf sOrderNumber
if (!empty($order['sOrderNumber'] && empty($orderVariables['sOrderNumber']))){
$orderVariables['sOrderNumber'] = $order['sOrderNumber'];
}
if (!empty($orderVariables['sOrderNumber'])) {
$orderVariables['sAddresses']['billing'] = $this->getOrderAddress($orderVariables['sOrderNumber'], 'billing');
$orderVariables['sAddresses']['shipping'] = $this->getOrderAddress($orderVariables['sOrderNumber'], 'shipping');
$orderVariables['sAddresses']['equal'] = $this->areAddressesEqual($orderVariables['sAddresses']['billing'], $orderVariables['sAddresses']['shipping']);
}
...
Damit wären dann auch die obigen Billing und Shipping Adressen in der sAddresses
gefüllt. Gefüllt wird
$this->session['sOrderVariables']
erstmals in der confirmAction und sOrderNumber wird oder kann dort noch nicht gesetzt werden. In der finishAction kommt der Shop deshalb auch nicht in die if Abfrage rein. Warum das Problem nur bei einigen auftaucht könnte man evtl. mit einem Fehler/Problem beim Laden/Speichern der View-Daten in die Session erklären. Das müsste man aber noch mal genauer untersuchen, wie und wann die sOrderNumber
in der Session zur verfügung steht.
Edit: Das neue PayPal Unified läuft bei uns erstmal auf 2 Testsystemen. Wir konnten bisher mit Ausnahme von PayPal Express Checkout nie die checkout/finish Seite mit korrekten Adressangaben erreichen.