Das Trust Payments Gateway verwendet Anfragetypen, um die Aktionen zu bestimmen, die während der Zahlungssitzung durchgeführt werden sollen. Diese sind definiert in der JWT payload der Anfrage JWT. Dies ermöglicht zwei Hauptmethoden, mit denen Sie Ihren Zahlungsfluss genauer anpassen können:
- Mobile SDK verarbeitet 3-D Secure Authentifizierung und Autorisierung
- Mobile SDK verarbeitet 3-D Secure Authentifizierung, dann Autorisierung verarbeitet durch Webservices API
1. Mobile SDK verarbeitet 3-D Secure Authentifizierung und Autorisierung
Wenn Sie sich auf das Mobile SDK verlassen, um eine Zahlung zu verarbeiten, können zusätzliche Anfragetypen auf Ihre Konfiguration angewendet werden, indem Sie Änderungen an der requesttypedescriptions Liste, die im Rahmen der JWT payload. Wenn Sie alternative Anfragen angeben, müssen Sie sicherstellen, dass alle zusätzlichen Felder, die für die angegebenen Anfragetypen erforderlich sind, auch in der JWT payload. Informationen zu allen Überlegungen, die bei der Aufnahme zusätzlicher Antragstypen angestellt werden müssen, finden Sie in der jeweiligen Dokumentation, zu der Sie unten Links finden:
Unterstützte Anfragetypen
- Die ACCOUNTCHECK verarbeitet wird. Dabei werden die Adresse und der Sicherheitscode des Kunden vorab geprüft. (Der Kunde wird noch nicht belastet)
- Die THREEDQUERY wird dann verarbeitet. Dadurch wird der Kunde über 3-D Secure authentifiziert.
- Die AUTH wird dann verarbeitet. Dadurch wird eine Zahlung mit der Karte des Kunden abgewickelt.
Account Checks unterliegen den folgenden Anforderungen:
- Account Checks werden von Händlern mit einem Trust Payments Acquiring-Konto unterstützt. Wenn Sie eine andere Acquiring-Bank verwenden, müssen Sie unser Support-Team kontaktieren, um zu prüfen, ob diese Funktion unterstützt wird, bevor Sie fortfahren.
- Account Checks kann nur bei kartenbasierten Zahlungsmitteln durchgeführt werden.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["ACCOUNTCHECK","THREEDQUERY","AUTH"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die RISKDEC verarbeitet wird. Dabei wird eine Reihe von Prüfungen der vom Kunden übermittelten Daten durchgeführt, um Anzeichen für einen möglichen Betrug zu erkennen.
- Die ACCOUNTCHECK verarbeitet wird. Dabei werden die Adresse und der Sicherheitscode des Kunden vorab geprüft. (Der Kunde wird noch nicht belastet)
- Die THREEDQUERY wird dann verarbeitet. Dadurch wird der Kunde über 3-D Secure authentifiziert.
- Die AUTH wird dann verarbeitet. Dadurch wird eine Zahlung mit der Karte des Kunden abgewickelt.
Account Checks unterliegen den folgenden Anforderungen:
- Account Checks werden von Händlern mit einem Trust Payments Acquiring-Konto unterstützt. Wenn Sie eine andere Acquiring-Bank verwenden, müssen Sie unser Support-Team kontaktieren, um zu prüfen, ob diese Funktion unterstützt wird, bevor Sie fortfahren.
- Account Checks kann nur bei kartenbasierten Zahlungsmitteln durchgeführt werden.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["RISKDEC","ACCOUNTCHECK","THREEDQUERY","AUTH"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die RISKDEC verarbeitet wird. Dabei wird eine Reihe von Prüfungen der vom Kunden übermittelten Daten durchgeführt, um Anzeichen für einen möglichen Betrug zu erkennen.
- Die ACCOUNTCHECK verarbeitet wird. Dabei werden die Adresse und der Sicherheitscode des Kunden vorab geprüft. (Der Kunde wird noch nicht belastet)
- Die THREEDQUERY wird dann verarbeitet. Dadurch wird der Kunde über 3-D Secure authentifiziert.
- Die AUTH wird dann verarbeitet. Dadurch wird eine Zahlung mit der Karte des Kunden abgewickelt.
- Die SUBSCRIPTION wird dann verarbeitet. Dadurch werden automatisch wiederkehrende Zahlungen von der Karte des Kunden abgebucht.
Account Checks unterliegen den folgenden Anforderungen:
- Account Checks werden von Händlern mit einem Trust Payments Acquiring-Konto unterstützt. Wenn Sie eine andere Acquiring-Bank verwenden, müssen Sie unser Support-Team kontaktieren, um zu prüfen, ob diese Funktion unterstützt wird, bevor Sie fortfahren.
- Account Checks kann nur bei kartenbasierten Zahlungsmitteln durchgeführt werden.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"subscriptiontype":"RECURRING",
"subscriptionunit":"MONTH",
"subscriptionfrequency":"1",
"subscriptionnumber":"1",
"subscriptionfinalnumber":"12",
"subscriptionbegindate":"2020-01-01",
"credentialsonfile":"1",
"requesttypedescriptions":["RISKDEC","ACCOUNTCHECK","THREEDQUERY","AUTH","SUBSCRIPTION"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die RISKDEC verarbeitet wird. Dabei wird eine Reihe von Prüfungen der vom Kunden übermittelten Daten durchgeführt, um Anzeichen für einen möglichen Betrug zu erkennen.
- Die THREEDQUERY wird dann verarbeitet. Dadurch wird der Kunde über 3-D Secure authentifiziert.
- Die AUTH wird dann verarbeitet. Dadurch wird eine Zahlung mit der Karte des Kunden abgewickelt.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["RISKDEC","THREEDQUERY","AUTH"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die RISKDEC verarbeitet wird. Dabei wird eine Reihe von Prüfungen der vom Kunden übermittelten Daten durchgeführt, um Anzeichen für einen möglichen Betrug zu erkennen.
- Die THREEDQUERY wird dann verarbeitet. Dadurch wird der Kunde über 3-D Secure authentifiziert.
- Die AUTH wird dann verarbeitet. Dadurch wird eine Zahlung mit der Karte des Kunden abgewickelt.
- Die SUBSCRIPTION wird dann verarbeitet. Dadurch werden automatisch wiederkehrende Zahlungen von der Karte des Kunden abgebucht.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"subscriptiontype":"RECURRING",
"subscriptionunit":"MONTH",
"subscriptionfrequency":"1",
"subscriptionnumber":"1",
"subscriptionfinalnumber":"12",
"subscriptionbegindate":"2020-01-01",
"credentialsonfile":"1",
"requesttypedescriptions":["RISKDEC","THREEDQUERY","AUTH","SUBSCRIPTION"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die THREEDQUERY verarbeitet wird. Damit wird der Kunde über 3-D Secure authentifiziert.
- Die ACCOUNTCHECK wird dann verarbeitet. Dabei werden die Adresse und der Sicherheitscode des Kunden vorläufig überprüft und Tokenisierung durchgeführt. Der Kunde wird nicht belastet, aber seine Zahlungsdaten werden von Trust Payments für künftige Transaktionen gespeichert.
Die Kombination "THREEDQUERY","ACCOUNTCHECK" ist nur für Händler mit einem Trust Payments Acquiring-Konto unterstützt.
Account Checks kann nur für kartenbasierte Zahlungsmethoden durchgeführt werden.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["THREEDQUERY","ACCOUNTCHECK"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die THREEDQUERY verarbeitet wird. Damit wird der Kunde über 3-D Secure authentifiziert.
- Die AUTH wird dann verarbeitet. Dadurch wird eine Zahlung mit der Karte des Kunden abgewickelt.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["THREEDQUERY","AUTH"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die THREEDQUERY verarbeitet wird. Damit wird der Kunde über 3-D Secure authentifiziert.
- Die AUTH wird dann verarbeitet. Dadurch wird eine Zahlung mit der Karte des Kunden abgewickelt.
- Die RISKDEC wird dann verarbeitet. Dabei wird eine Reihe von Prüfungen der vom Kunden übermittelten Daten durchgeführt, um Anzeichen für einen möglichen Betrug zu erkennen.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["THREEDQUERY","AUTH","RISKDEC"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die THREEDQUERY verarbeitet wird. Damit wird der Kunde über 3-D Secure authentifiziert.
- Die AUTH wird dann verarbeitet. Dadurch wird eine Zahlung mit der Karte des Kunden abgewickelt.
- Die SUBSCRIPTION wird dann verarbeitet. Dadurch werden automatisch wiederkehrende Zahlungen von der Karte des Kunden abgebucht.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencycode":"GBP",
"sitereference":"test_site12345",
"subscriptiontype":"RECURRING",
"subscriptionunit":"MONTH",
"subscriptionfrequency":"1",
"subscriptionnumber":"1",
"subscriptionfinalnumber":"12",
"subscriptionbegindate":"2020-01-01",
"credentialsonfile":"1",
"requesttypedescriptions":["THREEDQUERY","AUTH","SUBSCRIPTION"]
},
"iat":"1567701632",
"iss":"jwt.user"
}
- Die THREEDQUERY verarbeitet wird. Damit wird der Kunde über 3-D Secure authentifiziert.
- Die ACCOUNTCHECK wird dann verarbeitet. Dabei werden die Adresse und der Sicherheitscode des Kunden vorläufig überprüft und Tokenisierung durchgeführt. Der Kunde wird nicht belastet, aber seine Zahlungsdaten werden von Trust Payments für künftige Transaktionen gespeichert.
- Die SUBSCRIPTION wird dann verarbeitet. Dadurch werden automatisch wiederkehrende Zahlungen von der Karte des Kunden abgebucht.
Account Checks unterliegen den folgenden Anforderungen:
- Account Checks werden von Händlern mit einem Trust Payments Acquiring-Konto unterstützt. Wenn Sie eine andere Acquiring-Bank verwenden, müssen Sie unser Support-Team kontaktieren, um zu prüfen, ob diese Funktion unterstützt wird, bevor Sie fortfahren.
- Account Checks kann nur bei kartenbasierten Zahlungsmitteln durchgeführt werden.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencycode":"GBP",
"sitereference":"test_site12345",
"subscriptiontype":"RECURRING",
"subscriptionunit":"MONTH",
"subscriptionfrequency":"1",
"subscriptionnumber":"1",
"subscriptionfinalnumber":"12",
"subscriptionbegindate":"2020-01-01",
"credentialsonfile":"1",
"requesttypedescriptions":["THREEDQUERY","ACCOUNTCHECK","SUBSCRIPTION"]
},
"iat":"1567701632",
"iss":"jwt.user"
}
Umgang mit der JWT-Antwort
Nachdem der Kunde den Bezahlvorgang abgeschlossen hat, erhalten Sie ein einzelnes Antwort-JWT, das aus mehreren Antworten besteht, von denen jede einer Anfrage entspricht, die in der requesttypedescriptions Liste.
Jedes vom SDK zurückgegebene JWT sollte überprüft werden, bevor Sie fortfahren. Wir bieten ein Parsing-Dienstprogramm an, das die Umwandlung des JWT in ein Transaktionsantwortobjekt erleichtert. Klicken Sie hier, um ein Beispiel für die Verwendung dieses Dienstprogramms zu sehen.
Die wichtigste zu prüfende Reaktion ist die des AUTH, das ist der Fall, wenn die Transaktion von der ausstellenden Bank genehmigt wurde. Wenn die AUTH fehlgeschlagen ist, wird die Zahlung nicht erfolgreich sein. Stellen Sie sicher, dass die errorcode Der zurückgegebene Wert ist "0", was den Erfolg anzeigt.
Erzwingen von Step-up-Authentifizierung (Challenge)
Durch Übermittlung eines zusätzlichen Feldes scaexemptionindicator im payload für Anforderungstyp "THREEDQUERY", können Sie beeinflussen, ob verstärkte 3DS-Authentifizierung mit dem Kunden durchgeführt wird. Die folgenden Werte werden unterstützt:
- scaexemptionindicator=13 - Dadurch wird der Kartenaussteller aufgefordert, eine Step-up-Authentifizierung (Challenge) mit EMV 3DS durchzuführen. Hält der Kartenaussteller dies jedoch für unnötig, erfolgt eine reibungslose Authentifizierung und der Kartenaussteller wird die Haftung übernehmen unter den meisten Umständen.
- scaexemptionindicator=14 - Dadurch wird der Kartenaussteller aufgefordert, unter allen Umständen eine Step-up-Authentifizierung (Challenge) mit EMV 3DS durchzuführen.
In Situationen, in denen ein weiche Ablehnung Antwort nach einer Zahlungsanforderung zurückgegeben wurde, müssen Sie eine THREEDQUERY -Anforderung bearbeiten und Folgendes hinzufügen scaexemptionindicator=14 um die Authentifizierung zu verstärken.
Wenn die Zugangsdaten des Karteninhabers als für die zukünftige Verwendung verfügbar gekennzeichnet sind, indem credentialsonfile=1 im payload, dies erzwingt auch eine verstärkte Authentifizierung. Klicken Sie hier, um mehr über Hinterlegte Anmeldedaten zu erfahren.
2. Mobile SDK verarbeitet 3-D Secure Authentifizierung, dann Autorisierung verarbeitet durch Webservices API
In diesem Abschnitt können folgende Vorgänge durchgeführt werden:
(Der Kunde muss bei der Bearbeitung der AUTH nicht anwesend sein)
- Verarbeiten Sie die Authentifizierung 3-D Secure mit unserem Mobile SDK.
- Schließen Sie die Zahlung ab, indem Sie eine AUTH Anfrage über unsere Webservices API verarbeiten, die auf Ihrem Server konfiguriert werden kann.
Zur Einhaltung von PSD2zu bleiben, müssen Zahlungsanforderungen mit 3-D Secure durchgeführt werden. Aus diesem Grund ist es zwingend erforderlich, dass die Autorisierung Anfrage, die Ihr Server an Trust Payments sendet, die Felder enthält, die erforderlich sind, um das Ergebnis der 3-D Secure Authentifizierung zu überprüfen (diese werden später in diesem Abschnitt beschrieben).
Unterstützte Anfragetypen
- Die ACCOUNTCHECK verarbeitet wird. Dabei werden die Adresse und der Sicherheitscode des Kunden vorab geprüft. (Der Kunde wird noch nicht belastet)
- Die THREEDQUERY wird dann verarbeitet. Dadurch wird der Kunde über 3-D Secure authentifiziert.
- Danach können Sie Ihre eigenen Back-Office-Prozesse wie erforderlich durchführen, dann ist es Ihre Verantwortung, die AUTH nach der Authentifizierung, indem Sie die unten in dieser Tabelle aufgeführten Schritte ausführen.
Account Checks unterliegen den folgenden Anforderungen:
- Account Checks werden von Händlern mit einem Trust Payments Acquiring-Konto unterstützt. Wenn Sie eine andere Acquiring-Bank verwenden, müssen Sie unser Support-Team kontaktieren, um zu prüfen, ob diese Funktion unterstützt wird, bevor Sie fortfahren.
- Account Checks kann nur bei kartenbasierten Zahlungsmitteln durchgeführt werden.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["ACCOUNTCHECK","THREEDQUERY"]
},
"iat":1559033849,
"iss":"jwt.user"
}
- Die THREEDQUERY verarbeitet wird. Damit wird der Kunde über 3-D Secure authentifiziert.
- Danach können Sie Ihre eigenen Back-Office-Prozesse wie erforderlich durchführen, dann ist es Ihre Verantwortung, die AUTH nach der Authentifizierung, indem Sie die unten in dieser Tabelle aufgeführten Schritte ausführen.
Payload Beispiel:
{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["THREEDQUERY"]
},
"iat":1559033849,
"iss":"jwt.user"
}
Bearbeitung der Authentifizierungsantwort und Verarbeitung Autorisierung
Nachdem der Kunde den Bezahlvorgang abgeschlossen hat, erhalten Sie ein einzelnes Antwort-JWT, das aus mehreren Antworten besteht, von denen jede einer Anfrage entspricht, die in der requesttypedescriptions Liste.
Wir empfehlen zu überprüfen, ob die errorcode Der in allen Antworten zurückgegebene Wert ist "0", was den Erfolg anzeigt.
In den folgenden Abschnitten werden zwei Hauptergebnisse beschrieben. Sie müssen diese Abschnitte lesen und sicherstellen, dass Ihre Lösung entsprechend reagiert.
Bevor Sie einem Wert vertrauen, der in der jwt payload, muss Ihr System zunächst die Signatur überprüfen, um sicherzustellen, dass die Daten nicht von einem unbefugten Dritten geändert wurden.
Jedes vom SDK zurückgegebene JWT sollte überprüft werden, bevor Sie fortfahren. Wir bieten ein Parsing-Dienstprogramm in Kotlin an, um die payload Felddaten als Teil der Überprüfung der Zahlungsantwortfelder zu extrahieren:
val response: PaymentTransactionManager.Response = paymentTransactionManager.executeSession(paymentSession)
//Every JWT returned from the SDK should be verified before further usage.
for (jwt in response.responseJwtList) {
if (!verifyJwtIntegrity(jwt)) {
throw SecurityException("JWT verification failed!")
}
}
val parsedResponse = ResponseParser.parse(response.responseJwtList)
//process parsed response
Der Antwort-JWT besteht aus drei Teilen, die durch Punkte (".") getrennt sind, im folgenden Format:
Header.Payload.Signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2MzMwOTg4NzMsInBheWxvYWQiOnsicmVxdWVzdHJlZmVyZW5jZSI6IlcyNC1wcWJ3aDBuMiIsInZlcnNpb24iOiIxLjAwIiwiand0IjoiZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKM1pXSnpaWEoyYVdObGMwQnRaWEpqYUdGdWRDNWpiMjBpTENKcFlYUWlPakUyTXpNd09UZzROek1zSW5CaGVXeHZZV1FpT25zaVkzVnpkRzl0WlhKMGIzZHVJam9pUW1GdVoyOXlJaXdpWW1sc2JHbHVaM0J2YzNSamIyUmxJam9pVkVVeE1pQXpVMVFpTENKamRYSnlaVzVqZVdsemJ6TmhJam9pUjBKUUlpd2lZM1Z6ZEc5dFpYSndjbVZ0YVhObElqb2lNVElpTENKaWFXeHNhVzVuYkdGemRHNWhiV1VpT2lKT1lXMWxJaXdpYkc5allXeGxJam9pWlc1ZlIwSWlMQ0pqZFhOMGIyMWxjbXhoYzNSdVlXMWxJam9pVG1GdFpTSXNJbUpwYkd4cGJtZGxiV0ZwYkNJNkluUmxjM1JBWlhoaGJYQnNaUzVqYjIwaUxDSmlhV3hzYVc1bmNISmxiV2x6WlNJNklqRXlJaXdpYzJsMFpYSmxabVZ5Wlc1alpTSTZJblJsYzNReElpd2lZV05qYjNWdWRIUjVjR1ZrWlhOamNtbHdkR2x2YmlJNklrVkRUMDBpTENKd1lYSmxiblIwY21GdWMyRmpkR2x2Ym5KbFptVnlaVzVqWlNJNklqSTBMVGt0T0RBd05qRWlMQ0ppYVd4c2FXNW5jM1J5WldWMElqb2lWR1Z6ZENCemRISmxaWFFpTENKeVpYRjFaWE4wZEhsd1pXUmxjMk55YVhCMGFXOXVjeUk2VzEwc0ltTjFjM1J2YldWeWMzUnlaV1YwSWpvaVZHVnpkQ0J6ZEhKbFpYUWlMQ0pqZFhOMGIyMWxjbkJ2YzNSamIyUmxJam9pTVRFeU15SXNJbUpwYkd4cGJtZDBaV3hsY0dodmJtVjBlWEJsSWpvaVRTSXNJbUpoYzJWaGJXOTFiblFpT2lJeE1EQXdJaXdpWW1sc2JHbHVaM1JsYkdWd2FHOXVaU0k2SWpBeE1qTTBJREV4TVRJeU1pSXNJbUpwYkd4cGJtZG1hWEp6ZEc1aGJXVWlPaUpVWlhOMElpd2lZbWxzYkdsdVozUnZkMjRpT2lKQ1lXNW5iM0lpZlgwLkpfVzlGU19MYkVzTXQ0SjhnWUlTSDNQcjNDMl9PUHRQMVd1Nm1MRklON0UiLCJyZXNwb25zZSI6W3sidHJhbnNhY3Rpb25zdGFydGVkdGltZXN0YW1wIjoiMjAyMS0xMC0wMSAxNDozNDozMyIsImN1c3RvbWVyb3V0cHV0IjoiVEhSRUVEUkVESVJFQ1QiLCJsaXZlc3RhdHVzIjoiMCIsIm1lcmNoYW50bmFtZSI6IlRlc3QgVW5pdHRlc3QgU2l0ZSIsImRjY2VuYWJsZWQiOiIwIiwic2V0dGxlZHVlZGF0ZSI6IjIwMjEtMTAtMDEiLCJlcnJvcmNvZGUiOiIwIiwiYWNxdWlyZXJ0cmFuc2FjdGlvbnJlZmVyZW5jZSI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwidGlkIjoiMjc4ODAwMDAiLCJ0aHJlZWRwYXlsb2FkIjoiZXlKdFpYTnpZV2RsVkhsd1pTSTZJa05TWlhFaUxDSnRaWE56WVdkbFZtVnljMmx2YmlJNklqSXVNUzR3SWl3aWRHaHlaV1ZFVTFObGNuWmxjbFJ5WVc1elNVUWlPaUkyWm1Jd1pETXlZeTA0WVdObUxUUTRNR1l0T1dZeE5DMWxNV0UwT0RjNU9UQmhaV0VpTENKaFkzTlVjbUZ1YzBsRUlqb2lNMlV6TjJZd1pUSXRNVEEyTlMwMFpEUmtMV0ZqTXprdE9XTTBNMll4TkdGaFl6RXpJaXdpWTJoaGJHeGxibWRsVjJsdVpHOTNVMmw2WlNJNklqQXlJbjAiLCJtZXJjaGFudG51bWJlciI6IjAwMDAwMDAwIiwibWVyY2hhbnRjb3VudHJ5aXNvMmEiOiJHQiIsInN0YXR1cyI6IkMiLCJ0cmFuc2FjdGlvbnJlZmVyZW5jZSI6IjI0LTktODAwNjEiLCJ0aHJlZWR2ZXJzaW9uIjoiMi4xLjAiLCJwYXltZW50dHlwZWRlc2NyaXB0aW9uIjoiVklTQSIsImFjc3VybCI6Imh0dHBzOi8vMG1lcmNoYW50YWNzc3RhZy5jYXJkaW5hbGNvbW1lcmNlLmNvbS9NZXJjaGFudEFDU1dlYi9jcmVxLmpzcCIsImFjY291bnR0eXBlZGVzY3JpcHRpb24iOiJFQ09NIiwiYWNxdWlyZXJyZXNwb25zZWNvZGUiOiIwIiwicmVxdWVzdHR5cGVkZXNjcmlwdGlvbiI6IlRIUkVFRFFVRVJZIiwiaXNzdWVyIjoiU2VjdXJlVHJhZGluZyBUZXN0IElzc3VlcjEiLCJtYXNrZWRwYW4iOiI0MDAwMDAjIyMjIyMxMDkxIiwiZXJyb3JtZXNzYWdlIjoiT2siLCJvcGVyYXRvcm5hbWUiOiJ3ZWJzZXJ2aWNlc0BtZXJjaGFudC5jb20iLCJlbnJvbGxlZCI6IlkiLCJpc3N1ZXJjb3VudHJ5aXNvMmEiOiJaWiIsInNldHRsZXN0YXR1cyI6IjAifV0sInNlY3JhbmQiOiJad0VjIn0sImF1ZCI6IndlYnNlcnZpY2VzQG1lcmNoYW50LmNvbSJ9.lyPo03P1nTQNohqqF3LZdLWnXoaIzgKMzjC14LWhJG8&
{
"iat": 1633098873,
"payload": {
"requestreference": "W24-pqbwh0n2",
"version": "1.00",
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3ZWJzZXJ2aWNlc0BtZXJjaGFudC5jb20iLCJpYXQiOjE2MzMwOTg4NzMsInBheWxvYWQiOnsiY3VzdG9tZXJ0b3duIjoiQmFuZ29yIiwiYmlsbGluZ3Bvc3Rjb2RlIjoiVEUxMiAzU1QiLCJjdXJyZW5jeWlzbzNhIjoiR0JQIiwiY3VzdG9tZXJwcmVtaXNlIjoiMTIiLCJiaWxsaW5nbGFzdG5hbWUiOiJOYW1lIiwibG9jYWxlIjoiZW5fR0IiLCJjdXN0b21lcmxhc3RuYW1lIjoiTmFtZSIsImJpbGxpbmdlbWFpbCI6InRlc3RAZXhhbXBsZS5jb20iLCJiaWxsaW5ncHJlbWlzZSI6IjEyIiwic2l0ZXJlZmVyZW5jZSI6InRlc3QxIiwiYWNjb3VudHR5cGVkZXNjcmlwdGlvbiI6IkVDT00iLCJwYXJlbnR0cmFuc2FjdGlvbnJlZmVyZW5jZSI6IjI0LTktODAwNjEiLCJiaWxsaW5nc3RyZWV0IjoiVGVzdCBzdHJlZXQiLCJyZXF1ZXN0dHlwZWRlc2NyaXB0aW9ucyI6W10sImN1c3RvbWVyc3RyZWV0IjoiVGVzdCBzdHJlZXQiLCJjdXN0b21lcnBvc3Rjb2RlIjoiMTEyMyIsImJpbGxpbmd0ZWxlcGhvbmV0eXBlIjoiTSIsImJhc2VhbW91bnQiOiIxMDAwIiwiYmlsbGluZ3RlbGVwaG9uZSI6IjAxMjM0IDExMTIyMiIsImJpbGxpbmdmaXJzdG5hbWUiOiJUZXN0IiwiYmlsbGluZ3Rvd24iOiJCYW5nb3IifX0.J_W9FS_LbEsMt4J8gYISH3Pr3C2_OPtP1Wu6mLFIN7E",
"response": [
{
"accounttypedescription": "ECOM",
"acquirerresponsecode": "0",
"acquirertransactionreference": "Zzx8qc43PBFAvFUwe470",
"acsurl": "https://0merchantacsstag.cardinalcommerce.com/MerchantACSWeb/creq.jsp",
"customeroutput": "THREEDREDIRECT",
"dccenabled": "0",
"enrolled": "Y",
"errorcode": "0",
"errormessage": "Ok",
"issuer": "Test Issuer",
"issuercountryiso2a": "ZZ",
"livestatus": "0",
"maskedpan": "400000######1091",
"merchantcountryiso2a": "GB",
"merchantname": "Test merchant",
"merchantnumber": "00000000",
"operatorname": "webservices@merchant.com",
"paymenttypedescription": "VISA",
"requesttypedescription": "THREEDQUERY",
"settleduedate": "2021-10-01",
"settlestatus": "0",
"status": "C",
"threedpayload": "eyJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiI2ZmIwZDMyYy04YWNmLTQ4MGYtOWYxNC1lMWE0ODc5OTBhZWEiLCJhY3NUcmFuc0lEIjoiM2UzN2YwZTItMTA2NS00ZDRkLWFjMzktOWM0M2YxNGFhYzEzIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0",
"threedversion": "2.1.0",
"tid": "00000000",
"transactionreference": "24-9-80061",
"transactionstartedtimestamp": "2021-10-01 14:34:33"
}
],
"secrand": "ZwEc"
},
"aud": "webservices@merchant.com"
}
Bevor Sie der Antwort vertrauen können, müssen Sie überprüfen, ob die zurückgegebene Signatur mit dem erwarteten Wert übereinstimmt. Ist dies nicht der Fall, kann sie von einem Unbefugten geändert worden sein.
Die Bibliothek, die Sie zuvor ausgewählt haben, um das JWT in Ihrem Zahlungsformular zu generieren und zu verifizieren, kann auch zur Verifizierung des zurückgegebenen JWT verwendet werden.
Die signature wird mit SHA-256 gehasht und kann daher nicht entschlüsselt werden. Dies bedeutet, dass zur Überprüfung der signature korrekt ist, muss sie unter Verwendung der header und payload zurückgegeben.
Die Bereitstellung der gleichen secret während dieses Prozesses verwendet wird, wird die neu berechnete signature sollte mit dem in der Antwort zurückgegebenen JWT übereinstimmen. Zusammengefasst:
- Base64URL dekodieren JWT header
- Base64URL dekodieren JWT payload
- Generieren Sie die Signatur neu, indem Sie die header, die payload und signieren sie mit dem secret.
Sobald dieser Prozess abgeschlossen ist, empfehlen wir, dass die errorcode Der in der Antwort zurückgegebene Wert ist "0", was den Erfolg anzeigt.
Senden Sie eine AUTH Anfrage mit Webservices API
Nachdem die EMV 3DS-Authentifizierung durchgeführt wurde, müssen Sie eine AUTH -Anfrage an Trust Payments über unsere Webservices API senden, um die Zahlung zu verarbeiten.
Falls Sie dies noch nicht getan haben, empfehlen wir Ihnen, unsere Dokumentation Erste Schritte zu lesen, um zu erfahren, wie Sie eine grundlegende Anfrage mit unserer Webservices API bearbeiten können.
Klicken Sie hier, um die Seite in einer neuen Registerkarte zu öffnen.
Wenn die JWT-Antwort 3DS enthält status N (was bedeutet, dass der Karteninhaber die Authentifizierung nicht erfolgreich abgeschlossen hat), sollten Sie die Anfrage Autorisierung nicht übermitteln. Wenn Sie die Anfrage Autorisierung übermitteln, erhalten Sie eine Fehlerantwort.
Sie müssen die nachstehende Schematabelle lesen und sicherstellen, dass die erforderlichen Felder in der Anfrage angegeben werden, wie im folgenden Beispiel gezeigt:
Autorisierung Feldspezifikation
Feld | Format | Beschreibung | |
parenttransactionreference XPath: /operation/parenttransactionreference |
Alphanumerisch (25) | Wert des transactionreference die bei der letzten bearbeiteten Anfrage zurückgegeben wurde, wie in der Datei typeDescriptions. |
Code-Beispiel
#!/usr/bin/python
import securetrading
stconfig = securetrading.Config()
stconfig.username = "webservices@example.com"
stconfig.password = "Password1^"
st = securetrading.Api(stconfig)
auth = {
"sitereference": "test_site12345",
"requesttypedescriptions": ["AUTH"],
"orderreference": "My_Order_123",
"parenttransactionreference": "24-9-80061"
}
strequest = securetrading.Request()
strequest.update(auth)
stresponse = st.process(strequest) #stresponse contains the transaction response
<?php
if (!($autoload = realpath(__DIR__ . '/../../../autoload.php')) && !($autoload = realpath(__DIR__ . '/../vendor/autoload.php'))) {
throw new Exception('Composer autoloader file could not be found.');
}
require_once($autoload);
$configData = array(
'username' => 'webservices@example.com',
'password' => 'Password1^',
);
$requestData = array(
'sitereference' => 'test_site12345',
'requesttypedescriptions' => array('AUTH'),
'orderreference' => 'My_Order_123',
'parenttransactionreference' => '24-9-80061'
);
$api = \Securetrading\api($configData);
$response = $api->process($requestData);
var_dump($response->toArray());
?>
curl --user webservices@example.com:Password1^ <DOMAIN>/json/ -H "Content-type: application/json" -H "Accept: application/json" -X POST -d '{
"alias":"webservices@example.com",
"version": "1.00",
"request": [{
"requesttypedescriptions": ["AUTH"],
"sitereference": "test_site12345",
"orderreference": "My_Order_123",
"parenttransactionreference": "24-9-80061"
}]
}'
{
"alias":"webservices@example.com",
"version":"1.00",
"request":[{
"requesttypedescriptions":["AUTH"],
"sitereference":"test_site12345",
"orderreference":"My_Order_123",
"parenttransactionreference":"24-9-80061"
}]
}
<requestblock version="3.67">
<alias>webservices@example.com</alias>
<request type="AUTH">
<merchant>
<orderreference>My_Order_123</orderreference>
</merchant>
<operation>
<sitereference>test_site12345</sitereference>
<parenttransactionreference>24-9-80061</parenttransactionreference>
</operation>
</request>
</requestblock>
Ersetzen Sie <DOMAIN>
mit einer unterstützten Domäne. Klicken Sie hier für eine vollständige Liste.
Bearbeiten Sie die Antwort Autorisierung
Schließlich erhält Ihr Server eine Antwort von Autorisierung .
{
"requestreference":"W23-n68rw97k",
"version":"1.00",
"response":[{
"accounttypedescription":"ECOM",
"acquirerresponsecode":"00",
"authcode":"TEST",
"baseamount":"1050",
"cavv":"Q0FWVkNBVlZDQVZWQ0FWVkNBVlY=",
"currencyiso3a":"GBP",
"dccenabled":"0",
"eci":"05",
"enrolled":"Y",
"errorcode":"0",
"errormessage":"Ok",
"issuer":"Test Issuer",
"issuercountryiso2a":"US",
"livestatus":"0",
"maskedpan":"400000######1091",
"merchantcountryiso2a":"GB",
"merchantname":"Test Merchant",
"merchantnumber":"00000000",
"operatorname":"webservices@example.com",
"parenttransactionreference":"24-9-80061",
"paymenttypedescription":"VISA",
"requesttypedescription":"AUTH",
"securityresponseaddress":"0",
"securityresponsepostcode":"2",
"securityresponsesecuritycode":"2",
"settleduedate":"2021-10-01",
"settlestatus":"0",
"status":"Y",
"tid":"00000000",
"transactionreference":"24-9-80061",
"transactionstartedtimestamp":"2021-10-01 14:34:35",
"xid":"NmVxNGtsTDBkSVJzcmwrSnEyMFc="
}],
"secrand":"bsZP"
}
Bevor Sie einem Wert vertrauen, der in der jwt payload, muss Ihr System zunächst die Signatur überprüfen, um sicherzustellen, dass die Daten nicht von einem unbefugten Dritten geändert wurden.
Jedes vom SDK zurückgegebene JWT sollte überprüft werden, bevor Sie fortfahren. Wir bieten ein Parsing-Dienstprogramm in Kotlin an, um die payload Felddaten als Teil der Überprüfung der Zahlungsantwortfelder zu extrahieren:
val response: PaymentTransactionManager.Response = paymentTransactionManager.executeSession(paymentSession)
//Every JWT returned from the SDK should be verified before further usage.
for (jwt in response.responseJwtList) {
if (!verifyJwtIntegrity(jwt)) {
throw SecurityException("JWT verification failed!")
}
}
val parsedResponse = ResponseParser.parse(response.responseJwtList)
//process parsed response
Der Antwort-JWT besteht aus drei Teilen, die durch Punkte (".") getrennt sind, im folgenden Format:
Header.Payload.Signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2MzMwOTg4NzMsInBheWxvYWQiOnsicmVxdWVzdHJlZmVyZW5jZSI6IlcyNC1wcWJ3aDBuMiIsInZlcnNpb24iOiIxLjAwIiwiand0IjoiZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKM1pXSnpaWEoyYVdObGMwQnRaWEpqYUdGdWRDNWpiMjBpTENKcFlYUWlPakUyTXpNd09UZzROek1zSW5CaGVXeHZZV1FpT25zaVkzVnpkRzl0WlhKMGIzZHVJam9pUW1GdVoyOXlJaXdpWW1sc2JHbHVaM0J2YzNSamIyUmxJam9pVkVVeE1pQXpVMVFpTENKamRYSnlaVzVqZVdsemJ6TmhJam9pUjBKUUlpd2lZM1Z6ZEc5dFpYSndjbVZ0YVhObElqb2lNVElpTENKaWFXeHNhVzVuYkdGemRHNWhiV1VpT2lKT1lXMWxJaXdpYkc5allXeGxJam9pWlc1ZlIwSWlMQ0pqZFhOMGIyMWxjbXhoYzNSdVlXMWxJam9pVG1GdFpTSXNJbUpwYkd4cGJtZGxiV0ZwYkNJNkluUmxjM1JBWlhoaGJYQnNaUzVqYjIwaUxDSmlhV3hzYVc1bmNISmxiV2x6WlNJNklqRXlJaXdpYzJsMFpYSmxabVZ5Wlc1alpTSTZJblJsYzNReElpd2lZV05qYjNWdWRIUjVjR1ZrWlhOamNtbHdkR2x2YmlJNklrVkRUMDBpTENKd1lYSmxiblIwY21GdWMyRmpkR2x2Ym5KbFptVnlaVzVqWlNJNklqSTBMVGt0T0RBd05qRWlMQ0ppYVd4c2FXNW5jM1J5WldWMElqb2lWR1Z6ZENCemRISmxaWFFpTENKeVpYRjFaWE4wZEhsd1pXUmxjMk55YVhCMGFXOXVjeUk2VzEwc0ltTjFjM1J2YldWeWMzUnlaV1YwSWpvaVZHVnpkQ0J6ZEhKbFpYUWlMQ0pqZFhOMGIyMWxjbkJ2YzNSamIyUmxJam9pTVRFeU15SXNJbUpwYkd4cGJtZDBaV3hsY0dodmJtVjBlWEJsSWpvaVRTSXNJbUpoYzJWaGJXOTFiblFpT2lJeE1EQXdJaXdpWW1sc2JHbHVaM1JsYkdWd2FHOXVaU0k2SWpBeE1qTTBJREV4TVRJeU1pSXNJbUpwYkd4cGJtZG1hWEp6ZEc1aGJXVWlPaUpVWlhOMElpd2lZbWxzYkdsdVozUnZkMjRpT2lKQ1lXNW5iM0lpZlgwLkpfVzlGU19MYkVzTXQ0SjhnWUlTSDNQcjNDMl9PUHRQMVd1Nm1MRklON0UiLCJyZXNwb25zZSI6W3sidHJhbnNhY3Rpb25zdGFydGVkdGltZXN0YW1wIjoiMjAyMS0xMC0wMSAxNDozNDozMyIsImN1c3RvbWVyb3V0cHV0IjoiVEhSRUVEUkVESVJFQ1QiLCJsaXZlc3RhdHVzIjoiMCIsIm1lcmNoYW50bmFtZSI6IlRlc3QgVW5pdHRlc3QgU2l0ZSIsImRjY2VuYWJsZWQiOiIwIiwic2V0dGxlZHVlZGF0ZSI6IjIwMjEtMTAtMDEiLCJlcnJvcmNvZGUiOiIwIiwiYWNxdWlyZXJ0cmFuc2FjdGlvbnJlZmVyZW5jZSI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwidGlkIjoiMjc4ODAwMDAiLCJ0aHJlZWRwYXlsb2FkIjoiZXlKdFpYTnpZV2RsVkhsd1pTSTZJa05TWlhFaUxDSnRaWE56WVdkbFZtVnljMmx2YmlJNklqSXVNUzR3SWl3aWRHaHlaV1ZFVTFObGNuWmxjbFJ5WVc1elNVUWlPaUkyWm1Jd1pETXlZeTA0WVdObUxUUTRNR1l0T1dZeE5DMWxNV0UwT0RjNU9UQmhaV0VpTENKaFkzTlVjbUZ1YzBsRUlqb2lNMlV6TjJZd1pUSXRNVEEyTlMwMFpEUmtMV0ZqTXprdE9XTTBNMll4TkdGaFl6RXpJaXdpWTJoaGJHeGxibWRsVjJsdVpHOTNVMmw2WlNJNklqQXlJbjAiLCJtZXJjaGFudG51bWJlciI6IjAwMDAwMDAwIiwibWVyY2hhbnRjb3VudHJ5aXNvMmEiOiJHQiIsInN0YXR1cyI6IkMiLCJ0cmFuc2FjdGlvbnJlZmVyZW5jZSI6IjI0LTktODAwNjEiLCJ0aHJlZWR2ZXJzaW9uIjoiMi4xLjAiLCJwYXltZW50dHlwZWRlc2NyaXB0aW9uIjoiVklTQSIsImFjc3VybCI6Imh0dHBzOi8vMG1lcmNoYW50YWNzc3RhZy5jYXJkaW5hbGNvbW1lcmNlLmNvbS9NZXJjaGFudEFDU1dlYi9jcmVxLmpzcCIsImFjY291bnR0eXBlZGVzY3JpcHRpb24iOiJFQ09NIiwiYWNxdWlyZXJyZXNwb25zZWNvZGUiOiIwIiwicmVxdWVzdHR5cGVkZXNjcmlwdGlvbiI6IlRIUkVFRFFVRVJZIiwiaXNzdWVyIjoiU2VjdXJlVHJhZGluZyBUZXN0IElzc3VlcjEiLCJtYXNrZWRwYW4iOiI0MDAwMDAjIyMjIyMxMDkxIiwiZXJyb3JtZXNzYWdlIjoiT2siLCJvcGVyYXRvcm5hbWUiOiJ3ZWJzZXJ2aWNlc0BtZXJjaGFudC5jb20iLCJlbnJvbGxlZCI6IlkiLCJpc3N1ZXJjb3VudHJ5aXNvMmEiOiJaWiIsInNldHRsZXN0YXR1cyI6IjAifV0sInNlY3JhbmQiOiJad0VjIn0sImF1ZCI6IndlYnNlcnZpY2VzQG1lcmNoYW50LmNvbSJ9.lyPo03P1nTQNohqqF3LZdLWnXoaIzgKMzjC14LWhJG8&
{
"iat": 1633098873,
"payload": {
"requestreference": "W24-pqbwh0n2",
"version": "1.00",
"jwt": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3ZWJzZXJ2aWNlc0BtZXJjaGFudC5jb20iLCJpYXQiOjE2MzMwOTg4NzMsInBheWxvYWQiOnsiY3VzdG9tZXJ0b3duIjoiQmFuZ29yIiwiYmlsbGluZ3Bvc3Rjb2RlIjoiVEUxMiAzU1QiLCJjdXJyZW5jeWlzbzNhIjoiR0JQIiwiY3VzdG9tZXJwcmVtaXNlIjoiMTIiLCJiaWxsaW5nbGFzdG5hbWUiOiJOYW1lIiwibG9jYWxlIjoiZW5fR0IiLCJjdXN0b21lcmxhc3RuYW1lIjoiTmFtZSIsImJpbGxpbmdlbWFpbCI6InRlc3RAZXhhbXBsZS5jb20iLCJiaWxsaW5ncHJlbWlzZSI6IjEyIiwic2l0ZXJlZmVyZW5jZSI6InRlc3QxIiwiYWNjb3VudHR5cGVkZXNjcmlwdGlvbiI6IkVDT00iLCJwYXJlbnR0cmFuc2FjdGlvbnJlZmVyZW5jZSI6IjI0LTktODAwNjEiLCJiaWxsaW5nc3RyZWV0IjoiVGVzdCBzdHJlZXQiLCJyZXF1ZXN0dHlwZWRlc2NyaXB0aW9ucyI6W10sImN1c3RvbWVyc3RyZWV0IjoiVGVzdCBzdHJlZXQiLCJjdXN0b21lcnBvc3Rjb2RlIjoiMTEyMyIsImJpbGxpbmd0ZWxlcGhvbmV0eXBlIjoiTSIsImJhc2VhbW91bnQiOiIxMDAwIiwiYmlsbGluZ3RlbGVwaG9uZSI6IjAxMjM0IDExMTIyMiIsImJpbGxpbmdmaXJzdG5hbWUiOiJUZXN0IiwiYmlsbGluZ3Rvd24iOiJCYW5nb3IifX0.J_W9FS_LbEsMt4J8gYISH3Pr3C2_OPtP1Wu6mLFIN7E",
"response": [
{
"accounttypedescription": "ECOM",
"acquirerresponsecode": "0",
"acquirertransactionreference": "Zzx8qc43PBFAvFUwe470",
"acsurl": "https://0merchantacsstag.cardinalcommerce.com/MerchantACSWeb/creq.jsp",
"customeroutput": "THREEDREDIRECT",
"dccenabled": "0",
"enrolled": "Y",
"errorcode": "0",
"errormessage": "Ok",
"issuer": "Test Issuer",
"issuercountryiso2a": "ZZ",
"livestatus": "0",
"maskedpan": "400000######1091",
"merchantcountryiso2a": "GB",
"merchantname": "Test merchant",
"merchantnumber": "00000000",
"operatorname": "webservices@merchant.com",
"paymenttypedescription": "VISA",
"requesttypedescription": "THREEDQUERY",
"settleduedate": "2021-10-01",
"settlestatus": "0",
"status": "C",
"threedpayload": "eyJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiI2ZmIwZDMyYy04YWNmLTQ4MGYtOWYxNC1lMWE0ODc5OTBhZWEiLCJhY3NUcmFuc0lEIjoiM2UzN2YwZTItMTA2NS00ZDRkLWFjMzktOWM0M2YxNGFhYzEzIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjAyIn0",
"threedversion": "2.1.0",
"tid": "00000000",
"transactionreference": "24-9-80061",
"transactionstartedtimestamp": "2021-10-01 14:34:33"
}
],
"secrand": "ZwEc"
},
"aud": "webservices@merchant.com"
}
Bevor Sie der Antwort vertrauen können, müssen Sie überprüfen, ob die zurückgegebene Signatur mit dem erwarteten Wert übereinstimmt. Ist dies nicht der Fall, kann sie von einem Unbefugten geändert worden sein.
Die Bibliothek, die Sie zuvor ausgewählt haben, um das JWT in Ihrem Zahlungsformular zu generieren und zu verifizieren, kann auch zur Verifizierung des zurückgegebenen JWT verwendet werden.
Die signature wird mit SHA-256 gehasht und kann daher nicht entschlüsselt werden. Dies bedeutet, dass zur Überprüfung der signature korrekt ist, muss sie unter Verwendung der header und payload zurückgegeben.
Die Bereitstellung der gleichen secret während dieses Prozesses verwendet wird, wird die neu berechnete signature sollte mit dem in der Antwort zurückgegebenen JWT übereinstimmen. Zusammengefasst:
- Base64URL dekodieren JWT header
- Base64URL dekodieren JWT payload
- Generieren Sie die Signatur neu, indem Sie die header, die payload und signieren sie mit dem secret.
Sobald dieser Prozess abgeschlossen ist, empfehlen wir, dass die errorcode Der in der Antwort zurückgegebene Wert ist "0", was den Erfolg anzeigt.
Da der Kunde einer Challenge-Authentifizierung unterzogen wurde, ist die Unterschrift des threedresponse wird ebenfalls in der Antwort zurückgegeben. Die threedresponse muss in der Anfrage AUTH enthalten sein. Nachstehend ein Beispiel für eine threedresponse:
eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1YzEyODg0NWMxMWI5MjIwZGMwNDZlOGUiLCJpYXQiOjE2MzMwOTg4NzcsImV4cCI6MTYzMzEwNjA3NywianRpIjoiNGQyMjA5NGMtZjY3Mi00YTRjLWIwMTktYjhjZDY2ZDM0MzBiIiwiQ29uc3VtZXJTZXNzaW9uSWQiOiIwXzU2OTgwMzA1LTk1ZmQtNDNmOC05NzRlLTQ0NmFhMGU4MjgzNCIsIlJlZmVyZW5jZUlkIjoiMjQtMmJhNzBjYTMxZDMyYzI0ZGU4OGEzNTE4ZjE0NTMzY2FlOGViMjhhZjRhNDVlODBiODQwNmZkNGE4MTRjZmI0YSIsImF1ZCI6IjI0LTJiYTcwY2EzMWQzMmMyNGRlODhhMzUxOGYxNDUzM2NhZThlYjI4YWY0YTQ1ZTgwYjg0MDZmZDRhODE0Y2ZiNGEiLCJQYXlsb2FkIjp7IlZhbGlkYXRlZCI6dHJ1ZSwiUGF5bWVudCI6eyJUeXBlIjoiQ0NBIiwiUHJvY2Vzc29yVHJhbnNhY3Rpb25JZCI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwiRXh0ZW5kZWREYXRhIjp7IkFtb3VudCI6IjEwMDAiLCJDQVZWIjoiTVRJek5EVTJOemc1TURFeU16UTFOamM0T1RBXHUwMDNkIiwiQ3VycmVuY3lDb2RlIjoiODI2IiwiRUNJRmxhZyI6IjA1IiwiVGhyZWVEU1ZlcnNpb24iOiIyLjEuMCIsIlBBUmVzU3RhdHVzIjoiWSIsIlNpZ25hdHVyZVZlcmlmaWNhdGlvbiI6IlkifX0sIkFjdGlvbkNvZGUiOiJTVUNDRVNTIiwiRXJyb3JOdW1iZXIiOjAsIkVycm9yRGVzY3JpcHRpb24iOiJTdWNjZXNzIn19.A5t9bo59kFKehQIwjaqQ2UAAqEdVlBCbI2ZbEFvUz98
Senden Sie eine AUTH Anfrage mit Webservices API
Nachdem die EMV 3DS-Authentifizierung durchgeführt wurde, müssen Sie eine AUTH -Anfrage an Trust Payments über unsere Webservices API senden, um die Zahlung zu verarbeiten.
Falls Sie dies noch nicht getan haben, empfehlen wir Ihnen, unsere Dokumentation Erste Schritte zu lesen, um zu erfahren, wie Sie eine grundlegende Anfrage mit unserer Webservices API bearbeiten können.
Klicken Sie hier, um die Seite in einer neuen Registerkarte zu öffnen.
Wenn die JWT-Antwort 3DS enthält status N (was bedeutet, dass der Karteninhaber die Authentifizierung nicht erfolgreich abgeschlossen hat), sollten Sie die Anfrage Autorisierung nicht übermitteln. Wenn Sie die Anfrage Autorisierung übermitteln, erhalten Sie eine Fehlerantwort.
Sie müssen die nachstehende Schematabelle lesen und sicherstellen, dass die erforderlichen Felder in der Anfrage angegeben werden, wie im folgenden Beispiel gezeigt:
Autorisierung Feldspezifikation
Feld | Format | Beschreibung | |
parenttransactionreference XPath: /operation/parenttransactionreference |
Alphanumerisch (25) | Wert des transactionreference die bei der letzten bearbeiteten Anfrage zurückgegeben wurde, wie in der Datei typeDescriptions. | |
|
threedresponse XPath: /operation/threedresponse |
Das Format dieses Wertes kann sich ändern. Wir empfehlen Ihnen, diesen Wert nicht zu validieren. |
Die threedresponse Feld wird zurückgegeben, wenn der Kunde während der Authentifizierung für 3-D Secure Versionen 1 und 2, und muss in der Anfrage AUTH angegeben werden, wenn sie an Ihren Server zurückgeschickt wird.
Trust Payments analysiert die threedresponse um festzustellen, ob die Authentifizierung des Karteninhabers im ACS seines Kartenausstellers erfolgreich war oder nicht. Die Nichtvorlage der threedresponse in der AUTH , wenn sie in der Authentifizierungsantwort zurückgegeben wird, kann dazu führen, dass die Haftungsverlagerung verwirkt wird. |
Code-Beispiel
#!/usr/bin/python
import securetrading
stconfig = securetrading.Config()
stconfig.username = "webservices@example.com"
stconfig.password = "Password1^"
st = securetrading.Api(stconfig)
auth = {
"sitereference": "test_site12345",
"requesttypedescriptions": ["AUTH"],
"orderreference": "My_Order_123",
"parenttransactionreference": "24-9-80061",
"threedresponse": "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1YzEyODg0NWMxMWI5MjIwZGMwNDZlOGUiLCJpYXQiOjE2MzMwOTg4NzcsImV4cCI6MTYzMzEwNjA3NywianRpIjoiNGQyMjA5NGMtZjY3Mi00YTRjLWIwMTktYjhjZDY2ZDM0MzBiIiwiQ29uc3VtZXJTZXNzaW9uSWQiOiIwXzU2OTgwMzA1LTk1ZmQtNDNmOC05NzRlLTQ0NmFhMGU4MjgzNCIsIlJlZmVyZW5jZUlkIjoiMjQtMmJhNzBjYTMxZDMyYzI0ZGU4OGEzNTE4ZjE0NTMzY2FlOGViMjhhZjRhNDVlODBiODQwNmZkNGE4MTRjZmI0YSIsImF1ZCI6IjI0LTJiYTcwY2EzMWQzMmMyNGRlODhhMzUxOGYxNDUzM2NhZThlYjI4YWY0YTQ1ZTgwYjg0MDZmZDRhODE0Y2ZiNGEiLCJQYXlsb2FkIjp7IlZhbGlkYXRlZCI6dHJ1ZSwiUGF5bWVudCI6eyJUeXBlIjoiQ0NBIiwiUHJvY2Vzc29yVHJhbnNhY3Rpb25JZCI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwiRXh0ZW5kZWREYXRhIjp7IkFtb3VudCI6IjEwMDAiLCJDQVZWIjoiTVRJek5EVTJOemc1TURFeU16UTFOamM0T1RBXHUwMDNkIiwiQ3VycmVuY3lDb2RlIjoiODI2IiwiRUNJRmxhZyI6IjA1IiwiVGhyZWVEU1ZlcnNpb24iOiIyLjEuMCIsIlBBUmVzU3RhdHVzIjoiWSIsIlNpZ25hdHVyZVZlcmlmaWNhdGlvbiI6IlkifX0sIkFjdGlvbkNvZGUiOiJTVUNDRVNTIiwiRXJyb3JOdW1iZXIiOjAsIkVycm9yRGVzY3JpcHRpb24iOiJTdWNjZXNzIn19.A5t9bo59kFKehQIwjaqQ2UAAqEdVlBCbI2ZbEFvUz98"
}
strequest = securetrading.Request()
strequest.update(auth)
stresponse = st.process(strequest) #stresponse contains the transaction response
<?php
if (!($autoload = realpath(__DIR__ . '/../../../autoload.php')) && !($autoload = realpath(__DIR__ . '/../vendor/autoload.php'))) {
throw new Exception('Composer autoloader file could not be found.');
}
require_once($autoload);
$configData = array(
'username' => 'webservices@example.com',
'password' => 'Password1^',
);
$requestData = array(
'sitereference' => 'test_site12345',
'requesttypedescriptions' => array('AUTH'),
'orderreference' => 'My_Order_123',
'parenttransactionreference' => '24-9-80061',
'threedresponse' => 'eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1YzEyODg0NWMxMWI5MjIwZGMwNDZlOGUiLCJpYXQiOjE2MzMwOTg4NzcsImV4cCI6MTYzMzEwNjA3NywianRpIjoiNGQyMjA5NGMtZjY3Mi00YTRjLWIwMTktYjhjZDY2ZDM0MzBiIiwiQ29uc3VtZXJTZXNzaW9uSWQiOiIwXzU2OTgwMzA1LTk1ZmQtNDNmOC05NzRlLTQ0NmFhMGU4MjgzNCIsIlJlZmVyZW5jZUlkIjoiMjQtMmJhNzBjYTMxZDMyYzI0ZGU4OGEzNTE4ZjE0NTMzY2FlOGViMjhhZjRhNDVlODBiODQwNmZkNGE4MTRjZmI0YSIsImF1ZCI6IjI0LTJiYTcwY2EzMWQzMmMyNGRlODhhMzUxOGYxNDUzM2NhZThlYjI4YWY0YTQ1ZTgwYjg0MDZmZDRhODE0Y2ZiNGEiLCJQYXlsb2FkIjp7IlZhbGlkYXRlZCI6dHJ1ZSwiUGF5bWVudCI6eyJUeXBlIjoiQ0NBIiwiUHJvY2Vzc29yVHJhbnNhY3Rpb25JZCI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwiRXh0ZW5kZWREYXRhIjp7IkFtb3VudCI6IjEwMDAiLCJDQVZWIjoiTVRJek5EVTJOemc1TURFeU16UTFOamM0T1RBXHUwMDNkIiwiQ3VycmVuY3lDb2RlIjoiODI2IiwiRUNJRmxhZyI6IjA1IiwiVGhyZWVEU1ZlcnNpb24iOiIyLjEuMCIsIlBBUmVzU3RhdHVzIjoiWSIsIlNpZ25hdHVyZVZlcmlmaWNhdGlvbiI6IlkifX0sIkFjdGlvbkNvZGUiOiJTVUNDRVNTIiwiRXJyb3JOdW1iZXIiOjAsIkVycm9yRGVzY3JpcHRpb24iOiJTdWNjZXNzIn19.A5t9bo59kFKehQIwjaqQ2UAAqEdVlBCbI2ZbEFvUz98'
);
$api = \Securetrading\api($configData);
$response = $api->process($requestData);
var_dump($response->toArray());
?>
curl --user webservices@example.com:Password1^ <DOMAIN>/json/ -H "Content-type: application/json" -H "Accept: application/json" -X POST -d '{
"alias":"webservices@example.com",
"version": "1.00",
"request": [{
"requesttypedescriptions": ["AUTH"],
"sitereference": "test_site12345",
"orderreference": "My_Order_123",
"parenttransactionreference": "24-9-80061",
"threedresponse": "eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1YzEyODg0NWMxMWI5MjIwZGMwNDZlOGUiLCJpYXQiOjE2MzMwOTg4NzcsImV4cCI6MTYzMzEwNjA3NywianRpIjoiNGQyMjA5NGMtZjY3Mi00YTRjLWIwMTktYjhjZDY2ZDM0MzBiIiwiQ29uc3VtZXJTZXNzaW9uSWQiOiIwXzU2OTgwMzA1LTk1ZmQtNDNmOC05NzRlLTQ0NmFhMGU4MjgzNCIsIlJlZmVyZW5jZUlkIjoiMjQtMmJhNzBjYTMxZDMyYzI0ZGU4OGEzNTE4ZjE0NTMzY2FlOGViMjhhZjRhNDVlODBiODQwNmZkNGE4MTRjZmI0YSIsImF1ZCI6IjI0LTJiYTcwY2EzMWQzMmMyNGRlODhhMzUxOGYxNDUzM2NhZThlYjI4YWY0YTQ1ZTgwYjg0MDZmZDRhODE0Y2ZiNGEiLCJQYXlsb2FkIjp7IlZhbGlkYXRlZCI6dHJ1ZSwiUGF5bWVudCI6eyJUeXBlIjoiQ0NBIiwiUHJvY2Vzc29yVHJhbnNhY3Rpb25JZCI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwiRXh0ZW5kZWREYXRhIjp7IkFtb3VudCI6IjEwMDAiLCJDQVZWIjoiTVRJek5EVTJOemc1TURFeU16UTFOamM0T1RBXHUwMDNkIiwiQ3VycmVuY3lDb2RlIjoiODI2IiwiRUNJRmxhZyI6IjA1IiwiVGhyZWVEU1ZlcnNpb24iOiIyLjEuMCIsIlBBUmVzU3RhdHVzIjoiWSIsIlNpZ25hdHVyZVZlcmlmaWNhdGlvbiI6IlkifX0sIkFjdGlvbkNvZGUiOiJTVUNDRVNTIiwiRXJyb3JOdW1iZXIiOjAsIkVycm9yRGVzY3JpcHRpb24iOiJTdWNjZXNzIn19.A5t9bo59kFKehQIwjaqQ2UAAqEdVlBCbI2ZbEFvUz98"
}]
}'
{
"alias":"webservices@example.com",
"version":"1.00",
"request":[{
"requesttypedescriptions":["AUTH"],
"sitereference":"test_site12345",
"orderreference":"My_Order_123",
"parenttransactionreference":"24-9-80061",
"threedresponse":"eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1YzEyODg0NWMxMWI5MjIwZGMwNDZlOGUiLCJpYXQiOjE2MzMwOTg4NzcsImV4cCI6MTYzMzEwNjA3NywianRpIjoiNGQyMjA5NGMtZjY3Mi00YTRjLWIwMTktYjhjZDY2ZDM0MzBiIiwiQ29uc3VtZXJTZXNzaW9uSWQiOiIwXzU2OTgwMzA1LTk1ZmQtNDNmOC05NzRlLTQ0NmFhMGU4MjgzNCIsIlJlZmVyZW5jZUlkIjoiMjQtMmJhNzBjYTMxZDMyYzI0ZGU4OGEzNTE4ZjE0NTMzY2FlOGViMjhhZjRhNDVlODBiODQwNmZkNGE4MTRjZmI0YSIsImF1ZCI6IjI0LTJiYTcwY2EzMWQzMmMyNGRlODhhMzUxOGYxNDUzM2NhZThlYjI4YWY0YTQ1ZTgwYjg0MDZmZDRhODE0Y2ZiNGEiLCJQYXlsb2FkIjp7IlZhbGlkYXRlZCI6dHJ1ZSwiUGF5bWVudCI6eyJUeXBlIjoiQ0NBIiwiUHJvY2Vzc29yVHJhbnNhY3Rpb25JZCI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwiRXh0ZW5kZWREYXRhIjp7IkFtb3VudCI6IjEwMDAiLCJDQVZWIjoiTVRJek5EVTJOemc1TURFeU16UTFOamM0T1RBXHUwMDNkIiwiQ3VycmVuY3lDb2RlIjoiODI2IiwiRUNJRmxhZyI6IjA1IiwiVGhyZWVEU1ZlcnNpb24iOiIyLjEuMCIsIlBBUmVzU3RhdHVzIjoiWSIsIlNpZ25hdHVyZVZlcmlmaWNhdGlvbiI6IlkifX0sIkFjdGlvbkNvZGUiOiJTVUNDRVNTIiwiRXJyb3JOdW1iZXIiOjAsIkVycm9yRGVzY3JpcHRpb24iOiJTdWNjZXNzIn19.A5t9bo59kFKehQIwjaqQ2UAAqEdVlBCbI2ZbEFvUz98"
}]
}
<requestblock version="3.67">
<alias>webservices@example.com</alias>
<request type="AUTH">
<merchant>
<orderreference>My_Order_123</orderreference>
</merchant>
<operation>
<sitereference>test_site12345</sitereference>
<parenttransactionreference>24-9-80061</parenttransactionreference>
<threedresponse>eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1YzEyODg0NWMxMWI5MjIwZGMwNDZlOGUiLCJpYXQiOjE2MzMwOTg4NzcsImV4cCI6MTYzMzEwNjA3NywianRpIjoiNGQyMjA5NGMtZjY3Mi00YTRjLWIwMTktYjhjZDY2ZDM0MzBiIiwiQ29uc3VtZXJTZXNzaW9uSWQiOiIwXzU2OTgwMzA1LTk1ZmQtNDNmOC05NzRlLTQ0NmFhMGU4MjgzNCIsIlJlZmVyZW5jZUlkIjoiMjQtMmJhNzBjYTMxZDMyYzI0ZGU4OGEzNTE4ZjE0NTMzY2FlOGViMjhhZjRhNDVlODBiODQwNmZkNGE4MTRjZmI0YSIsImF1ZCI6IjI0LTJiYTcwY2EzMWQzMmMyNGRlODhhMzUxOGYxNDUzM2NhZThlYjI4YWY0YTQ1ZTgwYjg0MDZmZDRhODE0Y2ZiNGEiLCJQYXlsb2FkIjp7IlZhbGlkYXRlZCI6dHJ1ZSwiUGF5bWVudCI6eyJUeXBlIjoiQ0NBIiwiUHJvY2Vzc29yVHJhbnNhY3Rpb25JZCI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwiRXh0ZW5kZWREYXRhIjp7IkFtb3VudCI6IjEwMDAiLCJDQVZWIjoiTVRJek5EVTJOemc1TURFeU16UTFOamM0T1RBXHUwMDNkIiwiQ3VycmVuY3lDb2RlIjoiODI2IiwiRUNJRmxhZyI6IjA1IiwiVGhyZWVEU1ZlcnNpb24iOiIyLjEuMCIsIlBBUmVzU3RhdHVzIjoiWSIsIlNpZ25hdHVyZVZlcmlmaWNhdGlvbiI6IlkifX0sIkFjdGlvbkNvZGUiOiJTVUNDRVNTIiwiRXJyb3JOdW1iZXIiOjAsIkVycm9yRGVzY3JpcHRpb24iOiJTdWNjZXNzIn19.A5t9bo59kFKehQIwjaqQ2UAAqEdVlBCbI2ZbEFvUz98</threedresponse>
</operation>
</request>
</requestblock>
Ersetzen Sie <DOMAIN>
mit einer unterstützten Domäne. Klicken Sie hier für eine vollständige Liste.
Bearbeiten Sie die Antwort Autorisierung
Schließlich erhält Ihr Server eine Antwort von Autorisierung .
{
"requestreference":"W23-n68rw97k",
"version":"1.00",
"response":[{
"accounttypedescription":"ECOM",
"acquirerresponsecode":"00",
"authcode":"TEST",
"baseamount":"1050",
"cavv":"Q0FWVkNBVlZDQVZWQ0FWVkNBVlY=",
"currencyiso3a":"GBP",
"dccenabled":"0",
"eci":"05",
"enrolled":"Y",
"errorcode":"0",
"errormessage":"Ok",
"issuer":"Test Issuer",
"issuercountryiso2a":"US",
"livestatus":"0",
"maskedpan":"400000######1091",
"merchantcountryiso2a":"GB",
"merchantname":"Test Merchant",
"merchantnumber":"00000000",
"operatorname":"webservices@example.com",
"parenttransactionreference":"24-9-80061",
"paymenttypedescription":"VISA",
"requesttypedescription":"AUTH",
"securityresponseaddress":"0",
"securityresponsepostcode":"2",
"securityresponsesecuritycode":"2",
"settleduedate":"2021-10-01",
"settlestatus":"0",
"status":"Y",
"tid":"00000000",
"transactionreference":"24-9-80061",
"transactionstartedtimestamp":"2021-10-01 14:34:35",
"xid":"NmVxNGtsTDBkSVJzcmwrSnEyMFc="
}],
"secrand":"bsZP"
}