Klarna Payments wird direkt – ohne Payment-Service-Provider – in Ihren Onlineshop integriert. Klarna bietet mehrere Zahlungsmethoden an:

Sofortüberweisung (per Online-Banking, Lastschrift oder Kreditkarte)

Kauf auf Rechnung (Buy now pay later)

Ratenzahlung

Die Zahlung wird über Klarna abgewickelt und nicht über den Onlineshop. Im Klarna-Händlerportal können Sie alle Transaktionen einsehen und verwalten. Klarna übernimmt das volle Betrugs- und Kreditrisiko für Verkäufer und bietet gleichzeitig den Kunden umfassenden Käuferschutz.

Inhalt

1 Funktionsweise

2 Integration Klarna

 

1 Funktionsweise

Nach dem Auswählen der Zahlungsart und dem Klicken auf "Zahlungspflichtig bestellen" erscheint ein Popup-Fenster von Klarna. Dort meldet sich der Käufer mit seinen Klarna Zugangsdaten an und bestätigt die Zahlung. Danach wird die HTML-Bestelleingangsbestätigungsseite (ws_confirm.htm) angezeigt.

Der div-Container mit den Klarna-Zahlungsarten wird immer auf der Bestellübersichtsseite (ws_place_order.htm) integriert.

 

Zusätzliche Informationen zur Integration finden Sie auch auf der Entwicklerseite von Klarna: https://docs.klarna.com/

 

2 Integration Klarna

Voraussetzung

Sie benötigen einen Händlervertrag mit Klarna. Bitte wenden Sie sich hierzu an Ihren Klarna-Ansprechpartner.

Schritt 1: Freischaltung/Aktivierung

Klarna Payments muss durch WEBSALE freigeschaltet werden. Hierzu benötigen wir die relevanten Daten und Parameter (Username/Password, URL, MerchantID, UUID etc.) von Klarna. Kontaktieren Sie bitte Ihren WEBSALE-Ansprechpartner.

Schritt 2: Aktivieren der Zahlungsart und definieren der gewünschten Einstellungen in der Shopkonfiguration

Fügen Sie den Abschnitt <PaymentKlarna-Txt> in Ihre Shopkonfiguration shop.config ein.

<PaymentKlarna-Txt>
   Allow                      = yes
   TestMode                   = yes
   Name                       = Klarna Payments
   NameSuffix                 =
   ImgOnClick                 = selectPaymentImage('~ID~');
   RadioOnClick               = selectPayment('~ID~');
   Img                        = <logo-XYZ.png>
   DelivererID-List           = <Ihre Versandarten-IDs>
   ...
   KlarnaLocaleCode           = de-DE
   AdditionProductName        = Zusatzkosten                 # optional
   ReductionProductName       = Abzüglich gewährter Rabatte  # optional
   ...
   # optionale Parameter zum Anpassen des Klarna-Widgets
   KlarnaDesignColorBorder           = #FF9900
   KlarnaDesignColorBorderSelected   =
   KlarnaDesignColorDetails          =
   KlarnaDesignColorText             =
   KlarnaDesignRadiusBorder          =
   ...
</PaymentKlarna-Txt>

Referenz: Abschnitt PaymentKlarna-Txt

Die für alle Zahlungsarten möglichen Standard-Parameter finden Sie unter:

Referenz: Abschnitt PaymentXXX-Txt

Schritt 3: Definieren von Hinweismeldungen

Ergänzen Sie in der Shopkonfiguration shop.config im Abschnitt <NotifyMessages-Txt> folgende Hinweismeldungen:

<NotifyMessages-Txt>
   ...
   Klarna-ClearingError  = Fehler bei der Transaktion. Bitte wählen Sie eine andere Zahlungsart.
   Klarna-ClearingCancel = Die Transaktion wurde abgebrochen. Bitte überprüfen Sie Ihre Eingaben.
   Klarna-ClearingDeny   = Die Transaktion wurde abgelehnt. Bitte überprüfen Sie Ihre Eingaben.
   ...
