De Merchant Plug-in (MPI) is een softwaremodule die wordt gebruikt tijdens het 3D Secure . De MPI de kaartgegevens van de klant en neemt contact op met de kaartuitgever om na te gaan of de kaart is aangemeld bij een 3D Secure . Indien dit het geval is, MPI de MPI het adres MPI van de Access Control Server (ACS) van de kaartuitgever. De handelaar leidt de browser van de klant om naar de ACS om diens 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 om ervoor te zorgen dat uw systeem voldoet aan de 3D Secure en up-to-date blijft met alle wijzigingen die door Visa Mastercard worden doorgevoerd. U moet Trust Payments bovendien Trust Payments elk van 3D Secure hieronder vermelde 3D Secure geldige, ongewijzigde en geverifieerde waarden Trust Payments .
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 gedeelte worden vermeld, mag u de betreffende veldenNIETindienen in verzoeken aan Trust Payments.
Behandeling van ingeschreven kaarten
Nadat is vastgesteld dat de kaart is aangesloten bij het 3D Secure en de klant met succes is geverifieerd, moet uw systeem een AUTH opstellen en verzenden om de betaling te voltooien.
De specificatie van het verzoek komt grotendeels overeen met die van eenstandaard AUTH, met aanvullende velden die vereist zijn voor 3D Secure, zoals te zien is 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 | |
| Conditioneel | 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. |
| Conditioneel | eci XPath: /threedsecure/eci |
Alfanumeriek (2) |
Het beveiligingsniveau ECI (E-Commerce Indicator) van de transactie. Dien deze waarde altijd in als hij beschikbaar is. |
| Verplicht | 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. |
| Verplicht | status XPath: /threedsecure/status |
Char (1) |
Geeft aan of de klant al dan niet op de ACS van de kaartuitgever werd geauthenticeerd:
|
| Conditioneel | threedversion XPath: /threedsecure/version |
Numeriek (6) |
Versie van 3D Secure om de betaling te verifiëren. (bijv. „2.2.0”) Dien deze waarde altijd in als hij beschikbaar is. |
| Conditioneel | 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 online kaartbetalingen via 3D Secure moeten worden verwerkt. Als een kaart niet is geregistreerd, wordt aanbevolen de transactie te stoppen en de klant alternatieve betaalmethoden 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 komt grotendeels overeen met die van eenstandaard AUTH, met aanvullende velden die vereist zijn voor 3D Secure zoals te zien is 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 | |
| Verplicht |
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. |
| Conditioneel |
threedversion XPath: /threedsecure/version |
Numeriek (6) |
Versie van 3D Secure om de betaling te verifiëren. (bijv. „2.2.0”) Dien deze waarde altijd in als hij beschikbaar is. |
| Conditioneel |
threeddirectorytransactionreference XPath: /threedsecure/directorytransactionreference |
Alfanumeriek (48) |
Unieke DSTransactionId teruggestuurd door uw MPI provider. Dien deze waarde altijd in als hij beschikbaar is. |