Securepay Invalid Fingerprint error при выполнении пост-звонка на прямой пост API с использованием PHP curl - PullRequest
0 голосов
/ 18 декабря 2018

Я создал пример сценария с использованием документации Postpi от Securepay, предоставленной по адресу https://www.securepay.com.au/wp-content/uploads/2017/06/Direct_Post_Integration_Guide.pdf

Вот код сценария:

$test_url = "https://test.api.securepay.com.au/directpost/authorise";
$EPS_MERCHANTID = "ABC0001"; //manual id
$Transaction_Password = "abc123"; // manual password
$EPS_TXNTYPE = 0; //sending default
$EPS_REFERENCEID = "1234"; //manual order id
$EPS_AMOUNT = "20.77";
$EPS_TIMESTAMP = gmdate('Ymdhis');
$hash_string = "$EPS_MERCHANTID|$Transaction_Password|$EPS_TXNTYPE|$EPS_REFERENCEID|$EPS_AMOUNT|$EPS_TIMESTAMP";
$sha_256_string = hash('SHA256',$hash_string);

//card details
$EPS_CARDNUMBER = "4444333322221111";
$EPS_EXPIRYMONTH = "01";
$EPS_EXPIRYYEAR = "2020";
$EPS_CCV = 123;
$EPS_CURRENCY = "AUD";

$post_data = "EPS_MERCHANT=".$EPS_MERCHANTID
."&EPS_TXNTYPE=".$EPS_TXNTYPE
."&EPS_AMOUNT=".$EPS_AMOUNT
."&EPS_REFERENCEID=".$EPS_REFERENCEID
."&EPS_TIMESTAMP=".$EPS_TIMESTAMP
."&EPS_CARDNUMBER=".$EPS_CARDNUMBER
."&EPS_EXPIRYMONTH=".$EPS_EXPIRYMONTH
."&EPS_EXPIRYYEAR=".$EPS_EXPIRYYEAR
."&EPS_CCV=".$EPS_CCV
."&EPS_RESULTURL="."https://mydomain.com.au/pay.php" //custom url form - mydomain.com.au is replaced with personal domain
."&EPS_CURRENCY=".$EPS_CURRENCY
."&EPS_FINGERPRINT=".$sha_256_string;

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $test_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
$ch_result = curl_exec($ch);
print_r($ch_result);

Этот сценарий выводит сообщение об ошибке «Недопустимый отпечаток пальца»".

Любая помощь в решении этой проблемы будет принята с благодарностью.

1 Ответ

0 голосов
/ 19 декабря 2018

Теперь проблема решена с помощью поддержки безопасной оплаты и небольшого исследования.

В приведенном выше коде есть две ошибки:

  1. Отпечаток пальца должен быть зашифрованс HMAC и пароль транзакции должен использоваться в качестве секрета.

    $ sha_256_string = hash_hmac ('SHA256', $ hash_string, $ Transaction_Password);

  2. Метка времени по Гринвичу должна использовать24-часовой формат

    $ EPS_TIMESTAMP = gmdate ('YmdGis', время ());

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