Okay, ist gelöst - es lag tatsächlich an einem unserer eigenen Module.
Wir verkaufen 90% regional und nicht deutschlandweit. Daher macht es für uns Sinn, einige Liefermöglichkeiten nur regional anbieten zu können.
Kurzerhand habe ich das Land “Regional” erstellt und im Controller payment::init()
überladen. Letzteres wird nämlich auf Seite 3 des Warenkorbes aufgerufen, wenn klar ist, wohin geliefert werden soll. Dort wird die PLZ der gewünschten Lieferadresse geprüft und gegen eine Liste von regionalen PLZ geprüft. Ist die PLZ regional, wird die oxAddress->countryid
überschrieben. Hat der Kunde keine separate Lieferadresse angegeben, wird oxUser->countryid
überschrieben.
Die Lieferarten wurden dann nach Ländern aufgeschlüsselt geschaltet (Deutschland oder Regional).
Das Problem war, dass am Ende oxUser->save()
aufgerufen wurde und Paypal mit dieser Veränderung nicht zurecht kam.
Also habe ich unser Modul sauberer gelöst und nun wird der User entweder in die Gruppe “Regionaler Kunde” oder “Überregionaler Kunde” verschoben, wenn payment::init()
aufgerufen wird. Die Liefer- und Zahlmöglichkeiten nach Gruppe aufschlüsseln geht ja auch von Haus aus.
Falls es interessiert, hier noch ein bisschen Code, wie der Controller payment
überladen wurde:
<?php
class pfl_aundo_payment extends pfl_aundo_payment_parent
{
/**
* Executes parent method parent::init().
* Changes the user's groups based on user's zipcode to enable local delivery.
*/
public function init()
{
parent::init();
if($oUser = $this->getUser())
{
$oUser->setGroupsAccordingToZip();
}
}
}
Und die neue Funktion für oxUser
:
<?php
class pfl_aundo_oxuser extends pfl_aundo_oxuser_parent {
public function setGroupsAccordingToZip()
{
// init locals
$oConf = $this->getConfig();
$aLocalZips = $oConf->getConfigParam('pfl_aundo_local_zips');
$localgroupid = $oConf->getConfigParam('pfl_aundo_local_groupid');
$nonlocalgroupid = $oConf->getConfigParam('pfl_aundo_nonlocal_groupid');
// get relevant zip code
if($this->getSelectedAddressId() != NULL)
{
// delivery address is set
$delZip = $this->getSelectedAddress()->oxaddress__oxzip->value;
}
else
{
// no delivery address set
$delZip = $this->oxuser__oxzip->value;
}
// add/remove to/from corresponding group
if(in_array($delZip, $aLocalZips))
{
$this->addToGroup($localgroupid);
$this->removeFromGroup($nonlocalgroupid);
}
else
{
$this->addToGroup($nonlocalgroupid);
$this->removeFromGroup($localgroupid);
}
}
}
Paypal funktioniert seitdem tadellos und auch unsere bisherige Aufteilung Regional/Überregional klappt hervorragend.
Manchmal muss man es erst hier aufschreiben, um drauf zu kommen.