Integration
Grundlagen
FAQ
Bluecode
Kreditkarte
Lastschrift
eps
iDEAL
Klarna
Maestro
Payment Page
PayPal
Tools
Fehlernummern
Ergebniscode
Testdaten
Grundlagen
FAQ
Bluecode
Kreditkarte
Lastschrift
eps
iDEAL
Klarna
Maestro
Payment Page
PayPal
Tools
Fehlernummern
Ergebniscode
Testdaten
Für das Testen von Klarna benötigen Sie keine Testdaten.
Detaillierte Informationen zu den Transaktionstypen.
Klarna erlaubt:
Eine Reservierung ist zu verwenden, wenn die Erfüllung eines Auftrages zu einem späteren Zeitpunkt erfolgt, zum Zeitpunkt der Bestellung aber der Bestellwert für die vom Kunden vorgelegte Karte genehmigt werden soll (bei Kreditkarten-Transaktionen) bzw. die angegebene Bankverbindung geprüft werden soll o.ä.. Nach Ablauf dieses Zeitraumes wird die Reservierung entweder gebucht oder storniert.
Verkauf ist zu verwenden, wenn der Geschäftsvorgang abgeschlossen ist, also z. B. ein Warenkorb angeboten, bestellt und an den Kunden ausgeliefert wurde. Das Zahlungsmittel des Kunden wird in Höhe des Betrags belastet.
Durch eine erfolgreiche Initialisierung wird eine Referenznummer erstellt sowie ein Weiterleitungslink (redirect) an den Händler übermittelt. Der übermittelte Link führt zum Bezahlformular. Der Kunde muss an diese URL weitergeleitet werden. Dies kann durch einen HTTP-Redirect-Header, eine HTML-Seite mit entsprechendem Meta-Tag oder Javascript erfolgen.
Bereitzustellen von: GiroCheckout
Aufzurufen von: Händler
Wie im Workflow zu sehen ist, gibt es unterschiedliche API-Aufrufe während einer Klarna-Transaktion. Das Formular, das der Käufer nach Weiterleitung zum Rechenzentrum ausfüllt, wird von Klarna zur Verfügung gestellt und verarbeitet und kann sich im Inhalt und Ablauf je nach Shopeinstellungen oder Käufersituation ändern.
URL https://payment.girosolution.de/girocheckout/api/v2/transaction/start
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
merchantId | Ja | Integer | Händler-ID eines Klarna-Projekts |
projectId | Ja | Integer | Projekt-ID eines Klarna-Projekts |
merchantTxId | Ja | String(255) | eindeutige Transaktions-ID des Händlers. Zulässige Zeichen: beliebige Buchstaben (inkl. sprachl. Sonderzeichen), 0-9, Zeichen & = + , : ; . _ ! ? # /. Diese Information übergibt GiroCheckout über das Feld merchant_information.merchant_data_1 an Klarna. |
type | Optional | String(4) | Transaktionsart (siehe Transaktionsarten) SALE = Verkauf wird sofort gebucht (default) AUTH = Reservierung des Betrags |
amount | Ja | Integer | Bei Dezimalwährungen den Betrag in der kleinsten Währungseinheit angeben, z.B. Cent, Penny |
currency | Ja | String(3) | Währung der Transaktion, gemäß ISO 4217. EUR = Euro |
purpose | Ja | String(40) | Verwendungszweck der Transaktion. Da Klarna diese Feld an sich nicht kennt, speichert GiroCheckout die Information unter basket.soft_descriptor, falls dort von Shopseite keine Information übergeben wird. |
urlRedirect | Ja | String(2048) | URL, an die der Kunde nach der Zahlung geschickt werden soll. |
urlNotify | Ja | String(2048) | URL, an die der Zahlungsausgang gemeldet werden soll. |
locale | Optional | String(4) | Sprache des Klarna-Formulars de = deutsch (default) en = englisch es = spanisch fr = französisch it = italienisch ja = japanisch pt = portugiesisch nl = niederländisch cs = tschechisch sv = schwedisch da = dänisch pl = polnisch |
billingAddress | Optional | JSON-String | Optionales Feld, das die Rechnungsadresse des Käufers enthalten kann. Die einzelnen Felder entnehmen Sie der Aufstellung weiter unten. |
shippingAddress | Optional | JSON-String | Optionales Feld, das die Lieferadresse des Käufers enthalten kann. Fehlt diese Information, wird als Lieferadresse ebenfalls die Rechnungsadresse verstanden. Die einzelnen Felder entnehmen Sie der Aufstellung weiter unten. |
customerInfo | Optional | JSON-String | Optionales Feld, das zusätzliche Informationen des Käufers enthalten kann. Die einzelnen Felder entnehmen Sie der Aufstellung weiter unten. |
basket | Ja | JSON-String | Pflichtfeld, das den Warenkorb beschreibt. Die einzelnen Felder entnehmen Sie der Aufstellung weiter unten. |
kassenzeichen | Optional | String(255) | Optionales Feld für die Übergabe eines Kassenzeichens. Dieses wird dann im GiroCockpit in den Transaktionsdetails angezeigt (und bald auch exportiert) und es kann dort auch danach gesucht werden. Zulässige Zeichen sind alle UTF-8-Zeichen. |
hash | Ja | String(32) | HMAC MD5 hash über alle Werte des Aufrufs. Siehe hash generieren |
Diese Objektstruktur gilt sowohl für die Rechnungsadresse (billingAddress) als auch für die Lieferadresse (shippingAddress).
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
first_name | Ja | String(50) | Vorname des Rechnungsempfängers. |
last_name | Ja | String(50) | Nachname des Rechnungsempfängers. |
title | Nein | String(20) | Klarna versteht unter „title“ die Anrede des Kunden, also z.B. Herr, Frau usw. |
Ja | String(254) | E-Mail-Adresse des Rechnungsempfängers. | |
phone_contact | Nein | Unterobjekt | Telefonnummer des Rechnungsempfängers (siehe unten). |
company_name | Nein | String(100) | Firmenname, falls der Rechnungsempfänger eine Firma ist. |
address_line_1 | Ja | String(100) | Hauptstraße und Hausnummer der Rechnungsadresse. |
address_line_2 | Nein | String(100) | Zusätzliche Adresszeile der Rechnungsadresse (optional). |
address_line_3 | Nein | String(100) | Weitere zusätzliche Adresszeile der Rechnungsadresse (optional). |
postal_code | Ja | String(10) | Postleitzahl der Rechnungsadresse. |
city | Ja | String(50) | Stadt der Rechnungsadresse. |
state | Nein | String(50) | Bundesland oder Region der Rechnungsadresse. |
country | Ja | String(2) | Zweibuchstabiger Ländercode der Rechnungsadresse (ISO 3166). |
phone_contact Objekt:
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
phone_type | Nein | String(10) | Art der Telefonnummer: `HOME`, `WORK` oder `MOBILE`. |
phone_number | Nein | String(20) | Telefonnummer des Rechnungsempfängers. |
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
customer_id | Nein | String(50) | Eindeutige Kunden-ID. |
date_of_birth | Nein | String(10) | Geburtsdatum des Kunden im Format `YYYY-MM-DD`. |
gender | Nein | String(10) | Geschlecht des Kunden: `MALE`, `FEMALE`, `DIVERSE`. |
title | Nein | String(100) | Klarna versteht unter „title“ die Anrede des Kunden, also z.B. Herr, Frau usw. |
personal_identifications | Nein | Unterobjekt | Liste von Identifikationsdokumenten (siehe unten). |
contacts | Nein | Unterobjekt | Liste von Kontaktmöglichkeiten des Kunden (siehe unten). |
contacts-Objekt:
Hier kann im Objekt phone_contacts ein Array mit mehreren Elementen mit den folgenden Feldern angegeben werden:
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
phone_type | Nein | String(10) | Art der Telefonnummer: `FAX`, `HOME`, `MOBILE`, `OTHER`, `PAGER`, `WORK`. |
phone_number | Nein | String(16) | Telefonnummer im E.164-Format (z. B. `+442071838750`). |
personal_identifications-Objekt:
Hier kann ein Array mit mehreren Elementen mit den folgenden Feldern angegeben werden:
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
type | Nein | String(20) | Art der Identifikation: `PASSPORT`, `NATIONAL`, `CPF`, `CNPJ`, `CURP`, `SSN`, `DRIVERS_LICENSE`. |
id | Nein | String(26) | Identifikationsnummer des Kunden. |
issued_by | Nein | String(50) | Für `DRIVERS_LICENSE`: Ausstellende Verwaltungsbehörde oder Gebiet, für alle anderen: Land (ISO 3166-1 Alpha-2 Code) |
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
basket_id | Ja | String(140) | Eindeutige Kennung des Warenkorbs, z. B. „basket123456“. |
invoice_id | Nein | String(127) | Externe Rechnungsnummer des API-Aufrufers. |
soft_descriptor | Nein | String | Dynamischer Text, der auf dem Kontoauszug des Käufers erscheint, z. B. „800-123-1234“. Hier wird der „purpose“, also der Verwendungszweck gespeichert, wenn das Feld nicht anderweitig verwendet wird. |
shipping_costs | Nein | Unterobjekt | Versandkosten des Warenkorbs (siehe unten). |
basket_discount | Nein | Unterobjekt | Rabatt auf den gesamten Warenkorb (siehe unten). |
basket_type | Ja | String(10) | Typ des Warenkorbs: `DIGITAL`, `MIXED` oder `PHYSICAL`. |
shipping_costs und basket_discount
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
amount | Ja | Integer | Betrag in der kleinsten Währungseinheit (z. B. Cent). |
currency | Ja | String(3) | Währung gemäß ISO 4217 (z. B. `EUR`). |
basket_items Liste:
Ein Array mit folgenden Feldern:
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
name | Ja | String(127) | Name des Artikels, z. B. „A fine shirt“. |
description | Nein | String(127) | Beschreibung des Artikels. |
reference | Nein | String(64) | Artikelnummer, SKU oder eine andere Händlerreferenz. |
quantity | Ja | Objekt | Menge und Einheit des Artikels (siehe unten). |
unit_price | Ja | Objekt | Preisdetails für den Artikel (siehe unten). |
item_discount | Nein | Objekt | Rabatte für diesen Artikel (siehe unten). |
quantity-Objekt:
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
quantity_amount | Ja | Integer | Anzahl der gekauften Einheiten. |
quantity_unit | Ja | String(8) | Maßeinheit des Artikels (z. B. `pcs`, `kg`). |
unit_price-Objekt:
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
net | Ja | Integer | Nettopreis des Artikels in der kleinsten Währungseinheit. |
gross | Ja | Integer | Bruttopreis des Artikels in der kleinsten Währungseinheit. |
currency | Ja | String(3) | Währung gemäß ISO 4217 (z. B. `EUR`). |
tax | Ja | Integer | Steuerbetrag in der kleinsten Währungseinheit oder Steuersatz (mit zwei Nachkommastellen). |
item_discount-Objekt:
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
net | Nein | Integer | Rabatt ohne Steuern in der kleinsten Währungseinheit. |
gross | Nein | Integer | Rabatt inklusive Steuern in der kleinsten Währungseinheit. |
currency | Nein | String(3) | Währung gemäß ISO 4217 (z. B. `EUR`). |
tax | Nein | Integer | Steuerbetrag in der kleinsten Währungseinheit oder Steuersatz. |
basket: { "basket_id": "basket123456", "basket_type": "PHYSICAL", "basket_items": [ { "name": "Item 1", "quantity": { "quantity_amount": 3, "quantity_unit": "pcs" }, "unit_price": { "net": 500, "gross": 600, "currency": "EUR", "tax": 2000 } } ] } billing_address: { "title": "Herr", "first_name": "Max", "last_name": "Mustermann", "company_name": "Acme GmbH", "email": "maxi.muster@example.com", "phone_contact": { "phone_type": "MOBILE", "phone_number": "+491701234567" }, "address_line_1": "Mustergasse 123", "address_line_2": "Haus A", "address_line_3": "Wohnung 12", "postal_code": "88888", "city": "Berlin", "state": "Berlin", "country": "DE" } shipping_address: { "title": "Herr", "first_name": "Max", "last_name": "Mustermann", "company_name": "Acme GmbH", "email": "maxi.muster@example.com", "phone_contact": { "phone_type": "HOME", "phone_number": "+49755283492987" }, "address_line_1": "Musterstr. 1a", "postal_code": "88888", "city": "Berlin", "state": "Berlin", "country": "DE" } customer_information: { "customer_id": "CUST123456", "date_of_birth": "1985-06-15", "gender": "MALE", "title": "Herr", "personal_identifications": [ { "type": "PASSPORT", "id": "A1234567", "issued_by": "DE" }, { "type": "DRIVERS_LICENSE", "id": "DL78901234", "issued_by": "Bayrisches Verkehrsministerium" } ], "contacts": { "phone_contacts": [ { "phone_type": "HOME", "phone_number": "+442071838750" } ] } } }
curl -d "merchantId=1234567" \ -d "projectId=1234" \ -d "merchantTxId=1234567890" \ -d "amount=1000" \ -d "currency=EUR" \ -d "purpose=Beispieltransaktion" \ -d "basket={\"basket_items\":[{\"name\":\"Item 1\",\"quantity\":{\"quantity_amount\":1,\"quantity_unit\":\"pcs\"},\"unit_price\":{\"net\":1000,\"gross\":1200,\"currency\":\"EUR\",\"tax\":2000}}]}" \ -d "urlRedirect=http://www.my-domain.de/klarna/redirect" \ -d "urlNotify=http://www.my-domain.de/klarna/notify" \ -d "hash=2ddc45c15307201dca8a50a094c70ab9" \ https://payment.girosolution.de/girocheckout/api/v2/transaction/start
Die Antwort besteht aus einem JSON Objekt. Das Feld rc liefert einen Fehlercode zurück. Wird rc = 0 zurückgeliefert, wurde die Transaktion erfolgreich initialisiert. Sie bekommen als Antwort eine Transaktionsnummer und die redirectURL zum Klarna-Formular zurück.
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
rc | Ja | Integer | Fehlernummer |
msg | Ja | String(255) | zusätzliche Informationen im Fehlerfall |
reference | Optional | String(36) | eindeutige GiroCheckout Transaktions-ID |
redirect | Optional | String(2048) | Redirect URL zur Weiterleitung des Kunden an sein Online Banking |
HEADER Parameter | |||
hash | Ja | String(32) | HMAC MD5 hash über alle Werte der Rückmeldung. Siehe hash der Rückantwort |
{"reference":"6d2d31b6-c23f-47c4-8f6c-1a0495f35f0f","redirect":"https://testmerch.directpos.de/web-api/de_DE/R.po?n=iNJGcJ4M2LZASZ-swXO5urRQntxOxb92NFiITsP60GcIhP","rc":"0","msg":""}
{"reference":null,"redirect":null,"rc":5030,"msg":"Betrag ungültig"}
Der Ausgang einer Zahlung wird an die im urlNotify Parameter angegebene URL übermittelt. Diese Rückmeldung dient dazu, dem Händler den Ausgang der Transaktion mitzuteilen. Durch diese Information kann der Transaktionsstatus beim Händler geändert werden.
Der Zahlungsausgang einer Transaktion steht im Feld gcResultPayment.
URL: notifyUrl aus der Transaktionsinitialisierung
Bereitzustellen von: Händler
Aufzurufen von: GiroCheckout
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
gcReference | Ja | String(36) | GiroCheckout Transaktions-ID |
gcMerchantTxId | Ja | String(255) | Händler Transaktions-ID |
gcBackendTxId | Ja | String(22) | Zahlungsabwickler Transaktions-ID |
gcAmount | Ja | Integer | bei Dezimalwährungen den Betrag in der kleinsten Währungseinheit angeben, z.B. Cent, Penny |
gcCurrency | Ja | String(3) | Währung |
gcResultPayment | Ja | Integer | Ergebniscodes der Zahlung |
gcHash | Ja | String(32) | HMAC MD5 hash über alle Werte des Aufrufs. Siehe hash generieren |
Als Antwort auf den GET-Request wird einer der folgenden HTTP Statuscodes erwartet.
HTTP Statuscode | Beschreibung |
---|---|
200 (OK) | Die Benachrichtigung wurde korrekt verarbeitet. |
400 (Bad Request) | Der Händler hat die Benachrichtigung nicht verarbeitet, möchte aber auch nicht erneut benachrichtigt werden. |
Alle anderen | Die Benachrichtigung wird max. 10 Mal alle 30 Minuten wiederholt, bis der Händler den HTTP Statuscode 200 oder 400 zurückgibt. |
Nach Beendigung der Zahlung kann der Kunde über einen Link zurück zum Händler kommen. Eine Weiterleitung erfolgt erst, wenn der Käufer den „Abbrechen“ oder „Zurück zum Shop“ Button drückt oder automatisch nach einigen Sekunden.
URL: redirectUrl aus der Transaktionsinitialisierung
Bereitzustellen von: Händler
Aufzurufen von: GiroCheckout
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
gcReference | Ja | String(36) | GiroCheckout Transaktions-ID |
gcMerchantTxId | Ja | String(255) | Händler Transaktions-ID |
gcBackendTxId | Ja | String(22) | Zahlungsabwickler Transaktions-ID |
gcAmount | Ja | Integer | bei Dezimalwährungen den Betrag in der kleinsten Währungseinheit angeben, z.B. Cent, Penny |
gcCurrency | Ja | String(3) | Währung |
gcResultPayment | Ja | Integer | Ergebnis der Zahlung |
gcHash | Ja | String(32) | HMAC MD5 hash über alle Werte des Aufrufs. Siehe hash generieren |
Diese Transaktionen referenzieren auf eine zuvor erfolgte Transaktion. Die Transaktion basiert auf einer Server-zu-Server-Kommunikation und erfordert keine Kundenaktion (Eingabe von Daten).
Bereitzustellen von: GiroCheckout
Aufzurufen von: Händler
Beim Buchen (capture) wird das Kundenkonto mit einem Betrag belastet, die Gutschrift erfolgt auf das Händlerkonto. Dieses Modell setzt voraus, dass der zugrundeliegende Geschäftsvorfall abgeschlossen ist, z.B. wurde ein Warenkorb angeboten, bestellt und an den Kunden ausgeliefert.
Eine Erstattung ist zu verwenden, wenn dem Kunden eine vorangegangene Zahlung komplett oder teilweise erstattet werden soll.
Stornieren ist zu verwenden, wenn eine akzeptierte Transaktion nicht ausgeführt werden soll.
URL CAPTURE: https://payment.girosolution.de/girocheckout/api/v2/transaction/capture
URL REFUND: https://payment.girosolution.de/girocheckout/api/v2/transaction/refund
URL VOID: https://payment.girosolution.de/girocheckout/api/v2/transaction/void
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
merchantId | Ja | Integer | Händler-ID eines Klarna-Projekts |
projectId | Ja | Integer | Projekt-ID eines Klarna-Projekts |
merchantTxId | Ja | String(255) | eindeutige Transaktions-ID des Händlers. Zulässige Zeichen: beliebige Buchstaben (inkl. sprachl. Sonderzeichen), 0-9, Zeichen & = + , : ; . _ ! ? # / |
amount | Ja (optional bei Void) | Integer | Bei Dezimalwährungen den Betrag in der kleinsten Währungseinheit angeben, z.B. Cent, Penny |
currency | Ja (optional bei Void) | String(3) | Währung der Transaktion, gemäß ISO 4217. EUR = Euro |
purpose | Optional | String(27) | Verwendungszweck der Erstattung oder des Capture. Da Klarna diese Feld an sich nicht kennt, speichert GiroCheckout die Information unter basket.soft_descriptor, falls dort von Shopseite keine Information übergeben wird. |
reference | Ja | String(36) | GiroCheckout Transaktions-ID, für die eine Buchung oder Erstattung durchgeführt werden soll |
kassenzeichen | Optional | String(255) | Optionales Feld für die Übergabe eines Kassenzeichens. Dieses wird dann im GiroCockpit in den Transaktionsdetails angezeigt (und bald auch exportiert) und es kann dort auch danach gesucht werden. |
basket | Optional | JSON-String | Optionales Feld, das den Warenkorb beschreibt. Die einzelnen Felder entnehmen Sie der Aufstellung weiter oben. |
shippingInfo | Optional | JSON-String | Optionales Feld, das Informationen zur Lieferung bereit stellt. Die einzelnen Felder entnehmen Sie der Aufstellung weiter unten. |
hash | Ja | String(32) | HMAC MD5 hash über alle Werte des Aufrufs. Siehe hash generieren |
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
shipping_company | Nein | String | Name des Versandunternehmens (so spezifisch wie möglich). |
shipping_method | Nein | String | Versandmethode (z. B. PickUpStore, Home, Postal). |
tracking_number | Nein | String | Sendungsverfolgungsnummer für die Lieferung. |
tracking_uri | Nein | String | URL zur Sendungsverfolgung für den Kunden. |
return_shipping_company | Nein | String | Name des Versandunternehmens für die Rücksendung. |
return_tracking_number | Nein | String | Sendungsverfolgungsnummer für die Rücksendung. |
shipping_delay | Nein | Integer | Verzögerung (in Tagen) vor dem Versand der Bestellung. |
curl -d "merchantId=1234567" \ -d "projectId=1234" \ -d "merchantTxId=1234567890" \ -d "amount=100" \ -d "currency=EUR" \ -d "reference=fb70602d-c137-4413-8432-7dcc69a9d891" \ -d "hash=edb7459114db25c2991d1783d4ab5388" \ https://payment.girosolution.de/girocheckout/api/v2/transaction/capture
Die Antwort besteht aus einem JSON Objekt. Das Feld rc liefert einen Fehlercode zurück. Wird rc = 0 zurückgeliefert, wurde die Transaktion erfolgreich initialisiert. Sie bekommen als Antwort eine Transaktionsnummer und weitere Informationen zurück.
Name | Pflicht | Type | Beschreibung |
---|---|---|---|
rc | Ja | Integer | Fehlernummer |
msg | Ja | String(255) | zusätzliche Informationen im Fehlerfall |
reference | Ja | String(36) | GiroCheckout Transaktions-ID |
referenceParent | Ja | String(36) | GiroCheckout Transaktions-ID der zugrundeliegenden Ursprungstransaktion |
merchantTxId | Ja | String255)( | Händler Transaktions-ID |
backendTxId | Ja | String(22) | Zahlungsabwickler Transaktions-ID |
amount | Ja | Integer | bei Dezimalwährungen den Betrag in der kleinsten Währungseinheit angeben, z.B. Cent, Penny |
currency | Ja | String(3) | Währung |
resultPayment | Ja | Integer | Ergebnis der Transaktion |
hash | Ja | String(32) | HMAC MD5 hash über alle Werte des Aufrufs. Siehe hash generieren |
{"reference":"6d2d31b6-c23f-47c4-8f6c-1a0495f35f0f","redirect":"https://testmerch.directpos.de/web-api/de_DE/R.po?n=iNJGcJ4M2LZASZ-swXO5urRQntxOxb92NFiITsP60GcIhP","rc":"0","msg":""}
{"reference":null,"redirect":null,"rc":5030,"msg":"Betrag ungültig"}