Voer 3-D Secure authenticatie uit met JavaScript Library en autorisatie met Webservices API

  Laatst bijgewerkt: 

 

De volgende inhoud gaat ervan uit dat u de noodzakelijke PCI-certificering hebt verkregen om gevoelige kaarthoudergegevens te verwerken en in te dienen in het verzoek aan onze Webservices API.
Lees dit artikel voor meer informatie.

Het volgende document legt uit hoe je EMV 3-D Secure authenticatie kunt uitvoeren met onze JavaScript Library en een daaropvolgende betaling met onze Webservices API.

  Over EMV 3-D Secure

EMV 3-D Secure is een vorm van Strong Customer Authentication (SCA) die fraude en chargebacks bij e-handelstransacties moet verminderen. Het stelt kaartuitgevers in staat een extra beschermingsniveau te bieden door kaarthouders op het verkooppunt te authenticeren (bv. met een geheim wachtwoord of biometrische gegevens) als de betaling als risicovol wordt beschouwd.

De Payment Services Directive (PSD2) schrijft voor dat een vorm van Strong Customer Authentication (SCA) wordt uitgevoerd op alle transacties die door de klant via zijn browser worden geïnitieerd. U moet 3-D Secure gebruiken om te voldoen aan PSD2.

Klik hier voor meer informatie.

 

Overzicht

  Dit proces vereist dat u de kaartgegevens van de klant vastlegt op uw eigen servers, klaar om EMV 3DS-verificatie uit te voeren, zoals hieronder beschreven.

CW1-EN.png

  1. U moet een pagina hosten met een formulier met een actie om te POST-en naar een tussenliggende pagina die onze mark-up host.
  2. De bovengenoemde tussenpagina is in feite een wachtpagina die tijdelijk wordt getoond voordat de EMV 3DS-authenticatie van de klant wordt uitgevoerd. Deze authenticatie wordt automatisch afgehandeld door st.js. Klik hier voor meer informatie over EMV 3DS-authenticatie. Tijdens dit proces kan de browser van de klant een overlay weergeven, waarin hem wordt gevraagd een aantal basishandelingen te verrichten om zijn identiteit te authenticeren.

  Wij raden aan een laadanimatie en/of bericht weer te geven wanneer de JS meer dan een paar seconden nodig heeft om het verzoek te voltooien.

  1. Na eventuele controles en verificatie door de kaartuitgever van de klant wordt het overlay automatisch gesloten en worden de antwoordgegevens teruggestuurd naar uw server.
  2. Om de betaling te verwerken, moet uw server een AUTH verzoek indienen met gegevens die in het antwoord terugkomen.

 

Het server-side betalingsformulier wijzigen

U moet een formulier hosten op de intermediaire pagina, die is ingesteld om de st.js library te initialiseren met een configuratie die de JWT bevat die is gegenereerd op de server van de winkelier. Deze stap is nodig om het EMV 3DS-authenticatieproces te starten.

<html>
<head>
</head>
<body>
<div id="st-notification-frame"></div>
<form id="st-form" action="https://www.example.com" method="POST">
</form>
<script src="<CDN_DOMAIN>"></script>
<script>
(function() {
var st = SecureTrading({
jwt:'INSERT YOUR JWT HERE',
submitOnError: true
});
st.Components({startOnLoad: true});
})();
</script>
</body>
</html>

Vervang <CDN_DOMAIN> met een ondersteund domein. Klik hier voor een volledige lijst.

 

st.js

Het server-side betalingsformulier zal onze "st.js" JavaScript Library moeten bevatten. De st.js zal de EMV 3DS-verificatie afhandelen, waarbij contact wordt opgenomen met de kaartuitgever om te bepalen of de kaart is ingeschreven (een THREEDQUERY wordt verwerkt). Als de kaartuitgever bepaalt dat er een verhoogd frauderisico is, zal de klant automatisch een overlay te zien krijgen waarin hem om authenticatie wordt gevraagd.

  Zorg ervoor dat uw systeem verwijst naar de st.js library op de Trust Payments servers. Dit zorgt ervoor dat uw oplossing altijd de laatste versie van de bibliotheek gebruikt.

  Onze st.js neemt contact op met de kaartuitgever om te bepalen of de kaart is geregistreerd. Als de kaartuitgever bepaalt dat er een verhoogd frauderisico is, krijgt de klant automatisch een overlay te zien waarin om verificatie wordt gevraagd.

