Не удается получить аутентифицированную незарегистрированную карту 3d-secure (безопасная торговля) - PullRequest
0 голосов
/ 31 марта 2019

Я использую PHP 7.3, работающий на сервере Apache.Я использовал composer, чтобы получить эту библиотеку: https://github.com/SecureTrading/PHP-API

Для предоставленного кода я сейчас использую ссылку на тестовый сайт.Мне уже удалось использовать для регулярных переходов.Теперь я начал управлять безопасными 3D-транзакциями, с тестовой картой MAESTRO, предоставленной для безопасной торговли, здесь: https://docs.securetrading.com/document/testing/. карта, которая не требует 3D-аутентификации - это 5000000000000421

Приведенный ниже код будет суммироватьсяЯ думаю, что это должно сработать: я начинаю с создания запроса AUTH, получаю ошибку 30004, используя запрос CACHETOKENISE для получения токена, запускаю THREEDQUERY, чтобы выяснить, нужна ли мне полная схема аутентификации на этой карте, в качестве ответа получаю Nи выполните другой запрос AUTH, на этот раз с ссылкой на транзакцию.Я предоставляю версию кода, который я тестирую (очевидно, имя пользователя, пароль и имя ссылки на сайт были удалены, чтобы защитить мою конфиденциальность, но в остальном код тот же)

<?php 
$configData = array(
  'username' => 'api@gigsberg.com',
  '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

Я ожидал, что он дастОбратите внимание, что все работает хорошо, но я все еще получил ошибку 30004, как будто транзакция не была предоставлена.Любая идея, что я могу сделать, чтобы исправить этот код и предотвратить эту ошибку?Заранее спасибо Яир

1 Ответ

0 голосов
/ 31 марта 2019

Ну, я прочитал тесты Api и обнаружил свою ошибку. По последнему запросу данные вместо

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

Я должен использовать

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

Во всяком случае, домой это помогает Сомоне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...