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.
Als u al e-commerce betalingen verwerkt met behulp van onze JavaScript Library, kan uw bestaande oplossing worden bijgewerkt om ook Protect Plus verzoeken in te dienen met minimale wijzigingen in de opmaak. Klik hier voor meer informatie.
Protect Plus is een geavanceerde fraudebestrijdingsdienst die uw site een extra beveiligingslaag biedt tegen frauduleuze transacties. Het maakt gebruik van de grootste negatieve database in de sector om een uitgebreide reeks fraudebeoordelingen uit te voeren, waaronder identiteitscontroles met de Britse kiezerslijsten en BT-databases.
Aanmelden voor Protect Plus
Voordat u aan de slag kunt, moet u contact opnemen met ons verkoopteam en Protect Plus inschakelen op uw account.
Welke controles worden er uitgevoerd?
Wij analyseren de facturerings-, leverings- en betalingsgegevens van de klant met behulp van een op regels gebaseerd systeem om verdachte patronen in gebruikersactiviteiten op te sporen. Ons systeem zal u helpen beslissen of u de transactie van een klant al dan niet verwerkt op basis van het waargenomen risiconiveau. Uitgevoerde controles omvatten:
- De grootste negatieve database van de industrie.
- Neuraal gebaseerde fraudebeoordelingen.
- Tumbling of Swapping, wanneer er een ongebruikelijk gebruikspatroon is in het kaartnummer, de vervaldatum of klantgegevens die aan een transactie verbonden zijn.
Protect Plus biedt geen garantie tegen fraude
U moet alle gegevens betreffende een transactie in overweging nemen alvorens de betaling te aanvaarden.
Wat gebeurt er nadat de controles zijn uitgevoerd?
Het systeem Protect Plus analyseert de transactiegegevens en geeft een van de volgende opties af fraudcontrolshieldstatuscode waarden:
"ACCEPT" | De details worden niet verdacht geacht. |
"CHALLENGE" | Verder onderzoek wordt aanbevolen. |
"DENY" | De details zijn verdacht en de transactie mag niet worden uitgevoerd. |
"NOSCORE" | De transactie werd door de verwerver geweigerd voordat de controles werden uitgevoerd. |
Volgorde van verzoeken
Protect Plus controles worden uitgevoerd wanneer een RISKDEC verzoek wordt ingediend bij ons systeem. Er zijn twee methoden waarmee u uw systeem kunt configureren om RISKDEC verzoeken te verwerken met behulp van onze Webservices API:
- RISKDEC dan AUTH - Voer eerst de controles uit en zoek dan autorisatie voor de betaling. Standaard schorten we verdachte betalingen op, zodat u ze kunt onderzoeken voordat u verder gaat.
- AUTH dan RISKDEC - Zoek eerst autorisatie voor de betaling en voer dan de controles uit. Uitgevoerde controles zijn nauwkeuriger omdat zij de resultaten van AVSveiligheidscodecontroles en 3-D Secure rekening houden.
Configuratie
Procesoverzicht
- Wanneer de klant op "Betalen" klikt in uw kassa, dient uw systeem een RISKDEC verzoek in bij Trust Payments via de Webservices API (wij geven hieronder een voorbeeld van hoe dit verzoek moet worden gestructureerd).
- Trust Payments controleert de betalingsgegevens, genereert een fraudcontrolshieldstatuscode en stuurt deze informatie terug naar uw systeem in een RISKDEC antwoord.
- Uw systeem moet de shield status code controleren en bepalen of de betaling al dan niet doorgaat.
- Als u ervoor kiest om de betaling te verwerken, kunt u een betaling verwerken met behulp van onze JavaScript zoals hier beschreven, met één belangrijk verschil.
Het JWT in de payload moet worden bijgewerkt om het veld parenttransactionreferenceinclusief de unieke transactionreference teruggestuurd in het antwoord op RISKDEC .
Dit wordt gebruikt om erven gegevens van het oorspronkelijke verzoek. - Trust Payments neemt contact op met de wervende bank om de betaling te verwerken.
- Trust Payments stuurt het antwoord JWT terug naar uw systeem. U zult het antwoord moeten interpreteren.
Wanneer u ervoor kiest om de RISKDEC voor de AUTH, schorten we automatisch toegestane transacties op wanneer de fraudcontrolshieldstatuscode is "CHALLENGE" of "DENY". Zo kunt u nader onderzoek verrichten en met meer kennis van zaken beslissen of u een verdachte transactie al dan niet toestaat. Dit gedrag kan worden veranderd. Gelieve contact opnemen met het Support Team voor meer informatie.
RISKDEC verzoekvoorbeeld
Hier volgt een voorbeeld van een RISKDEC verzoek, waarvan de details kunnen worden overgenomen in toekomstige betalingen die via onze JavaScript Library worden verwerkt:
#!/usr/bin/python
import securetrading
stconfig = securetrading.Config()
stconfig.username = "webservices@example.com"
stconfig.password = "Password1^"
st = securetrading.Api(stconfig)
riskdec= {
"sitereference": "test_site12345",
"requesttypedescriptions": ["RISKDEC"],
"accounttypedescription": "ECOM",
"currencyiso3a": "GBP",
"baseamount": "1011",
"orderreference": "My_Order_123",
"pan": "4111111111111111",
"expirydate": "12/2020",
"securitycode": "123"
}
strequest = securetrading.Request()
strequest.update(riskdec)
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('RISKDEC'),
'accounttypedescription' => 'FRAUDCONTROL',
'currencyiso3a' => 'GBP',
'baseamount' => '1011',
'orderreference' => 'My_Order_123',
'pan' => '4111111111111111',
'expirydate' => '12/2020',
'securitycode' => '123'
);
$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": ["RISKDEC"],
"sitereference": "test_site12345",
"baseamount": "1011",
"orderreference": "My_Order_123",
"accounttypedescription": "FRAUDCONTROL",
"pan": "4111111111111111",
"expirydate": "12/2020",
"securitycode": "123"
}]
}'
{
"alias":"webservices@example.com",
"version":"1.00",
"request":[{
"currencyiso3a":"GBP",
"requesttypedescriptions":["RISKDEC"],
"sitereference":"test_site12345",
"baseamount":"1011",
"orderreference":"My_Order_123",
"accounttypedescription":"FRAUDCONTROL",
"pan":"4111111111111111",
"expirydate":"12/2020"
}]
}
<requestblock version="3.67">
<alias>webservices@example.com</alias>
<request type="RISKDEC">
<merchant>
<orderreference>My_Order_123</orderreference>
</merchant>
<billing>
<amount currencycode="GBP">1011</amount>
<payment>
<expirydate>12/2020</expirydate>
<pan>4111111111111111</pan>
</payment>
</billing>
<operation>
<accounttypedescription>FRAUDCONTROL</accounttypedescription>
<sitereference>test_site12345</sitereference>
</operation>
</request>
</requestblock>
Vervang <DOMAIN>
met een ondersteund domein. Klik hier voor een volledige lijst.
RISKDEC antwoordvoorbeeld
Hier is een voorbeeld van het bijbehorende RISKDEC antwoord:
Voor de specificatie van het antwoordveld RISKDEC gaat u naar het gedeelte "Het antwoord interpreteren".
{
u 'requestreference': u 'A0dcb11e6',
u 'version': u '1.00',
u 'responses': [{
u 'fraudcontrolresponsecode': u '0100',
u 'paymenttypedescription': u 'VISA',
u 'orderreference': u 'My_Order_123',
u 'transactionstartedtimestamp': u '2016-12-07 16:19:28',
u 'issuer': u 'Test Issuer',
u 'issuercountryiso2a': u 'GB',
u 'errormessage': u 'Ok',
u 'operatorname': u 'webservices@example.com',
u 'fraudcontrolreference': u 'TEST',
u 'accounttypedescription': u 'FRAUDCONTROL',
u 'errorcode': u '0',
u 'transactionreference': u '1-2-345678',
u 'maskedpan': u '411111######1111',
u 'requesttypedescription': u 'RISKDEC',
u 'fraudcontrolshieldstatuscode': u 'ACCEPT',
u 'livestatus': u '0'
}]
}
array(3) {
["requestreference"] => string(9) "A58cdfkpy"
["version"] => string(4) "1.00"
["responses"] => array(1) {
[0] => array(16) {
["errorcode"] => string(1) "0"
["orderreference"] => string(12) "My_Order_123"
["fraudcontrolresponsecode"] => string(4) "0100"
["paymenttypedescription"] => string(4) "VISA"
["maskedpan"] => string(16) "411111######1111"
["transactionstartedtimestamp"] => string(19) "2016-12-09 11:12:39"
["issuer"] => string(11) "Test Issuer"
["issuercountryiso2a"] => string(2) "GB"
["errormessage"] => string(2) "Ok"
["operatorname"] => string(23) "webservices@example.com"
["accounttypedescription"] => string(12) "FRAUDCONTROL"
["transactionreference"] => string(9) "1-2-345678"
["requesttypedescription"] => string(7) "RISKDEC"
["fraudcontrolreference"] => string(4) "TEST"
["fraudcontrolshieldstatuscode"] => string(6) "ACCEPT"
["livestatus"] => string(1) "0"
}
}
}
{
"requestreference":"W23-wt77f0n8",
"version":"1.00",
"response":[{
"errorcode":"0",
"fraudcontrolresponsecode":"0100",
"paymenttypedescription":"VISA",
"orderreference":"My_Order_123",
"transactionstartedtimestamp":"2016-12-07 16:23:03",
"issuer":"Test Issuer",
"issuercountryiso2a":"GB",
"errormessage":"Ok",
"operatorname":"webservices@example.com",
"accounttypedescription":"FRAUDCONTROL",
"transactionreference":"1-2-345678",
"requesttypedescription":"RISKDEC",
"maskedpan":"411111######1111",
"fraudcontrolreference":"TEST",
"fraudcontrolshieldstatuscode":"ACCEPT",
"livestatus":"0"
}],
"secrand":"E0ksvyuH5VKg"
}
<responseblock version="3.67">
<requestreference>X336659733</requestreference>
<response type="RISKDEC">
<merchant>
<orderreference>My_Order_123</orderreference>
<operatorname>webservices@example.com</operatorname>
</merchant>
<transactionreference>1-2-345678</transactionreference>
<billing>
<payment type="VISA">
<issuer>Test Issuer</issuer>
<issuercountry>GB</issuercountry>
<pan>411111######1111</pan>
</payment>
</billing>
<timestamp>2012-06-21 13:32:43</timestamp>
<fraudcontrol>
<shieldstatuscode>ACCEPT</shieldstatuscode>
<reference>TEST</reference>
<recommendedaction>C</recommendedaction>
<responsecode>0100</responsecode>
</fraudcontrol>
<live>0</live>
<error>
<message>Ok</message>
<code>0</code>
</error>
<operation>
<accounttypedescription>FRAUDCONTROL</accounttypedescription>
</operation>
</response>
<secrand>2ngbLQ3DO</secrand>
</responseblock>
Procesoverzicht
- Wanneer de klant op "Betalen" klikt bij het afrekenen, dient de JavaScript library een verzoek in bij Trust Payments.
- Trust Payments neemt contact op met de wervende bank om de betaling te verwerken.
- Trust Payments stuurt het antwoord JWT terug naar uw systeem. U zult het antwoord moeten interpreteren.
- Hierna dient uw systeem een RISKDEC verzoek in bij Trust Payments met behulp van de Webservices API, met inbegrip van het veld parenttransactionreferencewat de unieke transactionreference waarde die in het antwoord JWT terugkomt (wij geven hieronder een voorbeeld van hoe dit verzoek moet worden gestructureerd).
- Trust Payments controleert de betalingsgegevens, genereert een fraudcontrolshieldstatuscode en stuurt deze informatie terug naar uw systeem in een RISKDEC antwoord.
- Uw systeem moet de shield status code controleren en bepalen of de betaling al dan niet doorgaat.
- Als u een betaling wilt opschorten of annuleren, moet u een verzoek tot transactie-update verwerken via de Webservices API.
Voorbeeld aanvraag
Hier is een voorbeeld van een RISKDEC verzoek dat moet worden ingediend met onze Webservices API, na een betaling die is verwerkt met onze JavaScript Library.
#!/usr/bin/python
import securetrading
stconfig = securetrading.Config()
stconfig.username = "webservices@example.com"
stconfig.password = "Password1^"
st = securetrading.Api(stconfig)
riskdec= {
"sitereference": "test_site12345",
"requesttypedescriptions": ["RISKDEC"],
"accounttypedescription": "FRAUDCONTROL",
"currencyiso3a": "GBP",
"baseamount": "1011",
"orderreference": "My_Order_123",
"parenttransactionreference": "1-2-3"
}
strequest = securetrading.Request()
strequest.update(riskdec)
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('RISKDEC'),
'accounttypedescription' => 'FRAUDCONTROL',
'currencyiso3a' => 'GBP',
'baseamount' => '1011',
'orderreference' => 'My_Order_123',
'parenttransactionreference' => '1-2-3'
);
$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" -d '{
"alias": "webservices@example.com",
"version": "1.00",
"request": [{
"currencyiso3a": "GBP",
"requesttypedescriptions": ["RISKDEC"],
"sitereference": "test_site12345",
"baseamount": "1011",
"orderreference": "My_Order_123",
"accounttypedescription": "FRAUDCONTROL",
"parenttransactionreference": "1-2-3"
}]
}'
{
"alias":"webservices@example.com",
"version":"1.00",
"request":[{
"currencyiso3a":"GBP",
"requesttypedescriptions":["RISKDEC"],
"sitereference":"test_site12345",
"baseamount":"1011",
"orderreference":"My_Order_123",
"accounttypedescription":"FRAUDCONTROL",
"parenttransactionreference":"1-2-3"
}]
}
<requestblock version="3.67">
<alias>webservices@example.com</alias>
<request type="RISKDEC">
<merchant>
<orderreference>My_Order_123</orderreference>
</merchant>
<billing>
<amount currencycode="GBP">1011</amount>
</billing>
<operation>
<parenttransactionreference>1-2-3</parenttransactionreference>
<accounttypedescription>FRAUDCONTROL</accounttypedescription>
<sitereference>test_site12345</sitereference>
</operation>
</request>
</requestblock>
Vervang <DOMAIN>
met een ondersteund domein. Klik hier voor een volledige lijst.
Voorbeeld van een antwoord
Hier is een voorbeeld van het bijbehorende RISKDEC antwoord:
Voor de specificatie van het antwoordveld RISKDEC gaat u naar het gedeelte "Het antwoord interpreteren".
{
u 'requestreference': u 'Ad4ft45gp',
u 'version': u '1.00',
u 'responses': [{
u 'fraudcontrolresponsecode': u '0100',
u 'paymenttypedescription': u 'VISA',
u 'orderreference': u 'My_Order_123',
u 'transactionstartedtimestamp': u '2016-12-07 16:25:19',
u 'issuer': u 'Test Issuer',
u 'issuercountryiso2a': u 'US',
u 'errormessage': u 'Ok',
u 'operatorname': u 'webservices@example.com',
u 'parenttransactionreference': u '1-2-345678',
u 'fraudcontrolreference': u 'TEST',
u 'accounttypedescription': u 'FRAUDCONTROL',
u 'errorcode': u '0',
u 'transactionreference': u '1-2-345679',
u 'maskedpan': u '411111######1111',
u 'requesttypedescription': u 'RISKDEC',
u 'fraudcontrolshieldstatuscode': u 'ACCEPT',
u 'livestatus': u '0'
}]
}
array(3) {
["requestreference"] => string(9) "A0bjmprty"
["version"] => string(4) "1.00"
["responses"] => array(1) {
[0] => array(17) {
["errorcode"] => string(1) "0"
["orderreference"] => string(12) "My_Order_123"
["fraudcontrolresponsecode"] => string(4) "0100"
["paymenttypedescription"] => string(4) "VISA"
["maskedpan"] => string(16) "411111######1111"
["transactionstartedtimestamp"] => string(19) "2016-12-09 11:14:35"
["issuer"] => string(11) "Test Issuer"
["issuercountryiso2a"] => string(2) "GB"
["errormessage"] => string(2) "Ok"
["operatorname"] => string(23) "webservices@example.com"
["parenttransactionreference"] => string(10) "1-2-345678"
["accounttypedescription"] => string(12) "FRAUDCONTROL"
["transactionreference"] => string(9) "1-2-345679"
["requesttypedescription"] => string(7) "RISKDEC"
["fraudcontrolreference"] => string(4) "TEST"
["fraudcontrolshieldstatuscode"] => string(6) "ACCEPT"
["livestatus"] => string(1) "0"
}
}
}
{
"requestreference":"W23-eyqd5u3x",
"version":"1.00",
"response":[{
"errorcode":"0",
"fraudcontrolresponsecode":"0150",
"paymenttypedescription":"VISA",
"orderreference":"My_Order_123",
"transactionstartedtimestamp":"2016-12-07 16:24:50",
"issuer":"Test Issuer",
"issuercountryiso2a":"GB",
"errormessage":"Ok",
"operatorname":"webservices@example.com",
"parenttransactionreference":"1-2-345678",
"accounttypedescription":"FRAUDCONTROL",
"transactionreference":"1-2-345679",
"requesttypedescription":"RISKDEC",
"maskedpan":"411111######1111",
"fraudcontrolreference":"TEST",
"fraudcontrolshieldstatuscode":"ACCEPT",
"livestatus":"0"
}],
"secrand":"ft9j6l"
}
<responseblock version="3.67">
<requestreference>X336659733</requestreference>
<response type="RISKDEC">
<merchant>
<orderreference>My_Order_123</orderreference>
<operatorname>webservices@example.com</operatorname>
</merchant>
<transactionreference>18-65-2</transactionreference>
<billing>
<payment type="VISA">
<issuer>Test Issuer</issuer>
<issuercountry>GB</issuercountry>
<pan>411111######1111</pan>
</payment>
</billing>
<timestamp>2012-06-21 13:32:43</timestamp>
<fraudcontrol>
<shieldstatuscode>ACCEPT</shieldstatuscode>
<reference>TEST</reference>
<recommendedaction>C</recommendedaction>
<responsecode>0150</responsecode>
</fraudcontrol>
<live>0</live>
<error>
<message>Ok</message>
<code>0</code>
</error>
<operation>
<parenttransactionreference>1-2-345679</parenttransactionreference>
<accounttypedescription>FRAUDCONTROL</accounttypedescription>
</operation>
</response>
<secrand>UIPGZ</secrand>
</responseblock>
Het antwoord interpreteren
Hier is de veldspecificatie voor een RISKDEC antwoord:
Veld | Formaat | Beschrijving | |
fraudcontrolreference XPath: /fraudcontrol/reference |
Alfanumeriek (255) | Unieke referentie om de uitgevoerde Risicobeslissing controle te identificeren. | |
fraudcontrolresponsecode XPath: /fraudcontrol/responsecode |
Numeriek (4) | Een numerieke code die wordt gekoppeld aan een beschrijving van de resultaten van de uitgevoerde Risicobeslissing controles. | |
fraudcontrolshieldstatuscode XPath: /fraudcontrol/shieldstatuscode |
Alfa (10) |
Een van de volgende waarden:
|
|
requesttypedescription XPath: /@type |
Alpha (20) | U krijgt terug: "RISKDEC". | |
rulecategoryflag XPath: /fraudcontrol/categoryflag |
Alfanumeriek (255) |
Referentie gebruikt om een voorwaarde te identificeren waaraan is voldaan om de DENY of CHALLENGE fraudcontrolshieldstatuscode. Wordt alleen geretourneerd als de controles met succes zijn uitgevoerd. |
|
rulecategorymessage XPath: /fraudcontrol/categorymessage |
Tekst (onbepaalde lengte) |
Voorwaarde waaraan is voldaan om de DENY of CHALLENGE fraudcontrolshieldstatuscode. Wordt alleen geretourneerd als de controles met succes zijn uitgevoerd. |
Test
Wij raden u aan uw oplossing grondig te testen alvorens deze in te schakelen op uw live site referentie.
Klik hier voor gegevens die u kunt indienen om verschillende RISKDEC reacties te simuleren op ons testsysteem.