Om dit gedrag mogelijk te maken, moet u verwijzen naar de JavaScript Library door een gedefinieerde configuratie op te nemen die een specifieke methode ("st.Components") binnen "st.js".

Opmerking: Zorg ervoor dat u de anonieme functie opneemt zoals in het voorbeeld. Dit voorkomt dat de JS wordt uitgevoerd totdat de st.js is geladen.

 

st-form

U moet ervoor zorgen dat aan uw betalingsformulier de id "st-form" en een action attribuut dat een geldig URL-adres op uw server bevat. Het opgegeven adres moet de gegevens kunnen verwerken die worden geretourneerd in application/x-www-form-urlencoded format (zie het voorbeeld hieronder). Klik hier voor een voorbeeld.

 

startOnLoad

U moet ervoor zorgen dat wanneer u de st.Components methode die u een config eigenschap van startOnLoad waar is. Hierdoor is er geen verdere interactie met de klant nodig voor het tussenformulier om de gegevens naar Trust Payments te sturen.

 

submitOnError

U moet ervoor zorgen dat uw formulier het extra veld submitOnError, met waarde true. Dit zorgt ervoor dat de klant bij een fout wordt doorgestuurd naar uw website, zodat hij zijn gegevens kan wijzigen en de betaling opnieuw kan proberen.

 

jwt

  De jwt eigenschap toegevoegd aan de initialisatie config zal moeten zijn in de vorm van een JSON Web Token (JWT), die bestaat uit gecodeerde gegevens. JSON Web Tokens zijn een open, industriestandaard RFC 7519 methode voor het veilig verzenden van gegevens tussen twee partijen. Klik hier voor meer informatie over JWT.

  1. U moet deze bron raadplegen en een bibliotheek kiezen waarmee u de JWT kunt genereren en verifiëren.
  2. Bij het genereren van een JWT payload, vraagt onze TRU Connect gateway u een aantal velden in te vullen, die op deze pagina, onder "Het genereren van de payload", nader worden toegelicht.

In deze workflow moet het JWT ook de pan, expirydate en securitycode velden, zoals in onderstaand voorbeeld:

{
"payload":{
"accounttypedescription":"ECOM",
"baseamount":"1050",
"currencyiso3a":"GBP",
"sitereference":"test_site12345",
"requesttypedescriptions":["THREEDQUERY"],
"pan":"4000000000001091",
"expirydate":"12/2022",
"securitycode":"123"
},
"iat":1559033849,
"iss":"jwt.user"
}

  Visa heeft alle in het Verenigd Koninkrijk gevestigde handelaren met een Merchant Category Code (MCC) van 6012 moet extra velden sturen in de payload. Klik hier voor meer informatie.

Forcing step up (uitdaging) authenticatie

U kunt beïnvloeden of meer 3DS-authenticatie wordt uitgevoerd met de klant door het indienen van extra veld scaexemptionindicator in de payload:

  • Het indienen van scaexemptionindicator=13 zal de kaartuitgever vragen een step-up authenticatie uit te voeren met EMV 3DS, maar als de kaartuitgever dit onnodig vindt, zal er wrijvingsloze authenticatie plaatsvinden en zal de kaartuitgever in de meeste omstandigheden de aansprakelijkheid op zich nemen.
  • Het indienen van scaexemptionindicator=14 zal in alle omstandigheden de kaartuitgever verzoeken een step-up authenticatie uit te voeren met EMV 3DS.

  Als een zachte afwijzing antwoord is teruggestuurd na een betalingsverzoek, moet u het volgende toevoegen scaexemptionindicator=14 in de payload om een step-up authenticatie te forceren.

 

Verwerking van authenticatiereacties autorisatie

Na authenticatie met EMV 3DS krijgt je systeem een aantal parameters teruggestuurd. Er zijn twee belangrijke uitkomsten die in de secties hieronder worden beschreven. Je moet de onderstaande lezen en ervoor zorgen dat je oplossing dienovereenkomstig reageert.

Frictionless - Contains gateway response only

Voordat een waarde die wordt geretourneerd in de jwt payload, moet uw systeem eerst de handtekening verifiëren om er zeker van te zijn dat de gegevens niet door een onbevoegde derde zijn gewijzigd.

