Я использую 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, как будто транзакция не была предоставлена.Любая идея, что я могу сделать, чтобы исправить этот код и предотвратить эту ошибку?Заранее спасибо Яир