Zur einfachen Einbindung empfehlen wir außerdem, die folgende JavaScript Klasse einzubinden. Wir werden sie in den weiteren Code-Beispielen verwenden. Natürlich könnt ihr auch eure eigenen Funktionen verwenden oder sie nach belieben anpassen.
Um den Express Checkout Button zu rendern, benötigen wir ein HTML-Element als Container, z.B.:
<divclass="amazon-pay-button"></div>
Als Nächstes erfragen wir vom Headless-Server die Daten, die wir für den Button benötigen. Dazu verwenden wir die Route /store-api/amazon-pay-checkout-button und senden die URL, auf die der Kunde nach dem Login bei Amazon zurückgeleitet werden soll. Diese URL ist neu anzulegen und Ihre Funktion wird im nächsten Abschnitt behandelt.
Um den Button zu rendern, müssen wir die Daten, die wir von unserem Server erhalten haben, an die JavaScript-Klasse übergeben. Dazu verwenden wir die Methode renderButtons der Klasse ShopwareAmazonPayHeadlessHelper, die wir oben eingebunden haben.
Die Methode erwartet als ersten Parameter einen CSS-Selektor, der das HTML-Element identifiziert, in dem der Button gerendert werden soll. Als zweiter Parameter wird ein Objekt erwartet, das die Daten enthält, die wir von unserem Server erhalten haben.
Nach der Rückkehr von Amazon Pay auf die von uns angegebene URL, wollen wir mit den erhaltenen Daten eine Shop-Session erzeugen, die die Kundendaten enthält.
Diese Daten erhalten wir aus der amazonCheckoutSessionId, die von Amazon an die Return URL angehängt wird. Die nötige Verarbeitung erfolgt über die Route /store-api/amazon-pay-checkout-review, der wir die amazonCheckoutSessionId übergeben.
Die Return URL kann also eine leere Seite sein oder z.B. einen Loading-Spinner enthalten, der die Kund:innen darauf hinweist, dass die Daten verarbeitet werden. Im Erfolgsfall wird z.B. auf die Versandarten- oder "Jetzt kaufen"-Seite weitergeleitet. Die Session enthält an dieser Stelle alle notwendigen Kundendaten.
Wir wollen außerdem die amazonCheckoutSessionId an die URL anhängen oder anderweitig speichern, weil wir sie im letzten Schritt noch einmal benötigen werden.
Der übliche Aufruf an den Endpunkt /store-api/handle-payment wird noch um den Parameter amazonPayCheckoutId erweitert. Dieser Parameter enthält die amazonCheckoutSessionId, die wir im letzten Schritt gespeichert haben. Das könnte in etwa so aussehen:
Den üblichen Aufruf an den Endpunkt /store-api/handle-payment erweitern wir um den Parameter amazonPayInitializePurePaymentUrl erweitert.
Diese URL ist neu anzulegen und Ihre Funktion wird im nächsten Abschnitt behandelt.
Der amazonPayInitializePurePaymentUrl Parameter kann bei jedem handle-payment-Aufruf gesendet werden. Das Plugin erkennt selbst, ob Amazon Pay als Zahlungsart gewählt wurde und verarbeitet oder ignoriert die URL entsprechend.
Auf dieser neu anzulegenden Seite initialisieren wir die Weiterleitung an Amazon per JavaScript. Dazu binden wir das Amazon Pay JS ein und verwenden wir die Methode initializePurePayment der Klasse ShopwareAmazonPayHeadlessHelper, die wir oben eingebunden haben.
Auch diese URL kann wieder eine leere Seite (evtl. mit Loading-Spinner) sein.
Wir übergeben dabei die orderTransactionId, die automatisch an die URL angehängt wurde und eine returnUrl, die wir ebenfalls neu festlegen.
Auf diese Seite wird der Kunde nach der erfolgreichen Zahlung zurückgeleitet und die Zahlung bestätigt. An die returnUrl wird die orderTransactionId angehängt.
Auf dieser neu anzulegenden Seite bestätigen wir die Zahlung mit dem Store-API Endpunkt store-api/amazon-pay-pure-payment-finalize und leiten den Kunden auf die Success-Seite weiter.
Auch diese URL kann wieder eine leere Seite (evtl. mit Loading-Spinner) sein.
An den Endpunkt senden wir die orderTransactionId, die wir im vorherigen Schritt an diese URL angehängt haben und die amazonCheckoutSessionId, die von Amazon hinzugefügt wurde.