What is tokenization?
Tokenization is the process of storing card details and generating a token to be used to process transactions against the stored card details. Trust Payments stores the card details on a secure PCI-compliant server so merchants and partners do not need to store sensitive card numbers.
Technical overview
All businesses within the EEA (European Economic Area) are mandated to use 3D Secure when processing e-commerce transactions, as part of the PSD2 mandate.
Merchants that process e-commerce transactions MUST support 3DS authentication.
See the following pages for further information:
Learn about EMV 3D Secure What is 3DS API? Using your own MPI
The following examples are Mail Order Telephone Order (MOTO) payments:
Payment - Tokenizing (Storing) card details - Cardholder Initiated Transaction
#!/usr/bin/python
import securetrading
stconfig = securetrading.Config()
stconfig.username = "webservices@example.com"
stconfig.password = "Password1^"
st = securetrading.Api(stconfig)
auth = {
"accounttypedescription": "MOTO",
"baseamount": "1050",
"credentialsonfile": "1",
"currencyiso3a": "GBP",
"expirydate": "01/35",
"requesttypedescriptions": ["AUTH"],
"orderreference": "order123456",
"pan": "4111111111111111",
"securitycode": "123",
"sitereference": "{{site_reference}}"
}
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(
'accounttypedescription' => 'MOTO',
'baseamount' => '1050',
'credentialsonfile' => '1',
'currencyiso3a' => 'GBP',
'expirydate' => '01/35',
'requesttypedescriptions' => array('AUTH'),
'orderreference' => 'order123456',
'pan' => '4111111111111111',
'securitycode' => '123',
'sitereference' => '{{site_reference}}'
);
$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": [{
"accounttypedescription": "MOTO",
"baseamount": "1050",
"credentialsonfile": "1",
"currencyiso3a": "GBP",
"expirydate": "01/35",
"requesttypedescriptions": ["AUTH"],
"orderreference": "order123456",
"pan": "4111111111111111",
"securitycode": "123",
"sitereference": "{{site_reference}}"
}]
}'
{
"alias":"{{wsapi_username}}",
"version":"1.00",
"request":[{
"accounttypedescription":"MOTO",
"baseamount":"1050",
"credentialsonfile":"1",
"currencyiso3a":"GBP",
"expirydate":"01/35",
"requesttypedescriptions":["AUTH"],
"orderreference":"order123456",
"pan":"4111111111111111",
"securitycode":"123",
"sitereference":"{{site_reference}}"
}]
}
<requestblock version="3.67">
<alias>{{wsapi_username}}</alias>
<request type="AUTH">
<billing>
<amount currencycode="GBP">1050</amount>
<payment>
<expirydate>01/35</expirydate>
<pan>4111111111111111</pan>
<securitycode>123</securitycode>
</payment>
</billing>
<merchant>
<orderreference>order123456</orderreference>
</merchant>
<operation>
<accounttypedescription>MOTO</accounttypedescription>
<credentialsonfile>1</credentialsonfile>
<sitereference>{{site_reference}}</sitereference>
</operation>
</request>
</requestblock>
No Payment - Tokenizing (Storing) card details - Cardholder Initiated Transaction
#!/usr/bin/python
import securetrading
stconfig = securetrading.Config()
stconfig.username = "webservices@example.com"
stconfig.password = "Password1^"
st = securetrading.Api(stconfig)
auth = {
"accounttypedescription": "MOTO",
"baseamount": "1050",
"credentialsonfile": "1",
"currencyiso3a": "GBP",
"expirydate": "01/35",
"orderreference": "order123456",
"pan": "4111111111111111",
"requesttypedescriptions": ["ACCOUNTCHECK"],
"securitycode": "123",
"sitereference": "{{site_reference}}"
}
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(
'accounttypedescription' => 'MOTO',
'baseamount' => '1050',
'credentialsonfile' => '1',
'currencyiso3a' => 'GBP',
'expirydate' => '01/35',
'orderreference' => 'order123456',
'pan' => '4111111111111111',
'requesttypedescriptions' => array('ACCOUNTCHECK'),
'securitycode' => '123',
'sitereference' => '{{site_reference}}'
);
$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": [{
"accounttypedescription": "MOTO",
"baseamount": "1050",
"credentialsonfile": "1",
"currencyiso3a": "GBP",
"expirydate": "01/35",
"orderreference": "order123456",
"pan": "4111111111111111",
"requesttypedescriptions": ["ACCOUNTCHECK"],
"securitycode": "123",
"sitereference": "{{site_reference}}"
}]
}'
{
"alias":"{{wsapi_username}}",
"version":"1.00",
"request":[{
"accounttypedescription":"MOTO",
"baseamount":"1050",
"credentialsonfile":"1",
"currencyiso3a":"GBP",
"expirydate":"01/35",
"orderreference":"order123456",
"pan":"4111111111111111",
"requesttypedescriptions":["ACCOUNTCHECK"],
"securitycode":"123",
"sitereference":"{{site_reference}}"
}]
}
<requestblock version="3.67">
<alias>{{wsapi_username}}</alias>
<request type="ACCOUNTCHECK">
<billing>
<amount currencycode="GBP">1050</amount>
<payment>
<expirydate>01/35</expirydate>
<pan>4111111111111111</pan>
<securitycode>123</securitycode>
</payment>
</billing>
<merchant>
<orderreference>order123456</orderreference>
</merchant>
<operation>
<accounttypedescription>MOTO</accounttypedescription>
<credentialsonfile>1</credentialsonfile>
<sitereference>{{site_reference}}</sitereference>
</operation>
</request>
</requestblock>
Payment - Tokenized (Stored) card details - Cardholder Initiated Transaction
#!/usr/bin/python
import securetrading
stconfig = securetrading.Config()
stconfig.username = "webservices@example.com"
stconfig.password = "Password1^"
st = securetrading.Api(stconfig)
auth = {
"accounttypedescription": "MOTO",
"baseamount": "1050",
"credentialsonfile": "2",
"currencyiso3a": "GBP",
"orderreference": "order123456",
"parenttransactionreference": "INSERT_PARENT_TRANSACTION_REFERENCE",
"requesttypedescriptions": ["AUTH"],
"sitereference": "{{site_reference}}"
}
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(
'accounttypedescription' => 'MOTO',
'baseamount' => '1050',
'credentialsonfile' => '2',
'currencyiso3a' => 'GBP',
'orderreference' => 'order123456',
'parenttransactionreference' => 'INSERT_PARENT_TRANSACTION_REFERENCE',
'requesttypedescriptions' => array('AUTH'),
'sitereference' => '{{site_reference}}'
);
$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": [{
"accounttypedescription": "MOTO",
"baseamount": "1050",
"credentialsonfile": "2",
"currencyiso3a": "GBP",
"orderreference": "order123456",
"parenttransactionreference": "INSERT_PARENT_TRANSACTION_REFERENCE",
"requesttypedescriptions": ["AUTH"],
"sitereference": "{{site_reference}}"
}]
}'
{
"alias":"{{wsapi_username}}",
"version":"1.00",
"request":[{
"accounttypedescription":"MOTO",
"baseamount":"1050",
"credentialsonfile":"2",
"currencyiso3a":"GBP",
"orderreference":"order123456",
"parenttransactionreference":"INSERT_PARENT_TRANSACTION_REFERENCE",
"requesttypedescriptions":["AUTH"],
"sitereference":"{{site_reference}}"
}]
}
<requestblock version="3.67">
<alias>{{wsapi_username}}</alias>
<request type="AUTH">
<merchant>
<orderreference>order123456</orderreference>
</merchant>
<operation>
<accounttypedescription>MOTO</accounttypedescription>
<credentialsonfile>2</credentialsonfile>
<parenttransactionreference>INSERT_PARENT_TRANSACTION_REFERENCE</parenttransactionreference>
<sitereference>{{site_reference}}</sitereference>
</operation>
</request>
</requestblock>
Related articles
Recurring payments
Subsequent recurring payments using the tokenized card details can be processed using our Webservices API.
Merchant Initiated Transactions (MIT)
Submit ad-hoc requests to process a transaction from previously stored card details without cardholder interaction.