Debit API | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Inhaltsverzeichnis
Die Debit API bietet dem Partner die Möglichkeit, die Micropayment Zahlart "Lastschrift" für seine Kunden anzubieten und gleichzeitig maximale Kontrolle über die Kundeninteraktionen zu erhalten. Hierfür ist der Partner selbst verantwortlich, dem Kunden die benötigten Eingabeformulare und Informationen anzuzeigen und ihn durch den Bezahlvorgang zu führen. Im wesentlichen erfolgt die Bezahlung in den folgenden Schritten:
Die Schnittstelle ist derzeit mit Hilfe zweier alternativer Technologien implementiert. Die Webservice-URL wird um die Parameterliste als HTTP Querystring (GET-Methode) erweitert. Für den Funktionsnamen ist der Parameter action vorgesehen. http://webservice-url/?action=func-name¶m-name=param-value¶m-name=param-value&... Die Rückgabewerte werden zeilenweise als Name-Wert-Paare im Ergebnisdokument geliefert: error=0 result-name=result-value result-name=result-value ... Im Fehlerfall werden nur die beiden Standardrückgaben error und errorMessage geliefert: error=error-code errormessage=error-message Die jeweiligen Parameter- und Rückgabewerte sind URL-codiert. Sonderzeichen sind nach ISO-8859-1 Standard zu codieren. Bei Listenelementen (Arrays) werden die Indizes in eckige Klammern eingeschlossen. Die Eigenschaften strukturierter Typen (Objekte) werden mit Punkt vom Namen getrennt: http://webservice-url/?...¶m[index]=value¶m.property=value bzw. result[index]=value result.property=valuenach oben An die Service-URL werden Funktion und Parameter als Soap-Envelop gesendet (HTTP Methode POST). Alle Parameter sind hierbei in einem strukturierten Typ enthalten: <?xml version="1.0" encoding="UTF-8"?> <soap-env:Envelope soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dbt="http://webservices.micropayment.de/public/debit/version1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap-env:Body> <dbt:func-name> <param xsi:type="dbt:Dbtfunc-nameRequestTyp"> <param-name xsi:type="param-type">param-value</param-name> <param-name xsi:type="param-type">param-value</param-name> ... </param> </dbt:func-name> </soap-env:Body> </soap-env:Envelope> Das Ergebnisdokument enthält im Erfolgsfall die Rückgabestruktur, ... <?xml version="1.0" encoding="UTF-8"?> <soap-env:Envelope soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:dbt="http://webservices.micropayment.de/public/debit/version1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soap-env:Body> <dbt:func-nameResponse> <return xsi:type="dbt:Dbtfunc-nameResponseTyp"> <result-name xsi:type="result-type">result-value</result-name> <result-name xsi:type="result-type">result-value</result-name> ... </return> </dbt:func-nameResponse> </soap-env:Body> </soap-env:Envelope> ... oder einen Soap-Fault mit den Standardrückgaben error und errorMessage: <?xml version="1.0" encoding="UTF-8"?> <soap-env:Envelope soap-env:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" <soap-env:Body> <soap-env:Fault> <faultcode>error-code</faultcode> <faultstring>error-message</faultstring> <faultactor></faultactor> <detail></detail> </soap-env:Fault> </soap-env:Body> </soap-env:Envelope>nach oben Jeder Aufruf erfolgt mittels definierter URL der Serviceschnittstelle und dem erforderlichen Parameter accessKey zur Identifizierung des Aufrufers. Der AccessKey wird automatisch bei der Partnerregistrierung im Micropayment-System erzeugt, und kann im Controlcenter ermittelt werden. Optional erwarten alle Funktionen den Parameter testMode. Mit seiner Hilfe lässt sich die integrierte Testumgebung aktivieren. Scheitert eine Funktion, wird der aufgetretene Fehler durch die Rückgaben error und errorMessage beschrieben. error enthält hier einen numerischen Code, der programmseitig ausgewertet werden kann. errorMessage hingegen enthält die nähere Beschreibung im Klartext und sollte im Fehlerfall mitprotokolliert werden. nach obenDie API ist in der Lage verschiedene Ereignisse an eine Schnittstelle des Projektbetreibers zu senden. Dafür muss in der Projektkonfiguration die URL der Schnittstelle eingetragen werden. Alle Benachrichtigungen übermitteln den Parameter testMode, der angibt, ob sie von der Testumgebung ausgelöst wurden. Wird beim Aufruf der Benachrichtigungsurl ein Fehler zurückgegeben, wird eine automatische Email an den Betreiber mit den Aufrufparametern versandt. nach obenAlle Funktionen erwarten den optionalen Parameter testMode, der festlegt, dass die Daten in einer abgetrennten Umgebung (der sogenannten Sandbox) erzeugt und abgerufen werden sollen. Keiner der hier angelegten Bezahlvorgänge wird jemals ausgeführt, es können aber mit speziellen Funktionen einige externe Ereignisse simuliert werden. Die Testumgebung soll es ermöglichen, während und nach Integration der API, alle Abläufe realitätsnah auszutesten oder sogar automatisierte Testfälle zu implementieren (Unittests). nach obenUm Fehlerbehandlung zu vereinfachen, sind die Fehlercodes der Rückgabe error in vier verschiedene Klassen mit eigenem Nummernkreis unterteilt.
Im folgenden wird auf die Verwendung und die Besonderheiten der Schnittstellenfunktionen eingegangen. Die jeweils vollständige Parameter- und Rückgabenliste sind in der Kurzreferenz zusammengefasst. Die Funktion löscht alle Customer und Sessions in der Testumgebung. Mit ihrer Hilfe können u.a. Kollisionen für customerId und sessionId zu vermieden werden im Zusammenhang mit automatischen Unittests. nach obenVor jedem Bezahlvorgang muss ein Kunde angelegt werden. Zur Identifizierung kann mit customerId eine eigene Kundennummer, der Username oder die Emailadresse übergeben werden, andernfalls wird von der API eine eindeutige ID erzeugt und zurückgegeben. Die Funktion scheitert, wenn der Wert in customerId bereits für den Account existiert. AchtungWenn mehrere Projekte betrieben werden, in denen sich die Kunden getrennt anmelden müssen, sollten verschiedene Präfixe vor den Wert in customerId gesetzt werden, z.B: "prj1:max@muster.de". An den Kundensatz können mit der assoziativen Liste freeParams beliebig viele zusätzliche Daten als freie Parameter gebunden werden. Diese können später mit customerGet abgerufen oder mit customerSet verändert bzw. erweitert werden. Dadurch ist prinzipiell eine Anbindung der API ohne eigene Datenbank möglich, indem alle anderen Kundendaten wie Email, Passwort oder Sperrstatus als freie Parameter hinterlegt werden. Einem Kunden können mit customerSet jederzeit weitere freie Parameter hinzugefügt werden, oder bestehende geändert werden. Dabei werden nur Werte erzeugt oder überschrieben, die im Parameter freeParams enthalten sind; bestehende bleiben unverändert. Zum Löschen eines Wertes kann einfach ein leerer String ("") übergeben werden. nach obenNachdem ein Kunde angelegt wurde und vor der Bezahlung, muss die Bankverbindung mit bankaccountSet hinterlegt werden. Sollte sich diese einmal ändern kann auch die neue Bankverbindung mit dieser Funktion übergeben werden. Der Parameter customerId identifiziert dabei den Kunden. Die Funktion prüft Kontonummer und Bankleitzahl auf Plausibilität nach den Vorgaben der Bundesbank und scheitert gegebenenfalls. Im Erfolgsfall wird der ermittelte Name der Bank zurückgeliefert. Die hinterlegten Bankdaten des Kunden können mit bankaccountGet wieder ermittelt werden, z.B. um sie vom Kunden bearbeiten zu lassen. Beide Funktionen liefern zusätzlich den Sperrstatus der Bankverbindung (siehe bankaccountBar). nach obenMit Hilfe der Funktionen bankCheck und bankaccountCheck können Bankname ermittelt und die Kontonummer geprüft werden, ohne dass sie einem Kunden zugeordnet werden. Die Funktion bankaccountBar ermöglicht es, eine bestimmte Bankverbindung generell zu sperren bzw. wieder freizugeben. Ein Aufruf mit sessionCreate würde dann scheitern, wenn der zugehörige Kunde eine gesperrte Bankverbindung besitzt. bankaccountSet und bankaccountGet liefern mit barStatus den jeweiligen Sperrstatus nach obenMit den Funktionen addressSet und contactDataSet kann ein Kundendatensatz um Namen und Anschrift erweitert werden. Für den Bezahlvorgang ist dies nicht unbedingt notwendig, kann aber für evtl. Forderungsmaßnahmen sinnvoll sein. Zum Abruf der Daten stehen die Funktionen addressGet sowie contactDataGet zur Verfügung. Während bei addressSet alle Daten angegeben werden müssen, kann bei contactDataSet jeder Bestandteil separat übermittelt werden. Die anderen Parameter sind in diesem Fall wegzulassen, und werden nicht gelöscht. nach obenNachdem Kunde und Bankverbindung angelegt wurden, kann ein neuer Bezahlvorgang erzeugt werden. Der Parameter sessionId muss eindeutig sein und wird ggf. generiert und zurückgegeben - ähnlich, wie customerId in der Funktion customerCreate. Es ist sinnvoll hier z.B. die aktuelle Sitzungsnummer des Users anzugeben, um Doppelbuchungen zu vermeiden. Die Parameter project und projectCampaign legen fest, welchem Projekt und welcher Kampagne der Erlös zugeordnet werden soll. Die Parameter account und webmasterCampaign werden benötigt, wenn das Projekt webmasterfähig ist. WichtigDie Funktion scheitert, wenn im Parameter projectCampaign eine ungültige oder gesperrte Kampagne angegeben wurde. Ist hingegen webmasterCampaign ungültig, wird der Parameter lediglich ignoriert. Mit amount, currency und title werden Artikel und Preis (in Cent) festgelegt. Werden die Parameter weggelassen, werden die Standardwerte aus der Projekteinstellung angenommen. Der Verwendungszweck entspricht dem Parameter payText, bzw. wird aus dem Projektnamen und dem Wert in title zusammengesetzt. Mit der Funktion sessionGet können alle übergebenen oder generierten Werte zurückgegeben werden, um sie z.B. dem Kunden zur Bestätigung anzuzeigen. WichtigWurde in der Konfiguration festgelegt, dass NUR die Standardwerte verwendet werden sollen, werden die Parameter amount und title ignoriert. Ähnlich wie bei der Funktion customerCreate, können auch dem Bezahlvorgang freie Parameter übergeben und mit der Funktion sessionGet wieder ermittelt werden. Der separate Parameter ip wird zusammen mit dem Zeitstempel für Missbrauchsfälle vorgehalten und sollte die IP des Benutzers enthalten, der die Bezahlung veranlasst. Die Funktion liefert typischerweise den Status "INIT" zurück. Wurde allerdings für den Kunden ein unbestätigter Vorgang gefunden, wird dieser mit den Werten dieses Aufrufs überschrieben und es wird der Status "REINIT" zurüchgegeben. Bei erfolgreichem Aufruf von sessionCreate, wird die Benachrichtigung sessionStatus ausgelöst. Wurde die Bankverbindung des Kunden mit bankaccountBar generell gesperrt, scheitert der Aufruf. AchtungDie Benachrichtigung sessionStatus erfolgt sofort, noch bevor die Rückgabe geliefert wird. Die Funktion ermittelt den aktuellen Status eines Vorgangs, sowie alle Daten entsprechend der Parameter aus der Funktion sessionCreate. Die Rückgabe status kann folgende Zustände annehmen:
In den Fällen "FAILED" und "REVERSED", wird mit statusDetail die detaillierte Ursache im Klartext zurückgegeben. Zusätzlich werden alle Daten entsprechend der Parameter aus der Funktion sessionCreate zurückgegeben. Für optionale Parameter werden dabei die Voreinstellungen bzw. Vorgaben aus der Konfiguration geliefert. nach obenAngelegte Bezahlvorgänge müssen mit dieser Funktion bestätigt werden. Sie sollte unmittelbar nach dem ausdrücklichen Abbuchungauftrags des Kunden aufgerufen werden, oder sogar nach der Bereitstellung des gekauften Artikels, z.B. nach abgeschlossenem Download eines Dokuments. Bei Aufruf von sessionApprove, wird die Benachrichtigung sessionStatus ausgelöst. AchtungDie Benachrichtigung sessionStatus erfolgt sofort, noch bevor die Rückgabe geliefert wird. Mit Hilfe dieser Funktion können alle offenen, sowie abgeschlossenen Vorgänge eines Kunden ermittelt werden. Die Rückgabe besteht aus einer numerisch indizierten Liste aller zugehöriger SessionID's. Die Details der Sessions können wiederum mit sessionGet ermittelt werden. nach obenAlle bestätigten Zahlungen werden zusammengefasst und der Bank zur Abbuchung vorgelegt. Der anschließende Geldeingang löst typischerweise die Statusänderung "CHARGED" und die entsprechenden Benachrichtigung sessionStatus aus. Ausserdem wird eine Transaktion des Typs "BOOKING" angelegt und die Benachrichtigung transactionCreate ausgelöst. Die Funktion dient dazu, um diesen Geldeingang in der Testumgebung zu simulieren. nach obenDie Funktion simuliert im Testmodus eine Rückbelastung des Betrages. In der Realität kann das z.B. durch Widerspruch des Kontoinhabers oder mangelnde Deckung ausgelöst werden. Auch hier wird mittels sessionStatus und transactionCreate das Zielsystem benachrichtigt, sowie eine Transaktion des Typs "REVERSAL" erzeugt. nach obenWurde mit sessionReverseTest ein Storno in der Testumgebung simuliert, kann anschliessend die Nachzahlung simuliert werden. Der optionale Parameter amount enthält den bezahlten (Teil-)Betrag, wird er weggelassen, wird die Nachzahlung des gesamten offenen Betrags simuliert und als Rückgabe amount zurückgeliefert. sessionRechargeTest sowie das reale Ereignis eines Zahlungeingangs erzeugt eine Transaktion vom Typ "BACKPAY" und löst die zugehörige Benachrichtigung transactionCreate aus. Wurde der gesamte offene Betrag bezahlt, wird zusätzlich sessionStatus auf "RECHARGED" gesetzt und die Benachrichtiung sessionStatus ausgelöst. nach obenMit Hilfe dieser Funktion kann ein eigener Zahlungseingang, oder eine nachträgliche Forderungsminderung verbucht werden. Sie erzeugt eine neue Transaktion vom Typ "EXTERNAL" und löst zusätzlich die Benachrichtigung transactionCreate aus. Neben Datum und Betrag kann zusätzlich ein Beschreibungstext zur eigenen Verwendung übermittelt werden. Wird der gesamte offene Betrag oder mehr verbucht ändert sich der Status der Session in "RECHARGED". Es besteht auch die Möglichkeit mit einem negativem Betrag die offene Summe wieder zu erhöhen oder überzahlte Sessions auszugleichen. nach obenDiese Funktionen dienen der Ermittlung aller Transaktionen einer Session. transactionList liefert eine Liste der Transactions-IDs, die wiederum als Eingangsparameter für transactionGet genutzt werden können, um die Details abzurufen. Der Typ der Transaktion in der Rückgabe type kann folgende Werte enthalten:
Jede Statusänderung, auch die Erzeugung, eines Bezahlvorgangs führt zu jeweils einer Benachrichtigung mit dieser Funktion z.B. wenn der Betrag bestätigt, eingezogen oder storniert wird. Es werden sessionId und der aktuelle Status, sowie alle freien Parameter mitgeschickt. Als Ergebnis können neue oder veränderte freeParams zurückgegeben werden, die anschließend zur Session hinzugefügt werden. nach obenWie oben beschrieben, können mehrere verschiede Transaktionen je Session erzeugt werden. Die Benachrichtigung dient dazu das Zielsystem darüber zu informieren. Bei den Transaktionsarten "BOOKING" und "REVERSAL" geht dies immer mit einer Statusänderung der Session einher und der zugehörigen Benachrichtigung sessionStatus. Wurde bei "BACKPAY" und "EXTERNAL" nicht der komplette offene Betrag gebucht, ändert sich der Status der Session jedoch nicht. nach obenA. Kurzreferenzlöscht alle Kunden und Transaktionen in der Testumgebung Tabelle A.1. Funktion resetTest Parameter
legt neuen Kunden an Tabelle A.2. Funktion customerCreate Parameter
Tabelle A.3. Funktion customerCreate Rückgabe
ordnet weitere freie Parameter dem Kunden zu, oder ändert sie Tabelle A.4. Funktion customerSet Parameter
ermittelt alle freien Parameter des Kunden Tabelle A.5. Funktion customerGet Parameter
Tabelle A.6. Funktion customerGet Rückgabe
erzeugt oder ändert Bankverbindung eines Kunden Tabelle A.7. Funktion bankaccountSet Parameter
Tabelle A.8. Funktion bankaccountSet Rückgabe
ermittelt die Bankverbindung des Kunden Tabelle A.9. Funktion bankaccountGet Parameter
Tabelle A.10. Funktion bankaccountGet Rückgabe
prüft Bankleitzahl und ermittelt Banknamen Tabelle A.11. Funktion bankCheck Parameter
Tabelle A.12. Funktion bankCheck Rückgabe
prüft Bankverbindung und ermittelt Banknamen Tabelle A.13. Funktion bankaccountCheck
Parameter
Tabelle A.14. Funktion bankaccountCheck Rückgabe
Sperrt Bankverbindung oder gibt sie frei Tabelle A.15. Funktion bankaccountBar Parameter
erzeugt oder ändert Adressdaten eines Kunden Tabelle A.16. Funktion addressSet Parameter
ermittelt die Adresse des Kunden Tabelle A.17. Funktion addressGet Parameter
Tabelle A.18. Funktion addressGet Rückgabe
erzeugt oder ändert Kontaktdaten eines Kunden Tabelle A.19. Funktion contactDataSet Parameter
ermittelt die Kontaktdaten des Kunden Tabelle A.20. Funktion contactDataGet Parameter
Tabelle A.21. Funktion contactDataGet Rückgabe
erzeugt einen neuen Bezahlvorgang Tabelle A.22. Funktion sessionCreate Parameter
Tabelle A.23. Funktion sessionCreate Rückgabe
ordnet weitere freie Parameter der Session zu, oder ändert sie Tabelle A.24. Funktion sessionSet Parameter
ermittelt Daten eines Bezahlvorgangs Tabelle A.25. Funktion sessionGet Parameter
Tabelle A.26. Funktion sessionGet Rückgabe
bestätigt den Lastschrifteinzug eines Vorgangs Tabelle A.27. Funktion sessionApprove Parameter
Tabelle A.28. Funktion sessionApprove Rückgabe
ermittelt alle Bezahlvorgänge eines Kunden Tabelle A.29. Funktion sessionList Parameter
Tabelle A.30. Funktion sessionList Rückgabe
simuliert die Abbuchung für alle bestätigten Vorgänge Tabelle A.31. Funktion sessionChargeTest
Parameter
Tabelle A.32. Funktion sessionChargeTest
Rückgabe
simuliert Stornierung eines einzelnen Vorgangs Tabelle A.33. Funktion sessionReverseTest
Parameter
Tabelle A.34. Funktion sessionReverseTest
Rückgabe
simuliert die komplette Nachzahlung eines stornierten Vorgangs Tabelle A.35. Funktion sessionRechargeTest
Parameter
Tabelle A.36. Funktion sessionRechargeTest
Rückgabe
erstellt eine Transaktion vom Typ "EXTERNAL" Tabelle A.37. Funktion transactionCreate
Parameter
ermittelt alle Transaktionen für einen Bezahlvorgang Tabelle A.38. Funktion transactionList Parameter
Tabelle A.39. Funktion transactionList Rückgabe
ermittelt Daten einer Transaktion Tabelle A.40. Funktion transactionGet Parameter
Tabelle A.41. Funktion transactionGet Rückgabe
Benachrichtigt bei jeder Änderung des Vorgangsstatus, und fügt weitere freie Parameter hinzu Tabelle A.42. Benachrichtigung sessionStatus
Parameter
Tabelle A.43. Benachrichtigung sessionStatus
Rückgabe
Benachrichtigt bei Erstellung einer neuen Transaktion Tabelle A.44. Benachrichtigung transactionCreate
Parameter
|