Classic Payment API - What is paysafecard?
Transcription
Classic Payment API - What is paysafecard?
Classic Payment API Service Oriented Prepaid Gateway Classic Payment API SOPG (Service Oriented Prepaid Gateway – xml-basiertes Protokoll) Dokumentation Versionshistorie Version Date Description Author 0.1 10.03.2013 Erster Entwurf Paul Kneidinger 0.2 20.03.2013 Details hinzugefügt und umstrukturiert Matthias Vilsecker 0.3 21.03.2013 In App Payment hinzugefügt Matthias Vilsecker 0.4 24.04.2013 Prüfung und weitere Ergänzung Natasa Jeremic 1.0 10.02.2013 Finale Version Natasa Jeremic 1.1 27.01.2014 Kleinere Änderungen Natasa Jeremic Mit technischen Fragen zur Implementierung wenden Sie sich bitte an integration@paysafecard.com 1 Classic Payment API Service Oriented Prepaid Gateway Inhaltsverzeichnis 1.Einführung 2.Funktionsübersicht Zahlung 2.1 Ablauf von Zahlungen 2.2 my paysafecard 2.2.1KYC-Level 3.Über SOPG 3.1Voraussetzungen 3.2 Umgang mit Fehlern 3.2.1 Beschreibung Fehlermeldungen 3.3 Inhaltstyp und Zeichensatz 4.Definition von paysafecard Systemen 4.1 Testumgebung (M-Test) 5.Technische Übersicht 6.Funktionsdetails und WSDL-Struktur 6.1Funktionen 6.2Zahlungsbenachrichtigung 6.2.1 Neuübermittlung der Zahlungsbenachrichtigung 6.3Parameter 6.3.1 Beschreibung von Parametern 6.3.2Einschränkungen 6.3.3 Disposition Status 6.4Dispositionszeitfenster 6.5 Details Zahlungsfenster 6.5.1 Zahlungsfenster Desktop 6.5.2 Zahlungsfenster Mobilgeräte 6.6 Gebietsschema und Spracheinstellungen 7.Beispielzahlung 7.1createDisposition 7.2 getMid (optional) 7.3getCustomerPanel 7.4 pnUrl Request 7.4.1executeDebit 8.Anhang A: Fehlercodes 9.Anhang B: In Zahlungsbenachrichtigungen unterstützte Ländercodes 10. Anhang C: In App Payment 10.1 Zahlungsfenster-Details für In App Payments 10.2 Technische Übersicht 11. Beispielintegration In App Payment 11.1 Unterstützte Betriebssysteme 11.2 Technische Übersicht: Beispielintegration 11.3Implementierungsbeispiel 11.3.1 Initiieren der Zahlungskommunikation 11.3.2 Kommunikation zwischen Mobile App und Schließen des Client-Browsers 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 7 8 8 8 10 10 10 11 11 11 11 11 12 13 13 14 14 15 18 18 18 19 19 19 20 20 20 22 2 Classic Payment API Service Oriented Prepaid Gateway 1. Einführung Dieses Dokument bietet einen detaillierten Überblick über Verwendung und Parameter des Service Oriented Prepaid Gateway (SOPG) von paysafecard. Das Gateway ist ein SOAP-basierter XML-Webservice, der Zugriff auf das API-Clientfunktionen bietet, die mit jedem SOAP-kompatiblen Clientsystem genutzt werden können. Im ersten Kapitel finden Sie eine Funktionsübersicht des Zahlungsprozesses. Im Anschluss wird paysafecard SOPG im Detail vorgestellt. Es folgt eine Darstellung der Systeme von paysafecard sowie der technischen Details einschließlich einer vollständigen Beschreibung der Funktionen und Parameter. Am Ende des Dokumentes finden Sie neben einem Implementierungsbeispiel auch eine Einführung in das Thema In App Payments in Android Apps. 2. Funktionsübersicht Zahlung In jede Zahlung sind drei Parteien involviert: Ein Kunde, ein Geschäftspartner und das paysafecard Unternehmen („PSC“). Zahlungen erfolgen als „Zahlungstransaktionen“ oder „Dispositionen“, die durch eine „Merchant Transaction ID“ (MTID) eindeutig gekennzeichnet sind und einen Wert enthalten, der als „Betrag“ bezeichnet wird und üblicherweise der Geldsumme entspricht, mit der ein Kunde etwas erwirbt. 2.1 Ablauf von Zahlungen 3 Classic Payment API Service Oriented Prepaid Gateway 2.2 my paysafecard my paysafecard ist: Ein Zahlungskonto, das paysafecard Kunden die Möglichkeit bietet, sich zu registrieren und mit Benutzername und Passwort Zahlungen vorzunehmen; sowie ein kundenfreundliches Instrument zur einfacheren Verwaltung von PINs, das einen klaren Überblick gestattet. Bezüglich der Integration ist es unerheblich, ob ein Kunde ein my paysafecard Konto zur Zahlung nutzt oder die PIN direkt eingibt. 2.2.1 KYC-Level Als Know your customer (KYC; deutsch: kenne deinen Kunden) wird eine Legitimationsprüfung von Neukunden zur Verhinderung von Geldwäsche bezeichnet, welche insbesondere für Kreditinstitute und Versicherungen vorgeschrieben ist. my paysafecard kennt zwei unterschiedliche KYC-Level: Simple Der Kunde hat die initiale Registrierung erfolgreich durchlaufen und eine Handynummer sowie eine E-Mail Adresse bestätigt. Full Möchte der Kunde seinen Verfügungsrahmen erweitern, kann er einen Identifikationsprozess durchlaufen, im Rahmen dessen folgende Dokumente verifiziert werden (der genaue Ablauf kann sich, je nach gesetzlichen Bestimmungen, von Land zu Land unterscheiden): • von einer Regierungsbehörde ausgestelltes Ausweisdokument mit Foto und Name (z. B. Reisepass, Führerschein, Personalausweis etc.) oder • Adressnachweis, z. B. ein Steuerbescheid oder die Rechnung eines Energieversorgers (Strom, Wasser, Gas, Kabel etc.) 3. Über SOPG Über das Service Oriented Prepaid Gateway (SOPG) werden die Zahlungsfunktionalitäten von paysafecard als Webservice angeboten. Das Webservice basiert auf dem SOAP-Protokoll und kann, unabhängig von der Programmiersprache, von jedem SOAP-Client genutzt werden. Der komplette Zahlungsprozess wird zwischen dem System des Geschäftspartners und dem paysafecard SOPG abgewickelt. 3.1 Voraussetzungen Ein Geschäftspartner kann sich nur dann mit den Systemen von paysafecard verbinden, wenn folgende Voraussetzungen erfüllt sind: Er besitzt von paysafecard vergebene Login Daten (Benutzername/Passwort) Die IP-Adresse des Zahlungsservers wurde autorisiert (wird beim Versuch, auf den Dienst zuzugreifen, ein „Fehler 403“ ausgegeben, ist anzunehmen, dass die IP-Adresse noch nicht freigeschaltet wurde). 3.2 Umgang mit Fehlern Zu allen SOPG-Funktionen werden „errorCode“ und „resultCode“ ausgegeben. Der „resultCode“ kann folgende Werte annehmen: „0“ (erfolgreich), „1“ (logisches Problem) oder „2“ (technisches Problem). Generell gelten folgende Regeln: „1“ deutet darauf hin, dass ein Problem mit den übermittelten Daten vorliegt (z. B. falsche Login Daten, Transaktionszeit abgelaufen etc.). Ein erneuter Versuch mit denselben Daten wird nicht erfolgreich sein. „2“ (technisches Problem) bedeutet, dass der Service vorübergehend nicht erreichbar ist – der Request kann erneut übermittelt werden. 4 Classic Payment API Service Oriented Prepaid Gateway 3.2.1 Beschreibung Fehlermeldungen Bitte bedenken Sie, dass Fehlermeldungen für Kunden nur im paysafecard Zahlungsfenster angezeigt werden. In allen anderen Meldungen wird nur der Fehlercode angezeigt. %1, %2,... sind Platzhalter für verschiedene Werte, z. B. MTID, MID. Alle Fehlercodes und Meldungen finden Sie in Kapitel 8. 3.3 Inhaltstyp und Zeichensatz Bitte achten Sie beim Übermitteln von Requests darauf, dass im HTTP-Header folgende Werte gesetzt sind: Content-Type: text/xml;charset=UTF-8 4. Definition von paysafecard Systemen 4.1 Testumgebung (M-Test) paysafecard stellt das „paysafecard Testsystem“ (SOATEST), eine Testumgebung für die Integration neuer Geschäftspartner zur Verfügung. Die Integration neuer Geschäftspartner erfolgt zunächst in diesem Testsystem, wobei das Partner Integration and Support Team die neuen Partner unterstützt und die Abnahmetests durchführt. Nach Abnahme der Integration kann die Umstellung auf die Produktivsysteme erfolgen, die für den Geschäftspartner in folgenden Schritten abläuft: Umstellung auf Produktiv Login Daten (alle von paysafecard vergeben) Ersetzen der Service Endpoint URL Ersetzen der WSDL URL Alle Daten werden vom Merchant Service Center zur Verfügung gestellt. 5. Technische Übersicht 5 Classic Payment API Service Oriented Prepaid Gateway 6. Funktionsdetails und WSDL-Struktur In diesem Dokument werden alle für den grundlegenden Zahlungsprozess erforderlichen Funktionen der SOPG WSDL-Struktur beschrieben. Bitte beachten Sie, dass der Vertrag viele weitere Funktionen umfasst. Alle erforderlichen Zahlungsparameter müssen angegeben und eine Übermittlung vorgenommen werden, auch wenn der Wert NULL bleibt. Benötigt das Webservice Framework eine WDSL in Echtzeit, laden Sie die SOPG WSDL von der WSDL URL herunter und stellen Sie diese in Ihrer lokalen Umgebung zur Verfügung. HINWEIS: Ein Abruf der WSDL von den paysafecard Servern in Echtzeit ist nicht möglich. 6.16.1 Funktionen Name der Funktion Beschreibung Request-Elemente ResponseElemente createDisposition Der Geschäftspartner initiiert den Zahlungsprozess durch Übermittlung eines „createDisposition“ Requests an paysafecard, durch das eine Disposition auf dem Server angelegt wird. Der zulässige Maximalbetrag liegt bei 1.000,00 EUR (bzw. einem gleichwertigen Betrag in einer anderen Transaktionswährung). username [erforderlich] password [erforderlich] mtid [erforderlich] subId [erforderlich] amount [erforderlich] currency [erforderlich] okUrl [erforderlich] nokUrl [erforderlich] merchantclientId [erforderlich] pnUrl [erforderlich] clientIp [erforderlich] dispositionrestrictions [erforderlich] shopId [erforderlich] shoplabel [erforderlich] mtid, subId, mid, resultCode, errorCode Ermöglicht dem Geschäftspartner, dem Kunden die Zahlungsseite für paysafecard Zahlungen anzuzeigen. Im Falle einer erfolgreichen getCustomerPanel paysafecard Zuweisung wird der Kunde zur „okUrl“ weitergeleitet. Klickt der Kunde auf „Abbrechen“, wird er zur „nokUrl“ weitergeleitet. executeDebit Bucht das Geld von der paysafecard des Kunden ab. In diesem Schritt wird die Zahlung abgeschlossen, wenn die „close“ Flag auf „1“ gesetzt ist. Der Geschäftspartner kann die Transaktion bis zum Ende der Dispositionszeit offen halten (der Betrag wird in voller Höhe reserviert). Möchte der Geschäftspartner die Disposition schließen, ohne die Zahlung tatsächlich durchzuführen, muss die Funktion mit „amount=0.00“ aufgerufen werden. mid [erforderlich] mtid [erforderlich] amount [erforderlich] currency [erforderlich] language [optional] locale [optional] username [erforderlich] password [erforderlich] mtid [erforderlich] subId [erforderlich] amount [erforderlich] currency [erforderlich] close [erforderlich] partialDebitId [optional] mtid, subId, resultCode, errorCode 6 Classic Payment API Service Oriented Prepaid Gateway Name der Funktion Beschreibung Request-Elemente ResponseElemente getMid (optional) Der Geschäftspartner kann die der jeweiligen Währung zugewiesene MID (einzigartige ID des Geschäftspartners) abfragen. username [erforderlich] password [erforderlich] currency [erforderlich] username [erforderlich] password [erforderlich] currency [erforderlich] getSerialNumbers (optional) Ruft den Disposition Status ab und prüft, ob dieser dem erwarteten Status entspricht, bevor die nächste Funktion aufgerufen wird. username [erforderlich] password [erforderlich] mtid [erforderlich] subId [erforderlich] currency [erforderlich] mtid, subId, resultCode, errorCode, amount, currency, dispositionState, serialNumbers modifyDisposition Value (optional) username [erforderlich] password [erforderlich] Möglichkeit, den Betrag der mtid [erforderlich] ursprünglichen Disposition subId [erforderlich] zu reduzieren. amount [erforderlich] currency [erforderlich] mtid, subId, resultCode, errorCode 6.2 Zahlungsbenachrichtigung Die Zahlungsbenachrichtigung wird verwendet, um den Geschäftspartner nach der paysafecard Zuweisung unabhängig vom Kundenverhalten zu informieren. Dieser Service stellt sicher, dass Dispositionen vor dem Aufladen des Kundenkontos abgeschlossen werden können und ist deshalb ausgesprochen empfehlenswert, um unvollständige Transaktionen zu verhindern. API-Parameter Beschreibung Ausgabe-Parameter Merchant ResponseElemente pnURL Eine Zahlungsbenachrichtigung wird nur nach erfolgreicher paysafecard Zuweisung übermittelt. Diese Benachrichtigung wird zusätzlich zur Weiterleitung zur „okURL“ versandt. Im Falle technischer Anwendungsfehler auf Seiten des Geschäftspartners wird die Zahlungsbenachrichtigung erneut übermittelt. mtid eventType (ASSIGN_CARDS is returned) serialNumbers currency disposition amount cardTypeld1 HTTP 200 Der Parameter bietet eine Kombination aus dem Standard-ISO-Ländercode (des Landes, in dem paysafecard verkauft wurde) und der ID des Kartentyps (definiert den paysafecard Typ, z. B. paysafecard junior). Weitere Informationen hierzu entnehmen Sie bitte Anhang B: In Zahlungsbenachrichtigungen unterstützte Ländercodes. 1 7 Classic Payment API Service Oriented Prepaid Gateway 6.2.1 Wiederholte Zustellung der Zahlungsbenachrichtigung Im Falle technischer Fehler (z. B. Socket Timeout) oder Anwendungsfehler (z. B. HTTP Statuscode 500) wird die Zahlungsbenachrichtigung in regelmäßigen Abständen erneut übermittelt, bis eines der folgenden Kriterien erfüllt ist: Die Zahlungsbenachrichtigung wurde erfolgreich zugestellt (d. h. Zahlungsserver antwortet mit HTTP-Statuscode 200) Die maximale Anzahl von Wiederholungsversuchen wurde erreicht (aktuelle Konfiguration: 5 Wiederholungsversuche). 6.3 Parameter 6.3.1 Parameter-Beschreibung username – individueller Konto-Benutzername von paysafecard zur Authentifizierung zur Verfügung gestellt password – individuelles Konto-Passwort von paysafecard zur Authentifizierung bereitgestellt mtid – (eindeutige) Transaktions-ID, eindeutiger Identifikator für jede Disposition. max. Länge: 60 Zeichen empfohlen: bis zu 20 Zeichen durch Geschäftspartner bereitgestellt Nur folgende Werte zulässig: A-Z, a-z, 0-9 sowie - (Bindestrich) und _ (Unterstrich) Beispiel: 3516-6s4dfsad41 subId – zwingend erforderlicher Parameter, sofern nichts anderes vereinbart wurde, ist dieser Wert leer zu lassen. Sogenannte „reporting criteria“ (Reportingkriterien) bieten die Möglichkeit, Transaktionen zu klassifizieren max. Länge: 8 Zeichen (Groß-/Kleinschreibung) Vereinbarung mit paysafecard erforderlich Beispiel: shop1 amount – Dispositionsbetrag Angefragter Betrag darf 1.000,00 EUR (bzw. einen gleichwertigen Betrag in einer anderen Transaktionswährung) nicht überschreiten max. 11 Zeichen vor - exakt 2 Zeichen nach dem Dezimalpunkt Verwenden Sie einen Punkt als Dezimaltrennzeichen Beispiel: 100.00 currency – Dispositionswährung max. Länge: 3 Zeichen, alles Großbuchstaben ISO-Währungscode Beispiel: EUR pnUrl – Zahlungsbenachrichtigungs-URL, über die paysafecard den Geschäftspartner informiert, sobald eine paysafecard erfolgreich einer Disposition zugewiesen wurde (weitere Details in Kapitel 6.2). URL muss absolut und URL-kodiert sein, weil sie als Parameter übermittelt wird URL muss vom Geschäftspartner definiert werden max. Länge: 765 Zeichen okUrl – die URL, zu der Kunden von paysafecard weitergeleitet werden, sobald sie ihre paysafecard PINs erfolgreich zugewiesen haben. Der Geschäftspartner kann Informationen in die URL einbinden. URL muss absolut und URL-kodiert sein, weil sie als Parameter übermittelt wird max. Länge: 765 Zeichen nokUrl – Die URL, zu der Kunden von paysafecard weitergeleitet werden, wenn Sie im paysafecard Zahlungsfenster auf „Abbrechen“ klicken. URL muss absolut und URL-kodiert sein, weil sie als Parameter übermittelt wird max. Länge: 765 Zeichen 8 Classic Payment API Service Oriented Prepaid Gateway HINWEIS: Die „okUrl“, „nokUrl“ und optional die „pnUrl“ sind unbedingt URL-kodiert (man spricht auch von prozentkodiert) zu übermitteln. Geschieht dies nicht, kann es zu einer falschen Weiterleitung des Kunden zur Bestätigungsseite sowie möglicherweise zu einem Fehlschlagen der Zahlung kommen. merchantclientId – eindeutiger Endkundenidentifikator (z. B. die eindeutige ID, mit der der Endkunde in der Datenbank des Geschäftspartners registriert ist). Falls Sie E-Mail-Adressen verwenden, verschlüsseln Sie diese bitte. Im Rahmen von Promotions prüft paysafecard die clientId, um Mehrfacheinlösungen zu verhindern. HINWEIS: Verwenden Sie aus Sicherheitsgründen nicht den registrierten Benutzernamen des Kunden max. Länge: 50 Zeichen Beispiel: client123 clientIp – Die IP-Adresse des paysafecard Kunden. shopId – Kennung des Shops, von dem der Request ausgeht. Wird meist von Payment Service Providern verwendet, die auch als Proxy für andere Zahlungsmethoden agieren. max. Länge: 60 Zeichen Empfohlen: bis zu 20 Zeichen durch Geschäftspartner bereitgestellt Zulässig sind nur: A-Z, a-z, 0-9 sowie - (Bindestrich) und _ (Unterstrich) Beispiel: 2568-B415rh_785 shopLabel – Label oder URL des Webshops, von dem der Request ausgeht, steht in Zusammenhang mit der „shopId“. Wird am wahrscheinlichsten von Payment Service Providern verwendet, die auch als Proxy für andere Zahlungsmethoden agieren. Max. Länge: 60 Zeichen Beispiel: www.foodstore.com mid – Merchant ID, eindeutige ID des Geschäftpartners/Währungs-Kombination. 10 Zeichen lang von paysafecard zur Verfügung gestellt Beispiel: 1000001234 dispositionState – aktueller Status der Disposition (weitere Details in Kapitel 6.3.3). serialNumbers – Seriennummer(n) vom Kunden zugewiesener paysafecard PINs, nach Eingabe der PINs im paysafecard Zahlungsfenster (Werte durch Semikolon getrennt). currency: ISO-Währungscode disposition amount: zu dieser Disposition reservierter Betrag auf der paysafecard des Kunden cardTypeId: paysafecards werden in verschiedene Kartentypen eingeteilt, z. B. junior_paysafecard; adult_paysafecard; inhouse_paysafecard Beispiele: 0000000001200000;EU R;7.50;00002; 0000000001300000;EU R;5.50;00002; close – Die Close Flag einer Disposition kann auf „0“ oder „1“ gesetzt werden und zeigt an, ob weitere Aktivitäten durchgeführt werden oder nicht. „0“ [Transaktion nicht schließen] „1“ [Transaktion schließen, dies ist die letzte Abbuchung] partialDebitId – über diesen Parameter können Teilzahlungen klassifiziert werden. resultCode – Ergebniscode der Funktion (Details im Kapitel Ergebniscodes). errorCode – Fehlercode der Funktion (Details im Kapitel Fehlercodes). dispositionRestrictions – Dispositionseinschränkungen können von Geschäftspartnern definiert werden, um Zahlungstransaktionen im Rahmen ihrer individuellen Anforderungen zu begrenzen. Details in Kapitel 6.3.2. Mehrere Wiederholungen möglich Jede Einschränkung besteht aus einem „key“ und einem „value“: „key“ - der Schlüssel der Einschränkung „value“ - der Wert der Einschränkung 9 Classic Payment API Service Oriented Prepaid Gateway 6.3.2 Einschränkungen Bitte übermitteln Sie mit dem API-Request „createDisposition“ einen Ländercode (ISO 3166-1), um die Zahlung auf das gewünschte Land zu beschränken. Schlüssel COUNTRY Beispielwert mögliche Werte Beschreibung DE alle Länder, in denen paysafecard erhältlich ist (Beispiel: FR, ES, ...) Beschränkt die Durchführung einer Zahlung exklusiv auf Deutschland. Als Wert können Ländercodes gemäß ISO 3166-1 angegeben werden. Folgende Beschränkungen sind für paysafecard Zahlungen über ein paysafecard Konto (my paysafecard) verfügbar: Schlüssel Beispielwert mögliche Werte Beschreibung MIN_AGE 18 muss einen positiven Zahlenwert enthalten Beschränkung auf my paysafecard Kontoinhaber mit einem Mindestalter von 18 Jahren. MIN_KYC_ LEVEL FULL SIMPLE oder FULL Beschränkung auf my paysafecard Kontoinhaber mit mindestens angegebenem Status, hier FULL. 6.3.3 Disposition Status One letter code Meaning Description R Created Die Disposition wurde erfolgreich angelegt. Geschieht in den kommenden 30 Minuten nichts, wird der Disposition Status durch paysafecard auf „X“ gesetzt. S Disposed Die paysafecard des Kunden wurde der Disposition erfolgreich zugewiesen. Der Geschäftspartner kann „executeDebit“ ausführen; es wurden noch keine Abbuchungen vorgenommen. O Consumed Die finale Abbuchung mit close=1 wurde ausgeführt; keine weiteren Abbuchungen möglich. L Cancelled Die Disposition wurde vom Kunden aktiv abgebrochen. X Expired Das Zeitfenster für die Disposition ist abgelaufen (entweder bevor eine paysafecard zugewiesen oder bevor „executeDebit“ aufgerufen wurde). E Debited Teilabbuchung: Die Disposition ist noch offen, weitere Abbuchungen möglich. 6.4 Dispositionszeitfenster Sobald eine Disposition in Status „S“ („DISPOSED“) vorliegt, müssen die Geschäftspartner innerhalb eines vorgegebenen Zeitraumes ihre Abbuchungen vornehmen (Dispositionszeit). Das Zeitfenster kann für jede MID gesondert konfiguriert werden. Mit Ende der Dispositionszeit läuft die Disposition automatisch ab, der auf der paysafecard des Kunden reservierte Betrag wird wieder verfügbar. Außerdem werden alle angelegten, jedoch nicht erfolgreich abgebuchten Dispositionen auf „EXPIRED“ gesetzt. HINWEIS: Diese Jobs sind nur auf den paysafecard Produktivservern aktiv. 10 Classic Payment API Service Oriented Prepaid Gateway 6.5 Details Zahlungsfenster 6.5.1 Zahlungsfenster Desktop Das paysafecard Zahlungsfenster kann in einem Popup-Fenster oder alternativ in einem iFrame angezeigt werden. Um sicherzustellen, dass das gesamte Zahlungsfenster für den Benutzer sichtbar ist, bieten Sie bitte stets die Möglichkeit zum vertikalen Scrollen oder für dynamisches Skalieren. Die Breite ist auf 600 px fixiert Die Höhe ist auf 840 px fixiert 6.5.2 Zahlungsfenster Mobilgeräte Das paysafecard Zahlungsfenster ist für Mobilgeräte optimiert. Verwendet ein Kunde ein Gerät mit einer Auflösung unter 600 px wird ein optimiertes Zahlungsfenster angeboten. Dasselbe gilt, wenn der eingebettete iFrame schmaler als 600 px ist. HINWEIS: Der iFrame zur Einbettung des Desktop-Zahlungsfenster muss mindestens 600 px breit sein. Anderenfalls wird die mobile Version des Zahlungsfensters angezeigt. 6.6 Gebietsschema- und Spracheinstellungen Zur Gewährleistung der Rückwärtskompatibilität geben alle Sprachparameter weiterhin dieselben Ergebnisse aus wie in Vorgängerversionen der API, alle Sprachen werden jedoch automatisch in Gebietsschemata umgewandelt. Sprache und Gebietsschema des Zahlungsfensters werden grundsätzlich durch folgende Regel bestimmt: 1. Hat der Kunde das Zahlungsfenster schon einmal besucht? Abrufen des Gebietsschemas aus dem gesetzten Cookie. 2. Ableiten des Gebietsschemas aus der IP-Adresse des Kunden1. 3. Verwenden des Wertes aus dem Gebietsschema-Parameter. 4. Verwenden des Wertes aus dem Sprach-Parameter. 5. Abrufen des Gebietsschemas aus dem Browser-Header. 6. Verwenden des Fallback-Gebietsschemas (de_de). Es ist deshalb nicht erforderlich, ein Gebietsschema-Parameter zu bestimmen. 7.Beispielzahlung In diesem Kapitel wird ein Testszenario mit Beispieldaten vorgestellt. In der Praxis wird der Ablauf von Geschäftspartner zu Geschäftspartner variieren, je nachdem, ob eine oder mehrere Abbuchungen oder Statusabfragen durchgeführt werden. Verwenden Sie für Ihre Tests nicht die Daten aus diesem Beispiel! Jeder Geschäftspartner erhält zum Testen einen einheitlichen Testdatensatz. 1 paysafecard nutzt eine GeoIP-Prüfung. 11 Classic Payment API Service Oriented Prepaid Gateway 7.1 createDisposition Der Geschäftspartner initiiert den Zahlungsprozess durch Versenden eines „createDisposition“ Request. Beispiel-Request: <soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/“ xmlns:urn=“urn:pscservice“> <soapenv:Header/> <soapenv:Body> <urn:createDisposition> <urn:username>USER</urn:username> <urn:password>PASSWORD</urn:password> <urn:mtid>18b02d230-a6822f-4cbb-aee9-0bc07d90cfa4</urn:mtid> <!--Zero or more repetitions:--> <urn:subId></urn:subId> <urn:amount>10.00</urn:amount> <urn:currency>EUR</urn:currency> <urn:okUrl>http%3a%2f%2fwww%2epaysafecardokURL%2ecom</urn:okUrl> <urn:nokUrl>http%3a%2f%2fwww%2epaysafecardnokURL%2ecom</urn:nokUrl> <!--Optional:--> <urn:merchantclientid>cID_919191</urn:merchantclientid> <!--Optional:--> <urn:pnUrl> http%3a%2f%2fwww%2emerchantpnURL%2ecom </urn:pnUrl> <!--Zero or more repetitions:--> <urn:dispositionRestrictions> <urn:key>COUNTRY</urn:key> <urn:value>FR</urn:value> </urn:dispositionRestrictions> <urn:dispositionRestrictions> <urn:key>MIN_AGE</urn:key> <urn:value>18</urn:value> </urn:dispositionRestrictions> <!--Optional:--> <urn:shopId>3516-6s4dfsad41</urn:shopId> <!--Optional:--> <urn:shopLabel>www.foodstore.com</urn:shopLabel> </urn:createDisposition> </soapenv:Body> </soapenv:Envelope> Beispiel-Response: <soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/“> <soapenv:Body> <ns1:createDispositionResponse xmlns:ns1=“urn:pscservice“> <ns1:createDispositionReturn> <ns1:mtid>18b02d230-a6822f-4cbb-aee9-0bc07d90cfa4</ns1:mtid> <ns1:mid>1000001234</ns1:mid> <ns1:resultCode>0</ns1:resultCode> <ns1:errorCode>0</ns1:errorCode> </ns1:createDispositionReturn> </ns1:createDispositionResponse> </soapenv:Body> </soapenv:Envelope> </soapenv:Body> </soapenv:Envelope> 12 Classic Payment API Service Oriented Prepaid Gateway 7.2 getMid (optional) Mit „getMid“ kann der Geschäftspartner die der angefragten Währung zugewiesene eindeutige Merchant ID (MID) abrufen. Beispiel-Request: <soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/“ xmlns:urn=“urn:pscservice“> <soapenv:Header/> <soapenv:Body> <urn:getMid> <urn:username>USER</urn:username> <urn:password>PASSWORD</urn:password> <urn:currency>EUR</urn:currency> </urn:getMid> </soapenv:Body> </soapenv:Envelope> Beispiel-Request: <soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/“> <soapenv:Body> <ns1:getMidResponse xmlns:ns1=“urn:pscservice“> <ns1:getMidReturn> <ns1:currency>EUR</ns1:currency> <ns1:mid>1000001234</ns1:mid> <ns1:resultCode>0</ns1:resultCode> <ns1:errorCode>0</ns1:errorCode> </ns1:getMidReturn> </ns1:getMidResponse> </soapenv:Body> </soapenv:Envelope> 7.3 getCustomerPanel „createDisposition“ wurde erfolgreich ausgeführt. Der Kunde kann nun zum paysafecard Zahlungsfenster weitergeleitet werden, um der Disposition Karten zuzuweisen. Beispiel-URL Testsystem: https:// customer.test.at.paysafecard.com/psccustomer/GetCustomerPanelServlet Beispiel-URL Produktivsystem: https:// customer.cc.at.paysafecard.com/psccustomer/GetCustomerPanelServlet ?mid=1000001234 &mtid=18b02d230-a6822f-4cbb-aee9-0bc07d90cfa4 &amount=10.00 ¤cy=EUR Beispiel Eingabeparameter: PIN: 0000 0000 1234 5678 Terms of Use: <checkbox, default unchecked> 13 Classic Payment API Service Oriented Prepaid Gateway 7.4 pnUrl request Das paysafecard System übermittelt ein „HTTP POST“ Request an das System des Geschäftspartners (pnUrl), um dieses über die erfolgreiche Zuweisung der paysafecard PINs des Kunden zu informieren. Beispiel-URL: http://www.merchantpnURL.com/notifyME ?mtid=3516-6s4dfsad41 &eventType=ASSIGN_CARDS &serialNumbers=0000000001200000;EUR;100.00;DE00002 Beispiel-Response: HTTP 200 7.4.1 executeDebit Nachdem der Kunde der Disposition erfolgreich Karten zugewiesen hat, führt der Geschäftspartner die Abbuchung durch und belastet die paysafecard des Kunden mit dem jeweiligen Betrag. Beispiel-Request: <soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/“ xmlns:urn=“urn:pscservice“> <soapenv:Header/> <soapenv:Body> <urn:executeDebit> <urn:username>USER</urn:username> <urn:password>PASSWORD</urn:password> <urn:mtid>18b02d230-a6822f-4cbb-aee9-0bc07d90cfa4</urn:mtid> <!--Zero or more repetitions:--> <urn:subId></urn:subId> <urn:amount>10.00</urn:amount> <urn:currency>EUR</urn:currency> <urn:close>1</urn:close> </urn:executeDebit> </soapenv:Body> </soapenv:Envelope> Beispiel-Response: <soapenv:Envelope xmlns:soapenv=“http://schemas.xmlsoap.org/soap/envelope/“> <soapenv:Body> <ns1:executeDebitResponse xmlns:ns1=“urn:pscservice“> <ns1:executeDebitReturn> <ns1:mtid>18b02d230-a6822f-4cbb-aee9-0bc07d90cfa4</ns1:mtid> <ns1:subId/> <ns1:resultCode>0</ns1:resultCode> <ns1:errorCode>0</ns1:errorCode> </ns1:executeDebitReturn> </ns1:executeDebitResponse> </soapenv:Body> </soapenv:Envelope> 14 Classic Payment API Service Oriented Prepaid Gateway 8. Anhang A: Fehlercodes Können Sie einen Fehlercode nicht in der Liste finden, wenden Sie sich bitte an integration@paysafecard.com Beschreibung von resultcodes (Ergebniscodes): Name Ergebnis Beschreibung resultCode 0 : erfolgreich 1 : logisches Problem 2 : technisches Problem errorCode Enthält eine Fehlernummer, wenn der resultCode nicht gleich 0 ist. Allgemeine Meldungen – Fehler: 0001 - 0141 1=Keine Daten ausgewählt. 2=%1 ist kein numerischer Wert. 3=Kein Inhalt in Pflichtfeld %1. 4=Dezimalfeld mit Name %1 und Wert %2 enthält keinen Dezimalpunkt. 5=Dezimalfeld mit Name %1 und Wert %2 enthält keine Ziffern vor dem Dezimalpunkt. 6=Dezimalfeld mit Name %1 und Wert %2 enthält zu viele Ziffern vor dem Dezimalpunkt (max. zulässig: %3). 7=Dezimalfeld mit Name %1 und Wert %2 enthält zu wenige Ziffern nach dem Dezimalpunkt (muss %3 entsprechen). 8=Dezimalfeld mit Name %1 und Wert %2 enthält zu viele Ziffern nach dem Dezimalpunkt (max. zulässig: %3). 9=Dezimalfeld mit Name %1 und Wert %2 enthält keine Zahl im Format N.M (wobei N gleich 1 bis %3 Ziffern und M genau %4 Ziffern entspricht und beide, M und N, numerische Werte sind). 10=Dezimalfeld mit Name %1 und Wert %2 enthält keine Ziffern nach dem Dezimalpunkt (muss mindestens 1 und höchstens %3 entsprechen). 11=Dezimalfeld mit Name %1 und Wert %2 darf nicht negativ sein. 12=Dezimalfeld mit Name %1 und Wert %2 enthält keine Zahl im Format N.M (wobei N gleich 1 bis %3 Ziffern und M gleich 1 bis %4 Ziffern ist und beide, M und N, numerische Werte sind). 13=Kein Inhalt im Dezimalfeld mit Name %1. 14=Verarbeitung von maximal %1 Objekten pro Transaktion. 15=Keine Antwort auf Sicherheitsfrage angegeben. 16=Sicherheitsfrage falsch beantwortet. 17=Antwort auf Sicherheitsfrage enthält ungültige Zeichen. 20=Keine Sicherheitsfrage angegeben. 21=Sicherheitsfrage mit Wert %1 ist zu lang (max. zulässig: %2 Zeichen). 50=Keine Merchant ID angegeben. 51=Merchant ID mit Wert %1 ist zu lang (max. zulässig: %2 Zeichen). 55=Keine Merchant Transaction ID angegeben. 56=Merchant Transaction ID mit Wert %1 ist zu lang (max. zulässig: %2 Zeichen). 60=Keine nokUrl angegeben. 65=Keine okUrl angegeben. 75=Keine Seriennummer angegeben. 76=Seriennummer mit Wert %1 ist zu lang (max. zulässig: %2 Zeichen). 77=Seriennummer %1 ist kein numerischer Wert. 80=Kartenstatus %1 ungültig. 81=Übermittelter Kartenstatus %1 in Feld %2 entspricht nicht dem erwarteten Kartenstatus %3. 85=Kartentyp %1 ungültig. 90=Debitstatus %1 ungültig. 95=Disposition Status %1 ungültig. 96=Übermittelter Disposition Status %1 in Feld %2 entspricht nicht dem erwarteten Disposition Status %3. 15 Classic Payment API Service Oriented Prepaid Gateway 120=Close Debit-Flag %1 ist ungültig (muss 0 oder 1 sein). 125=Keine Währung angegeben. 126=Währung mit Wert %1 hat unzulässige Länge (muss 3 Zeichen lang sein). 140=Kein Währungsname angegeben. 141=Währungsname mit Wert %1 ist zu lang (max. zulässig: %2 Zeichen). # Allgemeine Meldungen – Erfolgsmeldungen 0601 - 0603 601=Befehl erfolgreich ausgeführt. 602=Befehl erfolgreich ausgeführt; keine Daten gefunden. 603=Befehl erfolgreich ausgeführt; weitere Daten entsprechen Filterkriterien (für weniger Suchergebnisse Filterkriterien anpassen). # Kartenmeldungen – Fehlermeldungen: 1001 - 1600 1004=Karte mit Seriennummer %1 in unerwartetem Status %2. Erwartet wurde %3. 1005=Karte mit Seriennummer %1 hat keinen Ort ‚%3‘ sondern ‚%2‘. 1006=Karte mit Seriennummer %1 ist nicht %2 zugewiesen. 1007=Karte mit Seriennummer %1 existiert nicht. 1008=Zugriff verweigert. 1009=%1 dürfen keine Karten zugewiesen sein. 1012=Kartenstatus %1 ist für diesen Request nicht verfügbar; erwartet wurde Kartenstatus %2. 1015=Zugriff aufgrund wiederholter Verletzung von Zugriffsrechten verweigert. 1020=Sicherheitsantwort 1 und Sicherheitsantwort 2 unterscheiden sich. 1025=Ungültiger Kartenstatus. Erwarteter Status: „GENERATED“. 1026=Anzahl gedruckter Exemplare ungültig; Kartenstatus wird auf „INVALID“ gesetzt. 1029=Geben Sie Sicherheitsfrage, Antwort und Antwortwiederholung ein, um Ihre Sicherheitsfrage festzulegen. 1035=Der Kartenstatus mindestens einer im Rahmen dieser Anfrage verwendeten Karten ist ungültig. 1046=Auf dieser Karte ist derzeit kein Guthaben verfügbar; im Falle reservierter Beträge. 1049=Mindestens eine der verwendeten PINs ist ungültig. 1050=Karte existiert nicht. # Zahlungsmeldungen – Fehlermeldungen: 2001 - 2600 2001=Transaktion (%1/%2) bereits vorhanden. Bitte wenden Sie sich an Ihren Webshop. 2002=Transaktion (%1/%2) nicht vorhanden. Bitte wenden Sie sich an Ihren Webshop. 2003=Transaktion (%1/%2) in ungültigem Status %3; erwartet wurde %4. 2004=Guthaben reicht zur Zahlung nicht aus; offener Betrag entspricht %1. 2006=Transaktionswährung %1 ungültig für Transaktion (%2/%3). Bitte wenden Sie sich an Ihren Webshop. 2007=Betrag %1 für verwendete Karte ungültig. 2008=Betrag %1 übersteigt Kartenguthaben. 2009=Betrag %1 für verwendete Transaktion (%2/%3) ungültig. Bitte wenden Sie sich an Ihren Webshop. 2010=Ungenügender Dispositionsbetrag %1 für Transaktion (%2/%3). 2011=Währung %1 ist für diese Transaktion ungültig; erwartet wird %2. 2012=Zahlungstransaktion fehlgeschlagen. 2013=Fehler beim Finden der Transaktion: %1. 2014=Für diese Zahlungstransaktion wurde keine Disposition erstellt. 2015=Zahlungstransaktion fehlgeschlagen. 2016=Fehler beim Finden des Merchant: %1. 2017=Transaktion (%1/%2) in ungültigem Status %3; erwartet wurde %4 oder %5. 2018=MicroDebits für Transaktion (%1/%2) sind nicht fortlaufend. 2019=Kein MicroDebit für Transaktion (%1/%2) vorhanden. 2020=Geschäftstyp der Transaktion (%1/%2) ist %3. Betrag kann nicht geändert werden. 2021=Betrag %1 für verwendete Transaktion (%2/%3) ungültig. Mindesttransaktionsbetrag liegt bei %4. 2022=Transaktion (%1/%2) wurden keine Karten zugewiesen. 2023=Geschäftstyp der Transaktion (%1/%2) ist %3; erwartet wurde: %4. Bitte wenden Sie sich an Ihren Webshop. 2024=Abbuchung kann nicht vorgenommen werden: Geschäftstyp der Transaktion (%1/%2) ist %3. 2025=Kein Transaktionsbetrag angegeben. Bitte wenden Sie sich an Ihren Webshop. 2026=Transaktionsbetrag %1 ist kein numerischer Wert. Bitte wenden Sie sich an Ihren Webshop. 2027=Transaktionsbetrag %1 ist ungültig. Bitte wenden Sie sich an Ihren Webshop. 2028=Geschäftstyp %1 ist für die Transaktion ungültig. 2029=Bei dieser Transaktion ist ein Fehler aufgetreten – der Betrag muss größer null sein. 2039=Ungültige Einschränkungsparameter. 2044=customerdetailsrequested {0} ist ungültig (muss 0 oder 1 sein). 2623=Shop ID enthält mehr als 60 Zeichen. 2624=Shop Label enthält mehr als 60 Zeichen. 16 Classic Payment API Service Oriented Prepaid Gateway # Zahlungsmeldungen – Erfolgsmeldungen: 2601 - 2900 2601=Zahlung erfolgreich abgeschlossen. 2602=Befehl erfolgreich ausgeführt. Keine Transaktionen gefunden. # Master-Referenz – Fehlermeldung: 3001 - 3600 3001=Merchant %1 ist nicht aktiv. Bitte wenden Sie sich an Ihren Webshop. 3002=Währung %1 ist für Merchant %2 nicht gültig. Bitte wenden Sie sich an Ihren Webshop. 3003=Merchant %1 nicht vorhanden. Bitte wenden Sie sich an Ihren Webshop. 3006=Merchant akzeptiert Kartentyp %1 nicht. 3007=Merchant %1 hat Zeitfenster für Abbuchung der Transaktion überschritten. 3012=Merchant %1 hat Zeitfenster für Micropayment überschritten. 3013=Merchant %1 ist bereits vorhanden. 3014=Reporting Criterion %1 für Merchant %2 existiert nicht. 3015=Reporting Criterion %1 für Merchant %2 hat Status %3; erwartet wurde %4 oder %5. # Feature-Meldungen: 3901 - 4000 3901=Feature mit Primärschlüssel (%1 %2 %3) nicht gefunden. 3902=Benutzer %1 hat keine Zugriffsberechtigung für Feature %2. # Technische Meldungen Merchant API - Fehlermeldungen: 4001 - 4600 4001=SSL-Fehler. 4002=Ungültige Funktionsanfrage. 4003= Überschreitung des maximalen Dispositionsbetrags (1.000,00 EUR oder gleichwertiger Betrag in anderer Transaktionswährung) 4004=Ungültiger Proxy-Request. 4005=Verbindungsfehler. 4006=Unerwartete Antwort vom Server. 4007=Undefinierter Fehler – das sollte nicht vorkommen. 4008=Fehlermeldung vom Backend. 4010=Fehler beim Öffnen der Konfigurationsdatei. 4011=Konfigurationsdatei ist keine regulär lesbare Datei. 4012=Fehlerhafte Syntax in der Konfigurationsdatei. 4013=Fehlerhafter Wert in der Konfigurationsdatei. 4014=Fehlerhafte HTTP-Antwort vom API-Proxy: %1. # Technische Fehlermeldungen: 5001-5500 5001=Allgemeiner technischer Fehler. 5002=MAC-Test. # SOPG-spezifische Fehlermeldungen: 10000-20001 10003= Fehler HTTPS-Request 10004= Allgemeiner technischer Fehler 10005= Allgemeiner technischer Fehler 10006= PIN-Validierung fehlgeschlagen 10007= Unerwarteter Fehler 10008= Authentifizierung fehlgeschlagen 10010= Zu spät für cancelPayment 10011= Nicht genügend Guthaben 10012= Kein Guthaben 10013= Karte nicht aktiv 10014= Methode für SOPG-User nicht zulässig 10015= Währung für SOPG-User nicht gültig 17 Classic Payment API Service Oriented Prepaid Gateway 9.Anhang B: In Zahlungsbenachrichtigungen unterstützte Ländercodes Als zusätzlicher Informationsparameter bildet der Ländercode (des Landes, in dem paysafecard verkauft wird) einen Bestandteil des Standard API-Requests der Zahlungsbenachrichtigung. Der Parameter „cardTypeId“ in der Zahlungsbenachrichtigung enthält eine Kombination aus dem Standard-ISOLändercode und der ID des Kartentyps. Ausnahme: Manche Karten sind keinem bestimmten Land zugeordnet. Deshalb wird hier kein Ländercode übermittelt. Grundlegender pnUrl Response mtid=<Mtid> &eventType=<eventType> &serialNumbers=<serialNr1>;<currency1>;<amount1>;<cardTyp1>; <serialNr2>;<currency2>;<amount2>;<cardType2>; BeispielpnUrl Response mtid=123456 &eventType=ASSIGN_CARDS &serialNumbers=0000000001200000; EUR; 50.00; XX00004; 0000000001200001; EUR; 50.00; XX00004 10. Anhang C: In App Payment Dieses Kapitel beschreibt, wie paysafecard Zahlungen mit unseren Beispielcodes aus dem Download-Bereich in eine Android App integriert werden können. 10.1 Zahlungsfenster-Details für In App Zahlungen Für einen reibungslosen Zahlungsvorgang empfehlen wir dringend, das Zahlungsfenster in die Handy-App einzubetten. HINWEIS: Bitte schließen Sie das paysafecard Zahlungsfenster nach Erhalt der Zahlungsbenachrichtigung. Das ist erforderlich, weil Kunden bei einer Weiterleitung außerhalb der App nicht automatisch in die App zurückgeleitet werden. 18 Classic Payment API Service Oriented Prepaid Gateway 10.2 Technische Übersicht 11. Beispielintegration In App Payment In diesem Kapitel wird die Beispielintegration mit JSON Requests beschrieben. 11.1 Unterstützte Betriebssysteme Folgende Android-Versionen sind getestet und werden unterstützt: Android 2.1-update1 Android 2.2 Android 2.3.1 Android 2.3.3 Android 3.0 Android 3.1 Android 3.2 Android 4.0 19 Classic Payment API Service Oriented Prepaid Gateway 11.2 Technische Übersicht: Beispielintegration JSON:initiatePayment Der Geschäftspartner initiiert die Zahlung auf dem eigenen Backend-Server. JSON:checkTransaction Die Handy App fragt den Status der erfolgreichen Zahlungsdisposition beim Backend-Server des Geschäftspartners ab. Die Handy App muss informiert werden, sobald die Zahlungsbenachrichtigung eingegangen ist. HINWEIS: Die Zahlungsbenachrichtigung wird nur im Falle einer erfolgreichen Zuweisung übermittelt. 11.3 Implementierungsbeispiel Diese Beispiele basieren auf einem ANDROID OS. Der Code der Demo Android App und des Webshop Servers hilft Ihnen das Beispiel zu verstehen. In den folgenden Schritten werden wir die interessantesten Codestellen der Referenzimplementierung beschreiben. 11.3.1 Initiieren der Zahlungskommunikation zwischen App und Backend-Server des Geschäftspartners Folgende Schritte müssen in der Android App durchgeführt werden, damit Zahlungen mit paysafecard durchgeführt werden können: 1. Der User initiiert die Zahlung in einer Android App (z. B. um ein bestimmtes Spiel zu spielen). 2. Die Applikation des Geschäftspartners initiiert über den Backend-Server die Zahlung (Anlegen einer Disposition im paysafecard System). 3. Sobald die Disposition angelegt ist, sollte das paysafecard Zahlungsfenster geöffnet werden. 4. Der Benutzer gibt die paysafecard PIN ein und weist der Disposition eine Karte zu. Nach der erfolgreichen Zuweisung übernimmt die App die Kommunikation mit dem Backend-Server des Geschäftspartners, der im letzten Schritt ein „executeDebit“ Request übermittelt, um die paysafecard des Kunden zu belasten. 20 Classic Payment API Service Oriented Prepaid Gateway 11.3.1.1 Code Beispiele: Nach Auslösen von PaySafeCardActivityWithBrowser (siehe Code) wird die Methode handleIntent aufgerufen. public void handleIntent() { final Intent intent = getIntent(); if (PaySafeCard.ACTION_PAY.equals(intent.getAction())) { handlePayAction(intent); } else if (Intent.ACTION_VIEW.equals(intent.getAction())) { handleBrowserCallbackAction(intent); } } Diese Methode handelt Intents mit unterschiedlichen Aktionen (ACTION_PAY vs. ACTION_VIEW), und führt in Abhängigkeit von diesen Aktionen die nächsten Schritte in der App durch. Beim ersten Start der Activity übermittelt die Eltern-Activity die Aktion ACTION_PAY, die folgenden Request initiiert: Beispiel-Request: private void handlePayAction(final Intent intent) { payment = (Payment) intent.getParcelableExtra(PaySafeCard.EXTRA_ PAYMENT); pscBean = PscBean.from(payment); initPaymentTask = new InitPaymentAsyncTask(ConnectorFactory.instance().get()); initPaymentTask.bindContext(this); initPaymentTask.registerListener(new InitPaymentResultListener()); initPaymentTask.execute(pscBean); } Die Methode HandlePayAction legt über den Backend-Server des Geschäftspartners eine neue Disposition an. Diese Aktivität erfolgt im Rahmen einer separaten AsyncTask. Die Methode InitPaymentResultListener informiert über die erfolgreiche Anlage oder einen Fehler. Wurde die Disposition erfolgreich angelegt, wird die Callback-Methode onResult im InitPaymentResultListener aufgerufen: public void onResult(final String result) { final Intent browserIntent = PaySafeCardActivityWithBrowser.createBrowserIntent(Uri. parse(result)); isBrowserStarted = true; startActivity(browserIntent); } Diese Methode startet und öffnet ein neues Browserfenster mit dem paysafecard Zahlungsfenster für Mobilgeräte. Sehen Sie sich für ein besseres Verständnis den vollständigen Code für folgende Klassen an: InitPaymentResultListener, InitPaymentAsyncTask und InitPaymentResultListener. 21 Classic Payment API Service Oriented Prepaid Gateway 11.3.1.2 Request-Beispiele Für die Kommunikation zwischen einer Android App und dem WSDL-basierten SOPG Webservice haben wir einen einfachen, REST-basierten Backend-Server implementiert. Die Demo App kommuniziert also nur direkt mit einem REST-basierten Backend Server. Die Kommunikation erfolgt über schlanke JSON-Objekte. HINWEIS: Dies ist eine reine Beispielimplementierung. Folgende Request-/Response-Beispiele werden vom/an die Backend-Server-Referenzimplementierung des Geschäftspartners übermittelt: Beispiel-Request: Http-Method: POST Content-Type: application/x-www-form-urlencoded Headers: {connection=[Keep-Alive], Content-Length=[75], content-type=[application/x-www-formurlencoded], host=[my.merchantserver.biz:8080], user-agent=[Android - PSC (v0.1 Prototype)]} Payload: transactionID=f24f06f5-0c4a-497e-aa66-90c3b34a07bf &amount=1.00¤cy=EUR Beispiel-Response: Response-Code: 200 Content-Type: application/json Headers: {Date=[Wed, 27 Jul 2011 16:44:23 GMT]} Payload: {„initiatePaymentResponse“:{„paymentPanelURL“:“https%3A%2F%2Fcustomer.test.at.paysafecard. com%2Fpsccustomer%2FGetCustomerPanelServlet%3Fmid%3D1000003265%26mtid%3D f24f06f5-0c4a497e-aa66-90c3b34a07bf %26amount%3D1%2C00%26currency%3DEUR“}} Der Backend-Server gibt ein schlankes JSON-Objekt mit einer codierten Zahlungsfenster-URL zurück. Im nächsten Schritt wird diese URL in einem externen Browserfenster geöffnet. Weitere Details zur Implementierung des Backend Servers entnehmen Sie bitte unserer Referenzimplementierung. 11.3.2 Kommunikation zwischen Mobile App und Schließen des Client-Browsers Diese Beispiel beschreibt den Umgang mit „okUrl“ und „nokUrl“ auf dem Mobilgerät. „okUrl“ und „nokUrl“ werden auf dem Backend Server und in einer ANDROID App spezifiziert. Der Backend Server übermittelt „okUrl“ und „nokUrl“ an die App. Nach erfolgreicher Zuweisung der paysafecard PIN sendet die Zahlungsapp (vom Benutzerstandpunkt im Webbrowser) einen Intent mit der angegebenen „okUrl“ und „nokUrl“. HINWEIS: Das angelegte Ereignis erfordert eine Reaktion. Dazu haben wir in AndroidManifest.xml folgende Konfiguration für PaySafeCardActivityWithBrowser angegeben: <activity android:name=“.payment.PaySafeCardActivityWithBrowser“ android:theme=“@android:style/Theme.Translucent.NoTitleBar“ android:screenOrientation=“portrait“> <intent-filter> <data android:scheme=“paysafecard“ /> <action android:name=“android.intent.action.VIEW“ /> <category android:name=“android.intent.category.DEFAULT“ /> <category android:name=“android.intent.category.BROWSABLE“ /> </intent-filter> </activity> 22 Classic Payment API Service Oriented Prepaid Gateway Immer wenn eine Weiterleitung zu „okUrl“ und „nokUrl“ mit dem Schema „paysafecard“ in einer ANDROIDUmgebung aufgerufen wird, wird die Activity PaySafeCardActivityWithBrowser gestartet. In diesem Fall wird die Aktion handleBrowserCallbackAction aufgerufen: private void handleBrowserCallbackAction(final Intent intent) { String uri = intent.getDataString(); if (uri.contains(PAYMENT_OK)) { finishActivityWithSuccess(); } else { finishActivityWithFail(); } } Durch diese Vorgehensweise kann geprüft werden, ob „createDisposition“ und die paysafecard Zuweisung erfolgreich waren. Eine Prüfung, ob der Backend Server mit der „okUrl“ oder „nokUrl“ antwortet, ist erforderlich. Im Erfolgsfall kann die Zahlung durchgeführt und die paysafecard des Anwenders mit dem Betrag belastet werden: private void finishActivityWithSuccess() { fulfillPaymentTask = new FulfillPaymentTask(ConnectorFactory.instance().get()); fulfillPaymentTask.bindContext(PaySafeCardActivityWithWebView.this); fulfillPaymentTask.registerListener(new FulfillPaymentResultListener()); fulfillPaymentTask.execute(pscBean); } Das kann auch in AsyncTask geschehen, um eine Sperrung der Benutzeroberfläche im Haupt-Thread zu verhindern. Diese Task könnte auch als Antwort auf eine Callback Methode eingesetzt werden, um Informationen bereitzustellen, wenn die Aktion „executeDebit“ erfolgreich durchgeführt wurde. Anschließend sollte die Activity PaySafeCardActivityWithBrowser dem Endanwender einige Informationen anzeigen. 23