De merchant plug-in (MPI) is een softwaremodule die tijdens het 3-D Secure proces wordt gebruikt. De MPI identificeert de kaartgegevens van de klant en neemt contact op met de kaartuitgever om te bepalen of de kaart is ingeschreven in een 3-D Secure systeem. Indien dit het geval is, stuurt de MPI het adres van de Access Control Server (ACS) van de kaartuitgever terug. De handelaar stuurt de browser van de klant door naar de ACS om zijn identiteit te verifiëren.
Trust Payments biedt u toegang tot een MPI implementatie die automatisch wordt gebruikt door onze JavaScript library tijdens het standaard betalingsproces, waardoor u bespaart dat uw servers extra gevoelige gegevens moeten verwerken. Als u echter al uw eigen MPI hebt geconfigureerd als onderdeel van uw oplossing, volg dan het alternatieve proces dat hieronder wordt beschreven:
Vereisten
Belangrijk: Als u uw eigen MPI gebruikt, is het uw verantwoordelijkheid ervoor te zorgen dat uw systeem de specificatie 3-D Secure volgt en op de hoogte blijft van alle wijzigingen die door Visa en Mastercard worden uitgegeven. U moet ook Trust Payments voorzien van geldige, ongewijzigde en geverifieerde waarden voor elk hieronder gespecificeerd 3-D Secure veld.
Het niet volgen van de onderstaande specificatie kan leiden tot het verlies van elke aansprakelijkheidsverschuiving.
Als u geen waarden hebt voor specifieke velden die in dit deel worden vermeld, moet u NIET de betreffende velden indienen in verzoeken aan Trust Payments.
Behandeling van ingeschreven kaarten
Nadat is vastgesteld dat de kaart is ingeschreven in het 3-D Secure systeem en de klant met succes is geverifieerd, moet uw systeem een AUTH verzoek opstellen en indienen om de betaling te voltooien.
De specificatie van het verzoek volgt grotendeels die van een standaard AUTH, met extra velden voor 3-D Secure, zoals in het onderstaande voorbeeld.
Voorbeelden
Het volgende voorbeeld gaat ervan uit dat u de noodzakelijke PCI-certificering om gevoelige kaarthoudergegevens in het verzoek te verwerken en in te dienen. Als alternatief kunt u de cachetoken waarde in het verzoek.
#!/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"],
"accounttypedescription": "ECOM",
"currencyiso3a": "GBP",
"baseamount": "1050",
"orderreference": "My_Order_123",
"pan": "4111111111111111",
"expirydate": "12/2020",
"securitycode": "123",
"cavv":"Q0FWVkNBVlZDQVZWQ0FWVkNBVlY=",
"eci":"05",
"enrolled":"Y",
"status":"Y",
"threedversion":"2.2.0",
"threeddirectorytransactionreference":"f00e1111-0011-00a6-ab00-a00000a00000"
}
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'),
'accounttypedescription' => 'ECOM',
'currencyiso3a' => 'GBP',
'baseamount' => '1050',
'orderreference' => 'My_Order_123',
'pan' => '4111111111111111',
'expirydate' => '12/2020',
'securitycode' => '123',
'cavv' => 'Q0FWVkNBVlZDQVZWQ0FWVkNBVlY=',
'eci' => '05',
'enrolled' => 'Y',
'status' => 'Y',
'threedversion' => '2.2.0',
'threeddirectorytransactionreference' => 'f00e1111-0011-00a6-ab00-a00000a00000'
);
$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": [{
"currencyiso3a": "GBP",
"requesttypedescriptions": ["AUTH"],
"sitereference": "test_site12345",
"baseamount": "1050",
"orderreference": "My_Order_123",
"accounttypedescription": "ECOM",
"pan": "4111111111111111",
"expirydate": "12/2020",
"securitycode": "123",
"cavv":"Q0FWVkNBVlZDQVZWQ0FWVkNBVlY=",
"eci":"05",
"enrolled":"Y",
"status":"Y",
"threedversion":"2.2.0",
"threeddirectorytransactionreference":"f00e1111-0011-00a6-ab00-a00000a00000"
}]
}'
{
"alias":"webservices@example.com",
"version":"1.00",
"request":[{
"currencyiso3a":"GBP",
"requesttypedescriptions":["AUTH"],
"sitereference":"test_site12345",
"baseamount":"1050",
"orderreference":"My_Order_123",
"accounttypedescription":"ECOM",
"pan":"4111111111111111",
"expirydate":"12/2020",
"securitycode":"123",
"cavv":"Q0FWVkNBVlZDQVZWQ0FWVkNBVlY=",
"eci":"05",
"enrolled":"Y",
"status":"Y",
"threedversion":"2.2.0",
"threeddirectorytransactionreference":"f00e1111-0011-00a6-ab00-a00000a00000"
}]
}
<requestblock version="3.67">
<alias>webservices@example.com</alias>
<request type="AUTH">
<merchant>
<orderreference>My_Order_123</orderreference>
</merchant>
<billing>
<payment>
<expirydate>12/2020</expirydate>
<pan>4111111111111111</pan>
<securitycode>123</securitycode>
</payment>
<amount currencycode="GBP">1050</amount>
</billing>
<operation>
<sitereference>test_site12345</sitereference>
<accounttypedescription>ECOM</accounttypedescription>
</operation>
<threedsecure>
<cavv>Q0FWVkNBVlZDQVZWQ0FWVkNBVlY=</cavv>
<eci>05</eci>
<enrolled>Y</enrolled>
<status>Y</status>
<version>2.2.0</version>
<directorytransactionreference>f00e1111-0011-00a6-ab00-a00000a00000</directorytransactionreference>
</threedsecure>
</request>
</requestblock>
Specificatie veld
Veld | Formaat | Beschrijving | |
cavv XPath: /threedsecure/cavv |
Alfanumeriek (56) |
De unieke Cardholder Authentication Verification Value (CAVV) geassocieerd met de transactie. Dien deze waarde altijd in als hij beschikbaar is. |
|
eci XPath: /threedsecure/eci |
Alfanumeriek (2) |
Het beveiligingsniveau ECI (E-Commerce Indicator) van de transactie. Dien deze waarde altijd in als hij beschikbaar is. |
|
enrolled XPath: /threedsecure/enrolled |
Char (1) | Vul "Y" in om aan te geven dat de kaart geregistreerd is. Zie hieronder voor informatie over het omgaan met niet-ingeschreven kaarten. | |
status XPath: /threedsecure/status |
Char (1) |
Geeft aan of de klant al dan niet op de ACS van de kaartuitgever werd geauthenticeerd:
|
|
threedversion XPath: /threedsecure/version |
Numeriek (6) |
Versie van 3-D Secure die wordt gebruikt om de betaling te verifiëren. (bijv. "2.2.0") Dien deze waarde altijd in als hij beschikbaar is. |
|
threeddirectorytransactionreference XPath: /threedsecure/directorytransactionreference |
Alfanumeriek (48) |
Unieke DSTransactionId teruggestuurd door uw MPI provider. Dien deze waarde altijd in als hij beschikbaar is. |
Wij raden ten zeerste af de transactie door te zetten indien de status is "N" of "R":
- Als status "N" is, betekent dit dat de klant niet is geauthenticeerd.
- Als status "R" is, betekent dit dat de authenticatie is geweigerd.
Behandeling van niet-ingeschreven kaarten (of indien inschrijving "U" - Onbekend)
Als zowel uw bedrijf als de bank van de kaarthouder gevestigd zijn binnen de Europese Economische Ruimte (EER) of het Verenigd Koninkrijk, moet uw implementatie voldoen aan de Payment Services Directive (PSD2).
PSD2 vereist dat online kaartbetalingen worden verwerkt met 3-D Secure. Als een kaart niet is geregistreerd, is de aanbevolen aanpak om de transactie te stoppen en de klant een alternatief betaalmiddel aan te bieden.
Als u de bovenstaande juridische implicaties in overweging hebt genomen en toestemming krijgt om door te gaan, moet uw systeem een AUTH verzoek opstellen en handmatig indienen om de betaling te voltooien met een niet-ingeschreven kaart.
De specificatie van het verzoek volgt grotendeels die van een standaard AUTH, met extra velden voor 3-D Secure (zoals in het onderstaande voorbeeld).
Voorbeeld
Het volgende voorbeeld gaat ervan uit dat u de noodzakelijke PCI-certificering om gevoelige kaarthoudergegevens in het verzoek te verwerken en in te dienen. Als alternatief kunt u de cachetoken waarde in het verzoek.
#!/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"],
"accounttypedescription": "ECOM",
"currencyiso3a": "GBP",
"baseamount": "1050",
"orderreference": "My_Order_123",
"pan": "4111111111111111",
"expirydate": "12/2020",
"securitycode": "123",
"enrolled":"N",
"threedversion":"2.2.0",
"threeddirectorytransactionreference":"f00e1111-0011-00a6-ab00-a00000a00000"
}
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'),
'accounttypedescription' => 'ECOM',
'currencyiso3a' => 'GBP',
'baseamount' => '1050',
'orderreference' => 'My_Order_123',
'pan' => '4111111111111111',
'expirydate' => '12/2020',
'securitycode' => '123',
'enrolled' => 'N',
'threedversion' => '2.2.0',
'threeddirectorytransactionreference' => 'f00e1111-0011-00a6-ab00-a00000a00000'
);
$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": [{
"currencyiso3a": "GBP",
"requesttypedescriptions": ["AUTH"],
"sitereference": "test_site12345",
"baseamount": "1050",
"orderreference": "My_Order_123",
"accounttypedescription": "ECOM",
"pan": "4111111111111111",
"expirydate": "12/2020",
"securitycode": "123",
"enrolled":"N",
"threedversion":"2.2.0",
"threeddirectorytransactionreference":"f00e1111-0011-00a6-ab00-a00000a00000"
}]
}'
{
"alias":"webservices@example.com",
"version":"1.00",
"request":[{
"currencyiso3a":"GBP",
"requesttypedescriptions":["AUTH"],
"sitereference":"test_site12345",
"baseamount":"1050",
"orderreference":"My_Order_123",
"accounttypedescription":"ECOM",
"pan":"4111111111111111",
"expirydate":"12/2020",
"securitycode":"123",
"enrolled":"N",
"threedversion":"2.2.0",
"threeddirectorytransactionreference":"f00e1111-0011-00a6-ab00-a00000a00000"
}]
}
<requestblock version="3.67">
<alias>webservices@example.com</alias>
<request type="AUTH">
<merchant>
<orderreference>My_Order_123</orderreference>
</merchant>
<billing>
<payment>
<expirydate>12/2020</expirydate>
<pan>4111111111111111</pan>
<securitycode>123</securitycode>
</payment>
<amount currencycode="GBP">1050</amount>
</billing>
<operation>
<sitereference>test_site12345</sitereference>
<accounttypedescription>ECOM</accounttypedescription>
</operation>
<threedsecure>
<enrolled>N</enrolled>
<version>2.2.0</version>
<directorytransactionreference>f00e1111-0011-00a6-ab00-a00000a00000</directorytransactionreference>
</threedsecure>
</request>
</requestblock>
Specificatie veld
Veld | Formaat | Beschrijving | |
enrolled XPath: /threedsecure/enrolled |
Char (1) | Vul "N" in om aan te geven dat de kaart niet is geregistreerd, of "U" om aan te geven dat registratie onbekend is. | |
threedversion XPath: /threedsecure/version |
Numeriek (6) |
Versie van 3-D Secure die wordt gebruikt om de betaling te verifiëren. (bijv. "2.2.0") Dien deze waarde altijd in als hij beschikbaar is. |
|
threeddirectorytransactionreference XPath: /threedsecure/directorytransactionreference |
Alfanumeriek (48) |
Unieke DSTransactionId teruggestuurd door uw MPI provider. Dien deze waarde altijd in als hij beschikbaar is. |