Het antwoord JWT bestaat uit drie delen, gescheiden door punten ("."), in het volgende formaat:

Header.Payload.Signature

jwt Ontcijferd jwt
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2ODc5NDI2MTAsInBheWxvYWQiOnsicmVxdWVzdHJlZmVyZW5jZSI6Ilc2MC1IQXl1ZUcyTiIsInZlcnNpb24iOiIxLjAwIiwiand0IjoiZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKcWQzUXVkWE5sY2lJc0ltbGhkQ0k2TVRZNE56azBNall4TUN3aWNHRjViRzloWkNJNmV5SmpkWEp5Wlc1amVXbHpiek5oSWpvaVZWTkVJaXdpY21WeGRXVnpkSFI1Y0dWa1pYTmpjbWx3ZEdsdmJuTWlPbHRkTENKemFYUmxjbVZtWlhKbGJtTmxJam9pZEdWemRGOXFiMlZpYkc5blozTTVNalEwTlNJc0ltRmpZMjkxYm5SMGVYQmxaR1Z6WTNKcGNIUnBiMjRpT2lKRlEwOU5JaXdpY0dGeVpXNTBkSEpoYm5OaFkzUnBiMjV5WldabGNtVnVZMlVpT2lJMk1DMDVMVE15TURJeU5qVWlMQ0p6WldOMWNtbDBlV052WkdVaU9pSXhNak1pTENKaVlYTmxZVzF2ZFc1MElqb2lOVEFpTENKbGVIQnBjbmxrWVhSbElqb2lNREV2TWpBeU55SXNJbkJoYmlJNklqUXdNREF3TURBd01EQXdNREV3TURBaWZYMC4yZVhkZHoyM0wybHhQdV80RWF6bUFQa2hRSWZlbzZCVVpTdC1FV3pMa3UwIiwicmVzcG9uc2UiOlt7InRyYW5zYWN0aW9uc3RhcnRlZHRpbWVzdGFtcCI6IjIwMjMtMDYtMjggMDg6NTY6NDkiLCJjdXN0b21lcm91dHB1dCI6IlJFU1VMVCIsImxpdmVzdGF0dXMiOiIwIiwiaXNzdWVyIjoiU2VjdXJlVHJhZGluZyBUZXN0IElzc3VlcjEiLCJtZXJjaGFudGNhdGVnb3J5Y29kZSI6IjEyMzQiLCJkY2NlbmFibGVkIjoiMCIsInNldHRsZWR1ZWRhdGUiOiIyMDIzLTA2LTI4IiwiZXJyb3Jjb2RlIjoiMCIsInRocmVlZHZlcnNpb24iOiIyLjEuMCIsImFjcXVpcmVydHJhbnNhY3Rpb25yZWZlcmVuY2UiOiJPWjRYMnFNc2pFNWQwS3JsbHQ5MCIsInRpZCI6IjI3ODgyNzg4IiwibWVyY2hhbnRudW1iZXIiOiIwMDAwMDAwMCIsIm1lcmNoYW50Y291bnRyeWlzbzJhIjoiR0IiLCJzdGF0dXMiOiJZIiwidHJhbnNhY3Rpb25yZWZlcmVuY2UiOiI2MC05LTMyMDIyNjUiLCJtZXJjaGFudG5hbWUiOiJUZXN0IE1lcmNoYW50IiwicGF5bWVudHR5cGVkZXNjcmlwdGlvbiI6IlZJU0EiLCJhY2NvdW50dHlwZWRlc2NyaXB0aW9uIjoiRUNPTSIsImFjcXVpcmVycmVzcG9uc2Vjb2RlIjoiMCIsInJlcXVlc3R0eXBlZGVzY3JpcHRpb24iOiJUSFJFRURRVUVSWSIsIm1hc2tlZHBhbiI6IjQwMDAwMCMjIyMjIzEwMDAiLCJlcnJvcm1lc3NhZ2UiOiJPayIsImRlYnRyZXBheW1lbnQiOiIwIiwiaXNzdWVyY291bnRyeWlzbzJhIjoiWloiLCJlbnJvbGxlZCI6IlkiLCJvcGVyYXRvcm5hbWUiOiJqd3QudXNlciIsInNldHRsZXN0YXR1cyI6IjAifV0sInNlY3JhbmQiOiI2cSJ9LCJhdWQiOiJqd3QudXNlciJ9.Hm88rS9bkZ9hFDOt9rKzQvCqlb4uuioNPcqYqydA1BA

  Voordat u het antwoord kunt vertrouwen, moet u controleren of de geretourneerde handtekening overeenkomt met de verwachte waarde. Zo niet, dan kan deze door een onbevoegde partij zijn gewijzigd.