</NotifyMessages-Txt>

Referenz: Abschnitt NotifyMessages-Txt

Schritt 4: Bestellübersichtsseite (ws_place_order.htm) ergänzen

Wenn der Käufer auf den BT-PlaceOrder-Button klickt, befindet er sich im KlarnaPayments-Tunnel. Der Käufer gelangt, wie bei Express-Bezahlarten, nur noch auf das PlaceOrder-Template.

Mit dem Button BT-KlarnaPayments_cancel kann der Bezahlvorgang abgebrochen werden.

Das Klarna Widget wird somit immer auf der Bestellübersichtsseite (ws_place_order.htm) verwendet.

Fügen Sie innerhalb der <form action="~FORM-PlaceOrder~"> den Button zum Abbrechen der Zahlung ein und ergänzen das Template mit dem Klarna-Script.


Hinweis:

In den Codebeispielen wird die ID des Formulars angegeben. Diese muss an Ihre bestehende ID entsprechend angepasst werden.

<form action="~FORM-PlaceOrder~" method="post" id="<Ihre-FORM-ID>" ...>
   ...
   {ST-KlarnaPayments}
      <button type="submit" name="~BT-KlarnaPayments_cancel~">Zahlung abbrechen</button>
   {/ST-KlarnaPayments}
   ...
</form>
 
{ST-KlarnaPayments}
   <div id="klarna_div_id"> </div>
   <script type="application/javascript">
   window.klarnaAsyncCallback = function () {
      Klarna.Payments.init({
         client_token: '~KLARNA-ClientToken~'
      })
      Klarna.Payments.load ({
         container: '#klarna_div_id',
         payment_method_category: 'klarna'
      },
      function (res) {
         console.log(res);
      })
   }
  
   $("button[name='~BT-PlaceOrder~']").click(function(e) {
      e.preventDefault();
      try {
         Klarna.Payments.authorize({
            payment_method_category: "klarna"
         },JSON.parse("~WS-JSEncoding($KLARNA-OrderDataJSON$)~"),
         function(res) {
            if(res.authorization_token){
               const redirectURL = new URL("~KLARNA-AuthCallbackURL~")
               redirectURL.searchParams.append("~KLARNA-AuthTokenName~", res.authorization_token)
               window.location.href = redirectURL.href;
            }
         })
      } catch (error) {
         console.log("error: " + error)
      }
   });
   </script>
   <script src="https://x.klarnacdn.net/kp/lib/v1/api.js" async></script>
{/ST-KlarnaPayments}

Referenz: FORM-PlaceOrder

Referenz: ST-KlarnaPayments

Referenz: BT-KlarnaPayments_cancel

Referenz: KLARNA-ClientToken

Referenz: WS-JSEncoding()

Referenz: KLARNA-OrderDataJSON

Referenz: KLARNA-AuthCallbackURL

Referenz: KLARNA-AuthTokenName

Referenz: KLARNA-ObsoleteMode

Optional: Klarna Widget per AJAX öffnen

Damit der Kunde nicht zwei mal den Kaufen-Button drücken muss, gibt es die Möglichkeit das Klarna Widget per AJAX zu öffnen.

 

<form action="~FORM-PlaceOrder~" method="post" id="<Ihre-FORM-ID>">
   ...
   {ST-Payment(35)}
      <div id="klarna_cancel" style="display: none">
         Sie befinden sich im Klarna Checkout. Möchten Sie den Checkout abbrechen und zurück zur normalen Bestellübersicht?
         <button type="submit" name="~BT-KlarnaPayments_cancel~">Abbrechen</button>
      </div>
   {/ST-Payment(35)}
   ...
</form>
 
