Lieferadresse auf Payment-Seite ausgeben

Hallo :slight_smile:

Folgender Fall. Ich habe ein kleines Modul geschrieben welches einen eigenen Controller ala cl=mycontroller hat. Dieser Controller wird als Callback URL von einem Versanddienstleister genutzt

Der Aufruf sieht wie folgt aus:

https://www.meinshop.de/index.php?city=Hamburg&cl=mycontroller&name=Kiosk%20Nr.1&shopid=665058&street=Grosser%20Burstah%2010&zip=20457

Die __construct() Funktion im Controller holt sich die Parameter und setzt diese als Lieferadresse für den Kunden. Das klappt alles soweit. Nun kommt aber das Problem das ich dem Kunden eine Art Feedback geben möchte das die Lieferadresse erfolgreich gesetzt wurde.

Dazu habe ich mir den PaymentController in meinem Modul erweitert und die Funktion getDelAddress() dafĂĽr genutzt.

Allerdings wird die Lieferadresse erst nach dem aktualisieren der Payment Seite angezeigt nach dem mein Controller getriggert wurde. Hier bräuchte ich nun etwas Hilfe …

Was für Möglichkeiten habe ich hier, um dem Kunden ein optisches Feedback seiner Lieferadresse anzugeben ohne die Payment-Seite neu zuladen? Mittlerweile habe ich mir auch ein eigenen Block erstellt wo die Lieferadresse ausgegeben wird in der Hoffnung das ich diesen irgend wie nachladen kann aber aktuell komme ich nicht weiter.

Beste GrĂĽĂźe
Gajel

Hallo :slight_smile:

einen Ajax Request welcher im Hintergrund ĂĽber Deinen Controller die zu ersetzenden Daten als JSON zurĂĽckliefert und entsprechend die Daten auf der Payment Seite ohne die Seite zu aktualisieren setzt.

Viele GrĂĽĂźe,
Tim

Vielen Dank dir schon mal. Jetzt muss ich noch mal “blöd” nachfragen. Ich hatte eine ähnliche Idee und zwar als Callback URL eben eine .js Datei zu nutzen und in dieser eben den Ajax Request richtung Controller abzufeuern.

Allerdings frage ich mich ob es ok es eine .js Datei als Callback URL zu nutzen.

Eine .js Datei zurĂĽck zuliefern bei einem Controller Aufruf dort erschlieĂźt sich mir der Sinn nicht.

Dein JavaScript mit dem Ajax Call müsstest natürlich im Payment Template ergänzen z.B. über eine Block Überladung in der Deine eigene JavaScript Datei reinlädst.

Der Fall ist wie folgt: Das ganze läuft per Iframe in unseren Shop. Es geht per Klick ein Iframe mit Google-Maps auf. Dort kann ich dann eine Adresse wählen und mit einem Klick auf den Button “Adresse übernehmen”, diese als Lieferadresse setzen bzw. es wird die Callback URL getriggert welche sich um das setzen der Lieferadresse kümmert.

Das Iframe binde ich mit der entsprechenden Callback URL (cb_address Paramter) ein.

<iframe src="https://paketshop.myhermes.de/int/hpsf.html?r=mykey&noframe=true&countries=DE&cb_method=get&cb_address=https://meinshop/index.php?cl=mycontroller" id="hps-if" width="99%" height="99%" frameBorder="0"></iframe>

Daher kann ich nicht einfach ein Ajax Request starten wenn man auf den Button “Adresse übernehmen” klickt, da das Ganze immer über die Callback URL läuft. Oder stehe hier auf’m Schlauch was das angeht?

Besten Dank im voraus.

Das mit dem Iframe bringt natürlich Komplexität rein.

Eine Idee wäre ein JavaScript bzw. jQuery Event Listener zu definieren um die Callback URL Triggering entgegen zu nehmen um dann ggfs. ein Reload der Payment Seite zu erzwingen oder ggfs. die Daten Einzeln auszulesen und zu aktualisieren.

Gibt es dort eine Integration-Anleitung von Hermes? Die Dir dort weitere Infos liefert? z.B. deren Best Practises?

Alternativ könnte ich mir gut vorstellen, dass Du einen weiteren Checkout Schritt ergänzt, den Du vor der Payment Seite definierst um eine Lieferadresse auszuwählen. Aber auch damit würde die technische Komplexität steigen.

Danke für die Rückmeldung. Hermes bietet 2 Integrationsmöglichkeiten. Einmal eben über das Iframe mit der Callback URL oder typisch per API.

Ich habe die Iframe Variante gewählt, da Hermes hier eben die Google Maps Karte mit allen nötigen Informationen zur Verfügung stellt und man sich nicht um alles von Grund auf kümmern muss. Also alles per API abfragen und dann die Karte usw. erzeugen.

Aber wie’s scheint bringt die Iframe Variante auch Probleme mit sich bezüglich der Individualisierung.

1 Like

Ich würde ja gerne wenigstens das div mit dem Iframe schliessen nach dem die Callback URL getriggert wurde, ähnlich wie du es beschreibst. Ich hab auch schon Google befragt allerdings bin nicht wirklich weiter gekommen. Evtl. liegt es auch den mir fehlenden Schlüsselwörtern aber ich komme gerade nicht weiter.

Hat jemand paar Tipps und/oder Anregungen, das wäre top :slight_smile:

Ich würde das so machen: 2 Sekunden nach dem Laden verschwinden lassen. Ist selbstverständlich ausbaufähig.

$('#hps-if').on( 'load', function() {
    setTimeout(
  	function() 
  	{	
   	 $(this).css({"display": 'none'});
	 }, 2000);
});

Das wird in der Praxis leider nicht funktionieren, denn dies würde bedeuten das ich den Kunden jeweils 2 Sekunden Zeit gebe um ihren Paketshop auszuwählen. Ein zeitlicher Trigger ist in dem Fall keine Option.

Ich frage mich gerade ob ich nicht einfach ein Template zum Controller mit angebe. Den SEO-Link zum Template als Callback URL angebe (https://www.meinshop.de/hermes/).

Vom Dienstleister kommt dann folgender Request:

https://www.meinshop.de/hermes/?city=Hamburg&name=Kiosk%20Nr.1&shopid=665058&street=Grosser%20Burstah%2010&zip=2045

Ich sende dann ein Ajax Request mit dem Parametern an mein PHP Script/Controller sobald das Template eben aufgerufen wird und bei einem erfolgreichen Ajax Response könnte ich dann das Iframe schliessen.

Das mĂĽsste doch eigentlich funktionieren oder ĂĽbersehe ich was?

GrĂĽĂźe

Achso, ich dachte, das soll nur kurz eingeblendet werden. So ist das natĂĽrlich sinnfrei :rofl:, es sei denn man macht einen Button rein, der den Befehl durch den Kunden ausfĂĽhrt.

Iframe ist wegen Cross-Domain und den Beschränkungen immer ein Problem.