De bibliotheek die u eerder hebt gekozen om het JWT op uw betalingsformulier te genereren en te verifiëren, kan ook worden gebruikt om het teruggestuurde JWT te verifiëren.

Hoe dit werkt

De signature is gehashed met SHA-256, en kan dus niet gedecodeerd worden. Dit betekent dat om de signature correct is, moet het opnieuw worden berekend met behulp van de header en payload teruggestuurd.
Het verstrekken van dezelfde secret wordt gebruikt tijdens dit proces, de herberekende signature moet overeenkomen met die in het antwoord JWT. Samengevat:

  1. Base64URL decoderen JWT header
  2. Base64URL decoderen JWT payload
  3. De handtekening opnieuw genereren door de header, de payload en ze ondertekenen met de secret.

Zodra dit proces is voltooid, raden wij aan ervoor te zorgen dat de errorcode waarde in het antwoord is "0", wat wijst op succes.

 

Dien AUTH verzoek in met Webservices API

Nadat de EMV 3DS authenticatie is uitgevoerd, moet je een AUTH verzoek indienen bij Trust Payments via onze Webservices API om de betaling te verwerken.

  Als u dat nog niet hebt gedaan, raden wij u aan onze Aan de slag documentatie te lezen om te leren hoe u een basisverzoek met onze Webservices API kunt verwerken.

Klik hier om dit in een nieuw tabblad te openen.

  Wanneer het JWT-antwoord 3DS bevat status N (wat betekent dat de kaarthouder de authenticatie niet met succes heeft voltooid) moet u het verzoek autorisatie niet indienen. Als u ervoor kiest het verzoek autorisatie in te dienen, krijgt u een foutmelding.

U moet de onderstaande schematabel lezen en ervoor zorgen dat de vereiste velden in het verzoek worden ingevuld, zoals in het volgende voorbeeld:

autorisatie veldspecificatie

  Veld Formaat Beschrijving
X1-EN.png parenttransactionreference
XPath: /operation/parenttransactionreference
Alfanumeriek (25) Waarde van de THREEDQUERY transactionreference teruggestuurd in de jwt antwoord dat je hierboven hebt geverifieerd.

 

Code voorbeeld

Python PHP cURL Ruwe JSON Ruwe XML
#!/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

Vervang <DOMAIN> met een ondersteund domein. Klik hier voor een volledige lijst.

 

Behandel het antwoord op autorisatie

Tenslotte krijgt uw server een antwoord op autorisatie .

{
"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"
}
Step-up - Contains gateway response and threedresponse value

Voordat een waarde die wordt geretourneerd in de jwt payload, moet uw systeem eerst de handtekening verifiëren om er zeker van te zijn dat de gegevens niet door een onbevoegde derde zijn gewijzigd.

Het antwoord JWT bestaat uit drie delen, gescheiden door punten ("."), in het volgende formaat:

Header.Payload.Signature

