Kundenland automatisch setzen

Hallo zusammen,

wir wollen Kunden gerne bereits vor Login ohne ihr Zutun die korrekten Versandkosten und Steuern für ihr Heimatland anzeigen, sobald sie bei uns im Shop landen. Es muss nicht zu 100% passen, aber sollte schon die meisten Fälle abdecken. Wir stellen uns da eine IP basierte Lösung vor. Gibt es dazu in Shopware 5.3.7 eine fertige Lösung (ggf. per Plugin) für oder müsste man das selbst bauen? Falls es selbst gebaut werden müsste: Wo setzt man da am besten an?

Danke schon mal für eure Hilfe!

Stefana

So etwas in der Art? Dieses Plugin ist leider erst ab Shopware 5.4.0 kompatibel.

Da gibt es kein fertiges Plugin. Wir haben uns eine eigene Lösung gebaut die per GeoIP das Land, Währung und Benutzergruppe setzt (netto für Kunden außerhalb der EU). Zusätzlich überprüfen wir noch die Sprache, also Browser ist EN, schlägt EN vor usw.

Vielen Dank für eure Vorschläge. Ich werde dann auch direkt ein Plugin schreiben, das die Daten abgreift. Das hilft auf jeden Fall schon mal weiter.

Hallo @hello ,

ich kann jetzt anhand der IP das Ursprungsland im Shop bestimmen, das klappt schon mal einwandfrei. Allerdings bekomme ich es noch nicht hin, dass der Kunde umgehend (also vor Login) seine länderspezifischen Informationen auch direkt angezeigt bekommt. Kannst Du mir einen Tip geben, was ich dafür setzen muss? Danke Dir!

P.S.: Natürlich ist auch jeder andere herzlich eingeladen einen Tipp hier zu lassen, wenn er/sie möchte :wink:

Das ist nur über ein eigenes Plugin möglich.

Beispiel der setCountry Function:

public function setCountry(GeoCountry $country)
    {
        $countryRepo = Shopware()->Models()->getRepository(\Shopware\Models\Country\Country::class);
        $countrySW = $countryRepo->findOneBy(['iso' => $country->isoCode]);

        if ($countrySW) {
            Shopware()->Session()->offsetSet('sCountry', $countrySW->getId());
            Shopware()->Session()->offsetSet('sState', 0);
            Shopware()->Session()->offsetSet('sArea', Shopware()->Db()->fetchOne('
                SELECT areaID FROM s_core_countries WHERE id = ?
                ', [$countrySW->getId()]));
        } else {
            $message = 'GeoIP: country '.$country->isoCode.' ('. serialize($country) .') not found';
            Shopware()->Container()->get('pluginlogger')->error($message);
        } 
    }

Wie weit bist du schon in der Plugin Entwicklung? Das Problem ist ja nur, Shopware zu sagen: bitte schalte die Session des aktuellen Benutzer auf dieses Land/Staat.

Das ist genau der Teil der mir noch gefehlt hatte, ich war mir nicht sicher ob und wie ich das Land an die Session bekomme. Hast mir damit einen Riesengefallen getan, danke Dir vielmals :slight_smile:

Zur Info falls es jemanden interessiert ^^ : Das Plugin funktioniert jetzt einwandfrei dank eurer Hilfe. Ich hab noch ca. einen Tag damit verbracht rauszufinden warum es manchmal klappte und manchmal nicht, bis ich dann rausgefunden habe, dass ein Plugin unter bestimmten Voraussetzungen das Land automatisch immer auf Deutschland gesetzt hat, wenn der User nicht angemeldet war. Das hat meine Anpassungen natürlich ausgehebelt… Aber das konnte ich zum Glück auch lösen.