{ST-Payment(35)}
   <script type="application/javascript">
      function successCallback() {}
      function errorCallback() {}
      $("button[name='~BT-PlaceOrder~']").click(function(e) {
         e.preventDefault();
         return fetch('~FORM-PlaceOrder~', {
            method: 'post',
            headers: {
               'Content-Type': 'application/WS-target~WS-Charset~xWS-target',
            },
            body: $('#form_place_order').serialize() + `&ws_ajax_rsf=${ws_stringToHex('successCallback()')}&ws_ajax_ref=${ws_stringToHex('errorCallback()')}`
         }).then(function(res) {
            return res.json();
         }).then(function(data){
            ws_AJAXGenericResponseProcessor(data)
            if (data.hasOwnProperty('klarnaclienttoken')) {
               Klarna.Payments.init({
                  client_token: data.klarnaclienttoken
               })
               Klarna.Payments.load({
                  container: '#klarna_div_id',
                  payment_method_category: 'klarna'
               },
               function (res) {
                  try {
                     Klarna.Payments.authorize({
                        payment_method_category: "klarna"
                     },JSON.parse("~WS-JSEncoding($KLARNA-OrderDataJSON$)~"),
                     function(res) {
                        if(res.authorization_token){
                           const redirectURL = new URL("~KLARNA-AuthCallbackURL~")
                           redirectURL.searchParams.append("~KLARNA-AuthTokenName~", res.authorization_token)
                           window.location.href = redirectURL.href;
                        } else {
                           $( "button[name='~BT-KlarnaPayments_cancel~']" ).click();
                        }
                     })
                  } catch (error) {
                     // klarna sdk error
                  }
               })
            }
            else {
               // create klarna session failed
            }
         })
      });
      {ST-KlarnaPayments}
         // Shop wurde im Klarna-Tunnel aufgerufen. Kunde muss Bezahlvorgang abbrechen können.
         $("#klarna_cancel").show();
      {/ST-KlarnaPayments}
   </script>
   <script src="https://x.klarnacdn.net/kp/lib/v1/api.js" async></script>
{/ST-Payment(35)}
...

 

 

Schritt 5: Anpassung der Bestelleingangsbestätigungs-E-Mail (mail_customer_order.htm)

Ergänzen Sie die Bestelleingangsbestätigungs-E-Mail (mail_customer_order.htm) mit dem Hinweis, dass die Zahlung über Klarna abgerechnet wird und nicht direkt über den Onlineshop.

...
{ST-Payment(35)}
   Hinweise zur Zahlung mit Klarna
   Die Zahlung wird durch unseren Partner <a href="https://www.klarna.com/de/">Klarna</a> abgewickelt.
   Sobald Ihre Waren versandt sind, erhalten Sie Anweisungen von Klarna, wie Sie Ihre Zahlung abschließen können.
   Sie können all Ihre Einkäufe über <a href="https://app.klarna.com/login">Klarna.com</a> bzw.
   die <a href="https://app.klarna.com/login">Klarna App</a> verwalten und sogar mit nur einem Klick bezahlen.
{/ST-Payment(35)}
...

Referenz: ST-Payment()

Schritt 6: Klarna Retoureninformationen

Zusätzlich soll im Onlineshop eine Information zum Retourenprozess mit Klarna integriert werden. Diese Erklärung kann am besten über einen Link im Footer erreichbar sein.

Integrieren dazu den folgenden Text auf die Retouren- und/oder Rücksende-Informationsseite des Shops.

