Hallo
Ich muss während des ganzen Checkout-Prozesses an mehreren Stellen die Rechnungsadresse des Kunden Auslesen. Vor 5.2 klappte das hervorragend folgendermassen:
$userId = Shopware()->Session()->sUserId;
$customer = Shopware()->Models()->find('Shopware\Models\Customer\Customer', $userId);
$billing = $candidate->getBilling();
In 5.2 gibt das neuerdings stets die Standard-Rechnungsadresse des Kunden zurück, was natürlich ein Problem ist, falls der Kunde für die aktuell behandelte Bestellung eine andere Adresse gewählt hat. Meine momentane Lösung ist:
$billingId = Shopware()->Session()->offsetGet('checkoutBillingAddressId');
if (!$billingId) {
$billingId = Shopware()->Modules()->Admin()->sGetUserData()['billingaddress']['id'];
}
$billing = Shopware()->Models()->find('Shopware\Models\Customer\Address', $billingId);
Shopware()->Modules()->Admin()->sGetUserData()[‚billingaddress‘] wäre ja schön und gut, klappt aber nur bis zu dem Punkt, an dem die Bestellung abgesendet wird. Sobald man nämlich auf ‚Bestellung absenden‘ klickt , gibt das wieder die Standardrechungsadresse zurück, und nicht die ausgewählte. (der kritische Punkt ist bei /engine/Shopware/Core/sAdmin.php:1518). Vielleicht liegt es daran, dass ich mich zu dem Zeitpunkt in meinem eigenen Payment-Controller befinde…
Als Alternative gibts nun die Sessionvariable ‚checkoutBillingAddressId‘, die jedoch erst irgendwann im checkout/finish oder so gesetzt wird, also auf jeden Fall erst nachdem man auf ‚Bestellung absenden‘ geklickt hat.
Kann mir jemand sagen, was hier die as-intended-Vorgehensweise für mein Problem ist? Kann mir nämlich nicht vorstellen, dass meine Lösung die korrekte ist.
Grüsse Sam