0

我正在运行 PHP 7.3,在 apache 服务器上运行。我使用 composer 来获取这个库: https ://github.com/SecureTrading/PHP-API

对于提供的代码,我现在使用的是测试站点参考。我已经设法用于常规过渡。我现在开始使用安全交易提供的测试 MAESTRO 卡在这里管理 3D 安全交易:https ://docs.securetrading.com/document/testing/ 。设计为不要求 3D 身份验证的那个 - 即 5000000000000421

接下来提供的代码将总结我认为这应该起作用的方式:我首先创建 AUTH 请求,得到错误 30004,使用 CACHETOKENISE 请求获取令牌,运行 THREEDQUERY 以确定我是否需要对此进行完整的身份验证卡,得到 N 作为答案,然后运行另一个 AUTH 请求,这次使用 transactionreference。我提供了我正在测试的代码版本(显然,用户名、密码和站点参考名称已被删除以保护我的隐私,但其他代码是相同的)

<?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,就好像没有提供事务参考一样。知道我能做些什么来修复此代码并防止此错误吗?在此先感谢 Yair

4

1 回答 1

0

好吧,我阅读了 Api 测试,发现了我的错误。在最后一个请求数据上,而不是

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

我应该使用

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

不管怎样,回家这对某人有帮助

于 2019-03-31T09:35:08.050 回答