Wie kann ich meine Klarna Rechnung bei einer Retoure pausieren?
Befolge die Retourenanweisungen (und gib dein Paket kostenlos an einem DHL-Paketshop, an einer DHL-Packstation oder in einem Hermes PaketShop zurück). Öffne nun die Klarna Webseite (https://app.klarna.com/login) oder App (http://app.klarna.com/openapp/). Wähle dort die entsprechende Bestellung aus und klicke auf “Retoure anmelden”. Deine Retoure ist jetzt angemeldet. Klarna pausiert deine Rechnung während du das Produkt an uns zurückschickst. Sobald es bei uns angekommen ist, aktualisieren wir deine Klarna Rechnung.

Bei Bedarf legen Sie eine "statische" Informationsseite, ein neues Template für die Retouren- und Rücksende-Informationen des Shops an.

Wegweiser: Informationsseiten erstellen

Schritt 7: Klarna FAQs (optional)

Sie haben die Möglichkeit kleine Hinweise über das Bezahlen mit Klarna anzuzeigen. Die Inhalte stellt Klarna dynamisch über das On-site Messaging zur Verfügung (siehe: https://www.klarna.com/de/verkaeufer/on-site-marketing-platform/ ).

Melden Sie sich dazu im Klarna Händlerportal an, laden sich die entsprechenden Code-Snippets herunter und integrieren diese an die gewünschten Stellen im Shop.

Im Regelfall handelt es sich dabei um

Javascript-Snippets mit der ClientID für das Laden der dynamischen Inhalte

verschiedene Placement-Snippets, in die die dynamischen Inhalte geladen werden

Mehr Informationen zur Integration finden Sie auf der Entwicklerseite von Klarna: https://docs.klarna.com/on-site-messaging/

Schritt 8: Testen der Zahlungsart Klarna

Um Klarna Payments in Ihrem Shop zu testen, stellt Ihnen WEBSALE einen Zahlungsarten-Testmodus zur Verfügung. Die Zahlungsart ist dann nur im Testmodus sichtbar. Der Produktivbetrieb Ihres Shops wird dadurch nicht beeinflusst.

Achten Sie darauf, dass der Parameter TestMode im Abschnitt <PaymentKlarna-Txt> Ihrer Shopkonfiguration shop.config auf yes steht.
Referenz: Abschnitt PaymentKlarna-Txt

Testdaten für Klarna finden Sie hier: https://docs.klarna.com/resources/test-environment/sample-customer-data/#germany

Beispiel für den Aufruf des Shops:

http://www.xyz.de/?test=on&payment-test=on&klarnaclearing-test=on

Wenn im Template Javascripte etc. auch mit ST-Design-Test geklammert sind, muss zusätzlich der Design-Testmodus aktiviert werden:

http://www.xyz.de/?test=on&design-test=on&payment-test=on&klarnaclearing-test=on

Während der Testphase können Sie die JavaScripte mit folgender Funktion testen, um sich Protokollmeldungen in der Konsole Ihres Browsers anzeigen zu lassen:

function(res) {
   console.log(res);
}

Mehr Informationen dazu finden Sie in der Klarna Dokumentation: https://docs.klarna.com/klarna-payments/other-actions/finalize-an-authorization/

Schritt 9: Klarna für den Produktivbetrieb aktivieren

Um die Zahlungsart Live zu nehmen, entfernen Sie die ST-DesignTest-Klammerungen auf der Zahlungs- und Versandarten-Seite (ws_pay_deliv.htm) (siehe Schritt 4) und setzen in der Shopkonfiguration shop.config den Parameter TestMode auf no.

<PaymentKlarna-Txt>
   ...
   TestMode    = no
   ...
</PaymentKlarna-Txt>

Wegweiser: Testmodi des Shops ein-/ausschalten

Falls Sie die Test-Funktion console.log(res); (siehe Schritt 4 und 5) verwendet haben, entfernen Sie diese vor dem Livegang bitte ebenfalls oder stellen Sie sicher, dass sie mit ST-DesignTest geklammert ist.


Hinweis zum Livegang

Stimmen Sie sich mit WEBSALE für den Livegang ab, da auch Anpassungen an der Schnittstelle vorgenommen werden müssen. Die Testdaten müssen von unserer Systemadministration durch Livedaten ersetzt werden.

Haben Sie alle Schritte durchgeführt, ist die Zahlungsart "Klarna Payments" in Ihrem Shop integriert und aktiv.