Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
girocheckout:giropay:start [2017/10/25 15:46] thorstenmarx [Bankstatus prüfen] |
girocheckout:giropay:start [2024/06/05 18:24] (aktuell) michaelheumann |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
~~NOCACHE~~ | ~~NOCACHE~~ | ||
- | ====== giropay/ giropay-ID | + | ====== giropay ====== |
- | + | ||
- | Informationen zu giropay sind unter https:// | + | |
giropay kann **ausschließlich** mit der Währung **EURO** verwendet werden. | giropay kann **ausschließlich** mit der Währung **EURO** verwendet werden. | ||
- | Bitte verwenden Sie für Tests ausschließlich das giropay | + | |
+ | <WRAP center round info 70%> | ||
+ | **Wichtiger Hinweis** \\ | ||
+ | In den nächsten Monaten stellen wir voraussichtlich schrittweise unsere Unterstützung | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | <WRAP center round info 70%> | ||
+ | **Änderung an der API** \\ | ||
+ | Folgende Änderung an der API wird in diesen Tagen durchgeführt: | ||
+ | Der Parameter merchantReconciliationReferenceNumber wird ersetzt durch merchantOrderReferenceNumber, | ||
+ | </ | ||
===== Testdaten giropay ===== | ===== Testdaten giropay ===== | ||
- | {{page> | + | {{page> |
+ | |||
+ | ===== Transaktionstypen ===== | ||
+ | Detaillierte Informationen zu den [[girocheckout: | ||
+ | |||
+ | < | ||
+ | left to right direction | ||
+ | skinparam packageStyle rect | ||
+ | |||
+ | rectangle SALE{ | ||
+ | (SALE) --> (REFUND) | ||
+ | (REFUND) | ||
+ | } | ||
+ | rectangle AUTH { | ||
+ | (AUTH) --> (CAPTURE ) | ||
+ | (CAPTURE ) --> (REFUND ) | ||
+ | |||
+ | } | ||
+ | </ | ||
===== Workflow ===== | ===== Workflow ===== | ||
Zeile 25: | Zeile 54: | ||
customer -> shop: | customer -> shop: | ||
- | shop -> girocheckout: | ||
- | girocheckout -> shop: | ||
shop -> girocheckout: | shop -> girocheckout: | ||
girocheckout -> giropay: | girocheckout -> giropay: | ||
Zeile 32: | Zeile 59: | ||
girocheckout -> shop: | girocheckout -> shop: | ||
shop -> customer: | shop -> customer: | ||
- | customer -> bank: | + | customer |
+ | giropay | ||
bank -> customer: | bank -> customer: | ||
customer -> bank: | customer -> bank: | ||
Zeile 45: | Zeile 73: | ||
- | center footer (c)2013 by GiroSolution AG | + | center footer (c)2022 by GiroSolution AG |
</ | </ | ||
- | - Käufer/ | + | - Käufer/ |
- | - Shop prüft Bankstatus ([[girocheckout: | + | - Shop initiiert giropay Transaktion ([[girocheckout: |
- | - Shop bekommt Rückmeldung, | + | |
- | - Shop initiiert giropay/ | + | |
- GiroCheckout initialisiert Transaktion bei giropay | - GiroCheckout initialisiert Transaktion bei giropay | ||
- giropay übermittelt Ergebnis an GiroCheckout | - giropay übermittelt Ergebnis an GiroCheckout | ||
- Shop bekommt Rückmeldung über Initialisierungsausgang (bei Fehler ist Transaktion beendet) | - Shop bekommt Rückmeldung über Initialisierungsausgang (bei Fehler ist Transaktion beendet) | ||
- Shop sendet Redirect URL an Käufer-/ | - Shop sendet Redirect URL an Käufer-/ | ||
- | - Käufer-/ | + | - Käufer-/ |
+ | - giropay leitet dann an das Online-Banking | ||
- Online-Banking zeigt Loginseite an | - Online-Banking zeigt Loginseite an | ||
- Käufer/ | - Käufer/ | ||
Zeile 67: | Zeile 94: | ||
- GiroCheckout sendet Rücksprung zum Händler an giropay | - GiroCheckout sendet Rücksprung zum Händler an giropay | ||
- Käufer/ | - Käufer/ | ||
+ | |||
+ | |||
+ | ==== Reservieren (AUTH) ==== | ||
+ | {{page> | ||
+ | <uml> | ||
+ | left to right direction | ||
+ | skinparam packageStyle rect | ||
+ | |||
+ | rectangle AUTH { | ||
+ | (AUTH) --> (capture) | ||
+ | (AUTH) --> (refund) | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== Reservieren/ | ||
+ | {{page> | ||
+ | <uml> | ||
+ | left to right direction | ||
+ | skinparam packageStyle rect | ||
+ | |||
+ | rectangle SALE{ | ||
+ | (SALE) --> (refund) | ||
+ | } | ||
+ | </ | ||
+ | |||
===== API-Funktionen ===== | ===== API-Funktionen ===== | ||
Zeile 72: | Zeile 124: | ||
==== Übersicht ===== | ==== Übersicht ===== | ||
- | Wie im Workflow dargestellt gibt es mehrere API-Aufrufe während einer giropay Transaktion | + | Wie im Workflow dargestellt, gibt es mehrere API-Aufrufe während einer giropay Transaktion. |
- | - Bankstatus prüfen | ||
- Transaktion initiieren | - Transaktion initiieren | ||
- Bezahlinformation an Händler übermitteln | - Bezahlinformation an Händler übermitteln | ||
- | - Bezahlinformation mit Käuferbrowserweiterleitung zurück zum Händler (durch Käufer nach Zahlung ausgelöst) | + | - Bezahlinformation mit Käuferbrowserweiterleitung zurück zum Händler (durch Käufer nach Zahlung ausgelöst |
- | Im Folgenden werden die API-Felder und Aufrufe näher | + | Im Folgenden werden die API-Felder und Aufrufe näher |
- | ==== Bankstatus prüfen ==== | + | |
- | Es wird geprüft ob eine Bank am giropay Bezahlverfahren oder einer giropay-ID Abfrage teilnimmt. Diesbezüglich wird die BIC des Käufer-Girokontos übermittelt. Die Antwort zeigt ob eine giropay Transaktion oder giropay-ID Abfrage möglich ist. Es wid empfohlen vor jeder Initiierung einer giropay Transaktion oder giropay-ID Abfrage den Bankstatus zu prüfen, da dadurch unnötige Verkaufsabbrüche verhindert werden können. | + | |
- | === API-Aufruf | + | |
- | **URL:** https:// | + | ==== Initialisierung einer giropay Zahlung ==== |
+ | |||
+ | Durch eine erfolgreiche Initialisierung wird eine Referenznummer erstellt sowie ein Weiterleitunslink (redirect) an den Händler übermittelt. Der übermittelte Link führt zum Onlinebanking des Käufers. Er muss an diese URL weitergeleitet werden. Dies kann durch einen HTTP-Redirect-Header, | ||
+ | |||
+ | === Anfrage | ||
+ | **URL:** https:// | ||
**Bereitzustellen von:** GiroCheckout \\ | **Bereitzustellen von:** GiroCheckout \\ | ||
**Aufzurufen von:** Händler | **Aufzurufen von:** Händler | ||
- | == POST-Parameter == | + | == POST Parameter == |
- | ^Name | + | ^Name |
- | |merchantId | + | |merchantId |
- | |projectId | + | |projectId |
- | |bic | + | |merchantTxId |
- | |hash | + | |amount |
+ | |currency | ||
+ | |purpose | ||
+ | |type | ||
+ | |shoppingCartType |Optional | String(19) |Typ des Warenkorbs. Folgende Werte sind zulässig: \\ PHYSICAL = Alle Waren im Warenkorb sind physischer Natur, \\ DIGITAL = Alle Waren im Warenkorb sind digitaler Natur (benötigen also keinen Versand), \\ MIXED = Der Warenkorb enthält sowohl physische als auch digitale Waren (dies ist der Default-Wert, | ||
+ | |shippingAddresseFirstName |(s. Beschr.) |String(100) | Vorname des Addressaten, | ||
+ | |shippingAddresseLastName | ||
+ | |shippingCompany | ||
+ | |shippingAdditionalAddressInformation |Optional | ||
+ | |shippingStreet | ||
+ | |shippingStreetNumber |Optional | ||
+ | |shippingZipCode | ||
+ | |shippingCity | ||
+ | |shippingCountry | ||
+ | |shippingEmail | ||
+ | |merchantOrderReferenceNumber | ||
+ | |cart | ||
+ | |deliveryType |Optional | String(12) | ||
+ | |urlRedirect | ||
+ | |urlNotify | ||
+ | |kassenzeichen | ||
+ | |giropayCustomerId | ||
+ | |hash | ||
== Beispiel == | == Beispiel == | ||
- | {{page> | + | {{page> |
=== Antwort === | === Antwort === | ||
- | Die Antwort besteht aus einem JSON Objekt. Das Feld rc liefert einen Fehlercode. Wird **rc = 0** zurückgeliefert, | + | Die Antwort besteht aus einem JSON Objekt. Das Feld rc liefert einen Fehlercode |
- | == JSON-Parameter == | + | == Parameter == |
^Name | ^Name | ||
|rc | |rc | ||
- | |msg |Ja | + | |msg |Ja |
- | |bankcode | + | |reference |
- | |bic | + | |redirect |
- | |bankname | + | |
- | |giropay | + | |
- | |giropayid | + | |
^HEADER Parameter^^^^ | ^HEADER Parameter^^^^ | ||
- | |hash | + | |hash |
== Beispiel im Erfolgsfall == | == Beispiel im Erfolgsfall == | ||
- | {{page> | + | {{page> |
== Beispiel im Fehlerfall == | == Beispiel im Fehlerfall == | ||
- | {{page> | + | {{page> |
+ | |||
+ | ==== SEPA-konforme Zeichen ==== | ||
+ | {{page> | ||
+ | |||
+ | === cart-Element === | ||
+ | JSON Array mit item Objekten | ||
+ | |||
+ | ^Name | ||
+ | |name | ||
+ | |ean |Optional | ||
+ | |quantity | ||
+ | |grossAmount | ||
+ | |||
+ | == Beispiel == | ||
+ | < | ||
+ | [ { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | }, { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } ] | ||
+ | </ | ||
+ | |||
+ | ==== Benachrichtigung über den Zahlungsausgang ==== | ||
+ | |||
+ | Der Ausgang einer giropay-Zahlung wird an die im // | ||
+ | |||
+ | Der Zahlungausgang der giropay Transaktion steht im Feld gcResultPayment. | ||
+ | |||
+ | Am Ende des Bezahlvorganges auf giropay-Seite findet nach 5 Sekunden eine Weiterleitung an den Shop statt. | ||
+ | |||
+ | |||
+ | === Anfrage === | ||
+ | **URL:** notifyUrl aus der Transaktionsinitialisierung \\ | ||
+ | **Bereitzustellen von:** Händler \\ | ||
+ | **Aufzurufen von:** GiroCheckout | ||
+ | |||
+ | == GET Parameter == | ||
+ | ^Name | ||
+ | |gcReference | ||
+ | |gcMerchantTxId | ||
+ | |gcBackendTxId | ||
+ | |gcAmount | ||
+ | |gcCurrency | ||
+ | |gcResultPayment | ||
+ | |gcHash | ||
+ | |||
+ | === Antwort === | ||
+ | Als Antwort auf den GET-Request wird einer der folgenden HTTP Statuscodes erwartet. | ||
+ | |||
+ | ^HTTP Statuscode | ||
+ | |200 (OK) |Die Benachrichtigung wurde korrekt verarbeitet. | | ||
+ | |400 (Bad Request) | ||
+ | |Alle anderen | ||
+ | |||
+ | ==== Rückleitung des Kunden zum Händler ==== | ||
+ | Nach Beendigung der giropay Zahlung kann der Kunde über einen Link zurück zum Händler kommen. Nach 5 Sekunden erfolgt aber auch eine automatische Weiterleitung. | ||
+ | |||
+ | === Anfrage === | ||
+ | **URL:** redirectUrl aus der Transaktionsinitialisierung \\ | ||
+ | **Bereitzustellen von:** Händler \\ | ||
+ | **Aufzurufen von:** GiroCheckout | ||
+ | |||
+ | == GET Parameter == | ||
+ | ^Name | ||
+ | ^ | ||
+ | |gcReference | ||
+ | |gcMerchantTxId | ||
+ | |gcBackendTxId | ||
+ | |gcAmount | ||
+ | |gcCurrency | ||
+ | |gcResultPayment | ||
+ | |gcHash | ||
- | ==== Senderinformationen abrufen ==== | + | ===== Senderinformationen abrufen |
- | Es wird geprüft ob eine Bank am giropay Bezahlverfahren oder einer giropay-ID Abfrage teilnimmt. Diesbezüglich | + | Mit dieser Funktion können die Senderinformationen |
=== API-Aufruf === | === API-Aufruf === | ||
Zeile 143: | Zeile 294: | ||
^Name | ^Name | ||
|rc | |rc | ||
- | |msg |Ja | + | |msg |Ja |
- | |accountholder | + | |accountholder |
- | |iban | + | |iban |
- | |bic |Optional |String | + | |bic |Optional |String(11) |
^HEADER Parameter^^^^ | ^HEADER Parameter^^^^ | ||
- | |hash | + | |hash |
== Beispiel im Erfolgsfall == | == Beispiel im Erfolgsfall == | ||
Zeile 156: | Zeile 307: | ||
{{page> | {{page> | ||
+ | ===== Weitere Transaktionsarten ===== | ||
+ | Diese Transaktionen verweisen (referenzieren) auf eine zuvor erfolgte Transaktion. Die Transaktion basiert auf einer Server-zu-Server-Kommunikation und erfordert keine Kundenaktion (Eingabe von Daten). | ||
- | ==== giropay Bankenabfrage ==== | + | Bereitzustellen von: GiroCheckout \\ |
- | Gibt eine Liste zurück, welche alle giropay Banken enthält. Aus dieser Bankenliste muss der Käufer seine Bank auswählen. | + | Aufzurufen von: Händler \\ |
- | **URL:** https:// | + | ==== Workflow ==== |
- | **Bereitzustellen von:** GiroSolution AG \\ | + | |
- | **Aufzurufen von:** Händler | + | |
- | == POST Parameter == | + | <uml> |
- | ^Name | + | hide footbox |
- | |merchantId | + | |
- | |projectId | + | |
- | |hash | + | |
- | == Beispiel == | + | participant " |
- | {{page> | + | participant " |
+ | participant "giropay" as gp | ||
- | === Antwort === | + | autonumber |
- | Die Antwort enthält ein JSON Objekt. Wenn **rc = 0** zurückgeliefert wird, enthält das Element **issuer** die zur Verfügung stehenden Banken. | + | |
- | == Parameter == | + | shop -> girocheckout: |
- | ^Name | + | girocheckout |
- | |rc | + | gp -> girocheckout: |
- | |msg |Ja | + | girocheckout -> shop: |
- | |issuer | + | |
- | ^HEADER Parameter^^^^ | + | |
- | |hash | + | |
- | == Beispiel == | + | center footer (c)2024 by S-Public Services GmbH |
- | {{page>codesamples: | + | </uml> |
+ | - Shop sendet referenzierende Transaktion | ||
+ | - GiroCheckout leitet Transaktion zu giropay | ||
+ | - giropay übermittelt Ergebnis an GiroCheckout | ||
+ | - Shop bekommt Rückmeldung über Transaktionsausgang ([[girocheckout: | ||
- | ==== Initialisierung einer giropay Zahlung | + | ==== Buchen (CAPTURE) |
+ | {{page> | ||
- | Die Initialisierung einer giropay Zahlung kann mit oder ohne der Altersverifikation (giropay-ID) stattfinden. Diese Unterscheidung wird ausschließlich anhand der übermittelten projectId getroffen. | + | < |
+ | left to right direction | ||
+ | skinparam packageStyle rect | ||
- | Durch eine erfolgreiche Initialisierung wird eine Referenznummer erstellt sowie ein Weiterleitunslink | + | rectangle AUTH { |
+ | | ||
+ | } | ||
+ | </ | ||
- | === Anfrage | + | ==== Erstattung (REFUND) ==== |
- | **URL:** https://payment.girosolution.de/ | + | {{page> |
- | **Bereitzustellen von:** GiroCheckout \\ | + | <uml> |
- | **Aufzurufen von:** Händler | + | left to right direction |
+ | skinparam packageStyle rect | ||
- | == POST Parameter == | + | rectangle SALE{ |
- | ^Name | + | (sale) --> (REFUND) |
- | ^ | + | } |
- | |merchantId | + | rectangle AUTH { |
- | |projectId | + | (auth) --> |
- | |merchantTxId | + | } |
- | |amount | + | </ |
- | |currency | + | |
- | |purpose | + | |
- | |bic |Ja | + | |
- | |iban | + | |
- | |info1Label|Optional |Optional |Optional |String(30) | + | |
- | |info1Text |Optional |Optional |Optional |String(80) | + | |
- | |info2Label|Optional |Optional |Optional |String(30) | + | |
- | |info2Text |Optional |Optional |Optional |String(80) | + | |
- | |info3Label|Optional |Optional |Optional |String(30) | + | |
- | |info3Text |Optional |Optional |Optional |String(80) | + | |
- | |info4Label|Optional |Optional |Optional |String(30) | + | |
- | |info4Text |Optional |Optional |Optional |String(80) | + | |
- | |info5Label|Optional |Optional |Optional |String(30) | + | |
- | |info5Text |Optional |Optional |Optional |String(80) | + | |
- | |urlRedirect | + | |
- | |urlNotify | + | |
- | |hash | + | |
+ | === POST Parameter === | ||
+ | URL CAPTURE: https:// | ||
+ | URL REFUND: https:// | ||
- | <WRAP center round info 60%> | + | ^Name |
- | Mit den info Parametern können zusätzliche Informationen | + | ^::: ^ CAPTURE ^ REFUND ^::: ^::: ^ |
- | </ | + | |merchantId |
+ | |projectId | ||
+ | |merchantTxId | ||
+ | |amount | ||
+ | |currency | ||
+ | |purpose | ||
+ | |reference | ||
+ | |merchantReconciliationReferenceNumber |Optional |Optional | ||
+ | |final | ||
+ | |kassenzeichen | ||
+ | |hash | ||
== Beispiel == | == Beispiel == | ||
- | {{page> | + | {{page> |
=== Antwort === | === Antwort === | ||
- | Die Antwort besteht aus einem JSON Objekt. Das Feld rc liefert einen Fehlercode zurück. Wird rc = 0 zurückgeliefert, | + | Die Antwort besteht aus einem JSON Objekt. Das Feld resultPayment |
== Parameter == | == Parameter == | ||
- | ^Name | + | ^Name |
- | |rc | + | |rc |
- | |msg |Ja | + | |msg |Ja |
- | |reference | + | |reference |
- | |redirect | + | |merchantTxId |
- | ^HEADER Parameter^^^^ | + | |backendTxId |
- | |hash | + | |amount |
+ | |currency | ||
+ | |resultPayment | ||
+ | |hash | ||
== Beispiel im Erfolgsfall == | == Beispiel im Erfolgsfall == | ||
- | {{page> | + | {{page> |
== Beispiel im Fehlerfall == | == Beispiel im Fehlerfall == | ||
- | {{page> | + | {{page> |
- | ==== Benachrichtigung über den Zahlungsausgang | + | ==== Stornierung (VOID) |
+ | {{page> | ||
- | Der Ausgang einer giropay Zahlung wird, an die im //urlNotify// Paramter 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. | + | === POST Parameter === |
+ | URL VOID: https://payment.girosolution.de/ | ||
- | Der Zahlungausgang der giropay | + | ^Name |
+ | |merchantId | ||
+ | |projectId | ||
+ | |merchantTxId | ||
+ | |reference | ||
+ | |hash | ||
- | Aufgrund des giropay Ablaufes findet **keine automatische Rückleitung des Käufers** an die im Parameter // | + | == Beispiel |
- | + | {{page> | |
- | + | ||
- | === Anfrage === | + | |
- | **URL:** notifyUrl aus der Transaktionsinitialisierung \\ | + | |
- | **Bereitzustellen von:** Händler \\ | + | |
- | **Aufzurufen von:** GiroCheckout | + | |
- | + | ||
- | == GET Parameter == | + | |
- | ^Name | + | |
- | ^ ^giropay^giropay-ID^giropay+giropay-ID | + | |
- | |gcReference | + | |
- | |gcMerchantTxId | + | |
- | |gcBackendTxId | + | |
- | |gcAmount | + | |
- | |gcCurrency | + | |
- | |gcResultPayment | + | |
- | |gcResultAVS | + | |
- | |gcObvName | + | |
- | |gcHash | + | |
=== Antwort === | === Antwort === | ||
- | Als Antwort | + | Die Antwort |
- | ^HTTP Statuscode | + | == Parameter == |
- | |200 (OK) | + | ^Name |
- | |400 (Bad Request) |Der Händler | + | |rc |
- | |Alle anderen | + | |msg |Ja |
+ | |reference | ||
+ | |referenceParent | ||
+ | |merchantTxId | ||
+ | |backendTxId | ||
+ | |amount | ||
+ | |currency | ||
+ | |resultPayment | ||
+ | |hash | ||
- | ==== Rückleitung des Kunden zum Händler ==== | + | == Beispiel im Erfolgsfall |
- | Nach Beendigung der giropay 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. Diese Rückleitung erfolgt nicht automatisch. | + | {{page>codesamples:giropay# |
- | + | ||
- | === Anfrage === | + | |
- | **URL:** redirectUrl aus der Transaktionsinitialisierung \\ | + | |
- | **Bereitzustellen von:** Händler \\ | + | |
- | **Aufzurufen von:** GiroCheckout | + | |
- | + | ||
- | == GET Parameter == | + | |
- | ^Name | + | |
- | ^ | + | |
- | |gcReference | + | |
- | |gcMerchantTxId | + | |
- | |gcBackendTxId | + | |
- | |gcAmount | + | |
- | |gcCurrency | + | |
- | |gcResultPayment | + | |
- | |gcResultAVS | + | |
- | |gcObvName | + | |
- | |gcHash | + | |
- | + | ||
- | ===== Bankauswahl Widget ===== | + | |
- | {{page>girocheckout:widget& | + | |
+ | == Beispiel im Fehlerfall == | ||
+ | {{page> | ||