GuruYaya
GuruYaya

Reputation: 661

Can't get an unenrolled 3d-secure card authenticaited (secrure trading)

I am running a PHP 7.3, running on apache server. I used composer to get this library: https://github.com/SecureTrading/PHP-API

For the code provided, I am now using the test site reference. I already managed to use for regular transitions. I now started managing 3D secure transactions, with the test MAESTRO card provided by secure trading here: https://docs.securetrading.com/document/testing/. the one designed not to demand 3D auth - that is 5000000000000421

The code provided next, will sum up the way I think thought this should work: I start by creating AUTH request, get error 30004, using CACHETOKENISE request to get a token, run THREEDQUERY to figure out if I need a full auth sceme on this card, get N as an answer, and run another AUTH request, this time with the transactionreference. I am providing a version of the code I am testing (obviously, username, password and site reference name was removed to protect my privacy, but the code otherwise is the same)

<?php 
$configData = array(
  'username' => '[email protected]',
  'password' => 'xq!Kq$j4',
);
$site_refrance = 'test_gigsberg74319';

?>

<?php
$configData = array(
  'username' => '*****',
  'password' => '*****',
);
$site_refrance = '*****';

if (!($autoload = realpath(__DIR__ . '/vendor/autoload.php'))) {
  throw new \Exception('Composer autoloader file could not be found.');
}

require_once($autoload);
$api = \Securetrading\api($configData);

$requestData = array(
  'sitereference' => $site_refrance,
  'requesttypedescription' => 'AUTH',
  'accounttypedescription' => 'ECOM',
  'currencyiso3a' => 'GBP',
  'mainamount' => '1000',
  'pan' => '5000000000000421',
  'expirymonth' => '12',
  'expiryyear' => '2030',
  'securitycode' => '123',
);

echo '<pre>';
print_r($requestData);
$response = $api->process($requestData)->toArray();
print_r( $response['responses'] ); // $response['responses'][0]['errorcode'] == 30004
echo "\n--------------------------------------\n";

$transactionreference = $response['responses'][0]['transactionreference'];
$requestData = array(
  'sitereference' => $site_refrance,
  'expirymonth' => '12',
  'expiryyear' => '2030',
  'requesttypedescriptions' => array('CACHETOKENISE'),
  'securitycode' => '123',
  'orderreference' => $transactionreference,
  'pan' => '5000000000000421'
);

print_r($requestData);
$response = $api->process($requestData)->toArray();
echo "\n--------------------------------------\n";

$cachetoken = $response['responses'][0]['cachetoken'];
$requestData = array(
  'termurl' => 'https://termurl.com',
  'accept' => 'text/html,*/*',
  'currencyiso3a' => 'GBP',
  'requesttypedescription' => 'THREEDQUERY',
  'accounttypedescription' => 'ECOM',
  'sitereference' => $site_refrance,
  'baseamount' => '1000',
  'pan' => '5000000000000421',
  'expirymonth' => '12',
  'expiryyear' => '2030',
  'cachetoken' => $cachetoken,
);

print_r($requestData);
$response = $api->process($requestData)->toArray(); // $response['responses'][0]['enrolled'] == 'N'
/* Copying from the docs here: https://docs.securetrading.com/document/api/security/3-d-secure/
 * If the enrolled value returned in the response is “Y”, the customer’s card is enrolled in 3-D secure. Please refer to the following table for enrolled values:
 * .
 * .
 * N - The card is not enrolled in the card issuer’s 3-D Secure scheme.  - Perform an AUTH Request, including the transactionreference returned in the THREEDQUERY response.
 * .
 * .
*/
print_r( $response['responses'] ); 
echo "\n--------------------------------------\n";

$transactionreference = $response['responses'][0]['transactionreference'];
$requestData = array(
  'sitereference' => $site_refrance,
  'requesttypedescription' => 'AUTH',
  'accounttypedescription' => 'ECOM',
  'currencyiso3a' => 'GBP',
  'mainamount' => '1000',
  'pan' => '5000000000000421',
  'expirymonth' => '12',
  'expiryyear' => '2030',
  'securitycode' => '123',
  'transactionreference' => $transactionreference
);
print_r($requestData);
$response = $api->process($requestData)->toArray();
print_r( $response['responses'] ); // Still get $response['responses'][0]['errorcode'] == 30004

I expected it to give me a note that all works well, but I still got error 30004, as if the transactionreference wasn't provided. Any idea what I can do, to fix this code, and prevent this error? Thanks in advance Yair

Upvotes: 0

Views: 83

Answers (1)

GuruYaya
GuruYaya

Reputation: 661

Well, I read the Api tests, and I found my error. On the last request data, instead of

$requestData = array(
.
.
'transactionreference' => $transactionreference
.
.
);

I should use

$requestData = array(
.
.
'parenttransactionreference' => $transactionreference
.
.
);

Anyway, home this helps somone

Upvotes: 0

Related Questions