jwt Ontcijferd jwt
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE2MzMwOTg4NzMsInBheWxvYWQiOnsicmVxdWVzdHJlZmVyZW5jZSI6IlcyNC1wcWJ3aDBuMiIsInZlcnNpb24iOiIxLjAwIiwiand0IjoiZXlKaGJHY2lPaUpJVXpJMU5pSXNJblI1Y0NJNklrcFhWQ0o5LmV5SnBjM01pT2lKM1pXSnpaWEoyYVdObGMwQnRaWEpqYUdGdWRDNWpiMjBpTENKcFlYUWlPakUyTXpNd09UZzROek1zSW5CaGVXeHZZV1FpT25zaVkzVnpkRzl0WlhKMGIzZHVJam9pUW1GdVoyOXlJaXdpWW1sc2JHbHVaM0J2YzNSamIyUmxJam9pVkVVeE1pQXpVMVFpTENKamRYSnlaVzVqZVdsemJ6TmhJam9pUjBKUUlpd2lZM1Z6ZEc5dFpYSndjbVZ0YVhObElqb2lNVElpTENKaWFXeHNhVzVuYkdGemRHNWhiV1VpT2lKT1lXMWxJaXdpYkc5allXeGxJam9pWlc1ZlIwSWlMQ0pqZFhOMGIyMWxjbXhoYzNSdVlXMWxJam9pVG1GdFpTSXNJbUpwYkd4cGJtZGxiV0ZwYkNJNkluUmxjM1JBWlhoaGJYQnNaUzVqYjIwaUxDSmlhV3hzYVc1bmNISmxiV2x6WlNJNklqRXlJaXdpYzJsMFpYSmxabVZ5Wlc1alpTSTZJblJsYzNReElpd2lZV05qYjNWdWRIUjVjR1ZrWlhOamNtbHdkR2x2YmlJNklrVkRUMDBpTENKd1lYSmxiblIwY21GdWMyRmpkR2x2Ym5KbFptVnlaVzVqWlNJNklqSTBMVGt0T0RBd05qRWlMQ0ppYVd4c2FXNW5jM1J5WldWMElqb2lWR1Z6ZENCemRISmxaWFFpTENKeVpYRjFaWE4wZEhsd1pXUmxjMk55YVhCMGFXOXVjeUk2VzEwc0ltTjFjM1J2YldWeWMzUnlaV1YwSWpvaVZHVnpkQ0J6ZEhKbFpYUWlMQ0pqZFhOMGIyMWxjbkJ2YzNSamIyUmxJam9pTVRFeU15SXNJbUpwYkd4cGJtZDBaV3hsY0dodmJtVjBlWEJsSWpvaVRTSXNJbUpoYzJWaGJXOTFiblFpT2lJeE1EQXdJaXdpWW1sc2JHbHVaM1JsYkdWd2FHOXVaU0k2SWpBeE1qTTBJREV4TVRJeU1pSXNJbUpwYkd4cGJtZG1hWEp6ZEc1aGJXVWlPaUpVWlhOMElpd2lZbWxzYkdsdVozUnZkMjRpT2lKQ1lXNW5iM0lpZlgwLkpfVzlGU19MYkVzTXQ0SjhnWUlTSDNQcjNDMl9PUHRQMVd1Nm1MRklON0UiLCJyZXNwb25zZSI6W3sidHJhbnNhY3Rpb25zdGFydGVkdGltZXN0YW1wIjoiMjAyMS0xMC0wMSAxNDozNDozMyIsImN1c3RvbWVyb3V0cHV0IjoiVEhSRUVEUkVESVJFQ1QiLCJsaXZlc3RhdHVzIjoiMCIsIm1lcmNoYW50bmFtZSI6IlRlc3QgVW5pdHRlc3QgU2l0ZSIsImRjY2VuYWJsZWQiOiIwIiwic2V0dGxlZHVlZGF0ZSI6IjIwMjEtMTAtMDEiLCJlcnJvcmNvZGUiOiIwIiwiYWNxdWlyZXJ0cmFuc2FjdGlvbnJlZmVyZW5jZSI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwidGlkIjoiMjc4ODAwMDAiLCJ0aHJlZWRwYXlsb2FkIjoiZXlKdFpYTnpZV2RsVkhsd1pTSTZJa05TWlhFaUxDSnRaWE56WVdkbFZtVnljMmx2YmlJNklqSXVNUzR3SWl3aWRHaHlaV1ZFVTFObGNuWmxjbFJ5WVc1elNVUWlPaUkyWm1Jd1pETXlZeTA0WVdObUxUUTRNR1l0T1dZeE5DMWxNV0UwT0RjNU9UQmhaV0VpTENKaFkzTlVjbUZ1YzBsRUlqb2lNMlV6TjJZd1pUSXRNVEEyTlMwMFpEUmtMV0ZqTXprdE9XTTBNMll4TkdGaFl6RXpJaXdpWTJoaGJHeGxibWRsVjJsdVpHOTNVMmw2WlNJNklqQXlJbjAiLCJtZXJjaGFudG51bWJlciI6IjAwMDAwMDAwIiwibWVyY2hhbnRjb3VudHJ5aXNvMmEiOiJHQiIsInN0YXR1cyI6IkMiLCJ0cmFuc2FjdGlvbnJlZmVyZW5jZSI6IjI0LTktODAwNjEiLCJ0aHJlZWR2ZXJzaW9uIjoiMi4xLjAiLCJwYXltZW50dHlwZWRlc2NyaXB0aW9uIjoiVklTQSIsImFjc3VybCI6Imh0dHBzOi8vMG1lcmNoYW50YWNzc3RhZy5jYXJkaW5hbGNvbW1lcmNlLmNvbS9NZXJjaGFudEFDU1dlYi9jcmVxLmpzcCIsImFjY291bnR0eXBlZGVzY3JpcHRpb24iOiJFQ09NIiwiYWNxdWlyZXJyZXNwb25zZWNvZGUiOiIwIiwicmVxdWVzdHR5cGVkZXNjcmlwdGlvbiI6IlRIUkVFRFFVRVJZIiwiaXNzdWVyIjoiU2VjdXJlVHJhZGluZyBUZXN0IElzc3VlcjEiLCJtYXNrZWRwYW4iOiI0MDAwMDAjIyMjIyMxMDkxIiwiZXJyb3JtZXNzYWdlIjoiT2siLCJvcGVyYXRvcm5hbWUiOiJ3ZWJzZXJ2aWNlc0BtZXJjaGFudC5jb20iLCJlbnJvbGxlZCI6IlkiLCJpc3N1ZXJjb3VudHJ5aXNvMmEiOiJaWiIsInNldHRsZXN0YXR1cyI6IjAifV0sInNlY3JhbmQiOiJad0VjIn0sImF1ZCI6IndlYnNlcnZpY2VzQG1lcmNoYW50LmNvbSJ9.lyPo03P1nTQNohqqF3LZdLWnXoaIzgKMzjC14LWhJG8&

  Voordat u het antwoord kunt vertrouwen, moet u controleren of de geretourneerde handtekening overeenkomt met de verwachte waarde. Zo niet, dan kan deze door een onbevoegde partij zijn gewijzigd.

De bibliotheek die u eerder hebt gekozen om het JWT op uw betalingsformulier te genereren en te verifiëren, kan ook worden gebruikt om het teruggestuurde JWT te verifiëren.

Hoe dit werkt

De signature is gehashed met SHA-256, en kan dus niet gedecodeerd worden. Dit betekent dat om de signature correct is, moet het opnieuw worden berekend met behulp van de header en payload teruggestuurd.
Het verstrekken van dezelfde secret wordt gebruikt tijdens dit proces, de herberekende signature moet overeenkomen met die in het antwoord JWT. Samengevat:

  1. Base64URL decoderen JWT header
  2. Base64URL decoderen JWT payload
  3. De handtekening opnieuw genereren door de header, de payload en ze ondertekenen met de secret.

Zodra dit proces is voltooid, raden wij aan ervoor te zorgen dat de errorcode waarde in het antwoord is "0", wat wijst op succes.


Omdat de klant onderworpen was aan uitdagingsauthenticatie, was de handtekening van de threedresponse wordt ook geretourneerd in het antwoord. De threedresponse moet worden opgenomen in het AUTH verzoek. Het volgende is een voorbeeld van een threedresponse:

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiI1YzEyODg0NWMxMWI5MjIwZGMwNDZlOGUiLCJpYXQiOjE2MzMwOTg4NzcsImV4cCI6MTYzMzEwNjA3NywianRpIjoiNGQyMjA5NGMtZjY3Mi00YTRjLWIwMTktYjhjZDY2ZDM0MzBiIiwiQ29uc3VtZXJTZXNzaW9uSWQiOiIwXzU2OTgwMzA1LTk1ZmQtNDNmOC05NzRlLTQ0NmFhMGU4MjgzNCIsIlJlZmVyZW5jZUlkIjoiMjQtMmJhNzBjYTMxZDMyYzI0ZGU4OGEzNTE4ZjE0NTMzY2FlOGViMjhhZjRhNDVlODBiODQwNmZkNGE4MTRjZmI0YSIsImF1ZCI6IjI0LTJiYTcwY2EzMWQzMmMyNGRlODhhMzUxOGYxNDUzM2NhZThlYjI4YWY0YTQ1ZTgwYjg0MDZmZDRhODE0Y2ZiNGEiLCJQYXlsb2FkIjp7IlZhbGlkYXRlZCI6dHJ1ZSwiUGF5bWVudCI6eyJUeXBlIjoiQ0NBIiwiUHJvY2Vzc29yVHJhbnNhY3Rpb25JZCI6Ilp6eDhxYzQzUEJGQXZGVXdlNDcwIiwiRXh0ZW5kZWREYXRhIjp7IkFtb3VudCI6IjEwMDAiLCJDQVZWIjoiTVRJek5EVTJOemc1TURFeU16UTFOamM0T1RBXHUwMDNkIiwiQ3VycmVuY3lDb2RlIjoiODI2IiwiRUNJRmxhZyI6IjA1IiwiVGhyZWVEU1ZlcnNpb24iOiIyLjEuMCIsIlBBUmVzU3RhdHVzIjoiWSIsIlNpZ25hdHVyZVZlcmlmaWNhdGlvbiI6IlkifX0sIkFjdGlvbkNvZGUiOiJTVUNDRVNTIiwiRXJyb3JOdW1iZXIiOjAsIkVycm9yRGVzY3JpcHRpb24iOiJTdWNjZXNzIn19.A5t9bo59kFKehQIwjaqQ2UAAqEdVlBCbI2ZbEFvUz98

Probeer de waarde niet te decoderen en controleer niet of de geretourneerde handtekening overeenkomt met de verwachte waarde. threedresponse waarde of probeer niet te controleren of de geretourneerde handtekening overeenkomt met de verwachte waarde. Trust Payments zal controleren of de gegevens niet zijn gewijzigd door een onbevoegde partij wanneer de threedresponse waarde wordt ingediend in een AUTH verzoek met Webservices API.

 

Dien AUTH verzoek in met Webservices API

Het Webservices API AUTH verzoek moet zo snel mogelijk worden ingediend nadat de 3DS authenticatie is voltooid. Als je het Webservices API AUTH verzoek op een latere datum/tijd moet indienen (uitgesteld autorisatie), moet je gebruik maken van onze 3DS API of een externe 3DS-provider gebruiken om 3DS-verificatie uit te voeren.

Nadat de EMV 3DS authenticatie is uitgevoerd, moet je een AUTH verzoek indienen bij Trust Payments via onze Webservices API om de betaling te verwerken.

  Als u dat nog niet hebt gedaan, raden wij u aan onze Aan de slag documentatie te lezen om te leren hoe u een basisverzoek met onze Webservices API kunt verwerken.

Klik hier om dit in een nieuw tabblad te openen.

  Wanneer het JWT-antwoord 3DS bevat status N (wat betekent dat de kaarthouder de authenticatie niet met succes heeft voltooid) moet u het verzoek autorisatie niet indienen. Als u ervoor kiest het verzoek autorisatie in te dienen, krijgt u een foutmelding.

U moet de onderstaande schematabel lezen en ervoor zorgen dat de vereiste velden in het verzoek worden ingevuld, zoals in het volgende voorbeeld:

autorisatie veldspecificatie

  Veld Formaat Beschrijving
X1-EN.png parenttransactionreference
XPath: /operation/parenttransactionreference
Alfanumeriek (25) Waarde van de THREEDQUERY transactionreference teruggestuurd in de jwt antwoord dat je hierboven hebt geverifieerd.

X1-EN.png

threedresponse
XPath: /operation/threedresponse
Het formaat van deze waarde is aan verandering onderhevig. Wij raden u aan deze waarde niet te valideren. De threedresponse veld wordt geretourneerd wanneer de klant wordt uitgedaagd tijdens 3-D Secure authenticatie en moet worden verzonden in het AUTH verzoek als het wordt geretourneerd naar je server.

Trust Payments verifieert de handtekening van de threedresponse ingediend en analyseert het verzoek om te bepalen of de kaarthouder al dan niet met succes is geverifieerd op de ACS van zijn kaartuitgever.

Het niet indienen van de threedresponse in de AUTH wanneer deze in het authenticatierespons wordt teruggezonden, kan ertoe leiden dat de aansprakelijkheidsverschuiving vervalt.

 

Code voorbeeld

Python PHP cURL Ruwe JSON Ruwe XML
#!/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

Vervang <DOMAIN> met een ondersteund domein. Klik hier voor een volledige lijst.

 

Behandel het antwoord op autorisatie

Tenslotte krijgt uw server een antwoord op autorisatie .

{
"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"
}
Was dit artikel nuttig?
0 van de 0 vonden dit nuttig