Php Authorize.Net AIM响应中缺少HMAC-SHA512哈希
我在验证他们对AIM交易的响应时措手不及。我正在尝试修复一些遗留代码,以使我们的遗留站点在重建站点出来之前保持步履蹒跚——它不会运行最新的Authorize.Net PHP SDK,因此在回答这个问题时,请不要建议这样做 在尝试修复此遗留代码时,我无法让测试事务(甚至一些测试事务使用实时/生产凭据运行)提供标题为“验证响应”的部分中承诺的HMAC-SHA512哈希。 以下是来自AIM事务的原始响应示例:Php Authorize.Net AIM响应中缺少HMAC-SHA512哈希,php,authorize.net,hmac,php-curl,Php,Authorize.net,Hmac,Php Curl,我在验证他们对AIM交易的响应时措手不及。我正在尝试修复一些遗留代码,以使我们的遗留站点在重建站点出来之前保持步履蹒跚——它不会运行最新的Authorize.Net PHP SDK,因此在回答这个问题时,请不要建议这样做 在尝试修复此遗留代码时,我无法让测试事务(甚至一些测试事务使用实时/生产凭据运行)提供标题为“验证响应”的部分中承诺的HMAC-SHA512哈希。 以下是来自AIM事务的原始响应示例: “1”|“1”|“1”|“1”|“1”|“此交易已获批准。”|“52R4QE”|“Y”|“4
“1”|“1”|“1”|“1”|“1”|“此交易已获批准。”|“52R4QE”|“Y”|“40034138508”|“2019-07-0269072”|“采购说明”等等|“99.95”|“CC”|“授权捕获”|“3”|“乔”|“测试”|“n&| 47;a”|“加利福尼亚州洛杉矶主街123”|“乔”|“乔”12426”|。test@example.com| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ||“|”XXXX1111“|”Visa“|”Visa“|”Visa“|”Visa“|”Visa“|”Visa“|”Visa“|”Visa“|”
根据AIM指南:
响应中的最后一个字段包含HMAC-SHA512哈希,该哈希授权为事务生成的.Net,可用于验证响应。要使用它,请构造HMAC-SHA512哈希
事实似乎并非如此。该HMAC是否仅适用于某些类型的交易?它不是由沙盒网关提供的吗?怎么回事?HMAC-SHA512散列在哪里
下面是一个PHP脚本,它说明了我的问题:
您的代码适合我:
C:\php\php.exe C:\Users\jconde\.PhpStorm2019.1\config\scratches\scratch.php
=== RAW ===
"1"|"1"|"1"|"This transaction has been approved."|"9FUGIS"|"Y"|"40034159620"|"5d1c987e8d88e"|"TEST TRANSACTION 5d1c987e8d4a6"|"12.34"|"CC"|"auth_capture"|"1234"|"Joe"|"Test"|""|"123 Main St."|"Springfield"|"MO"|"12345"|""|""|""|"Joe.Text@example.com"|""|""|""|""|""|""|""|""|""|""|""|""|""|""|"P"|"2"|""|""|""|""|""|""|""|""|""|""|"XXXX1111"|"Visa"|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|""|"FALSE"|"194894850DF855D0B801F3691203A98CB2EC6C5C1F71E06917FA699065412664DCD7BC35FE2918937BBAB8DCB460DA9E8741799E455CB1D7CCA6BEFEBA71DCC2"=== END RAW ===
=== CURL_INFO ===
Array
(
[url] => https://test.authorize.net/gateway/transact.dll
[content_type] => text/html
[http_code] => 200
[header_size] => 228
[request_size] => 636
[filetime] => -1
[ssl_verify_result] => 20
[redirect_count] => 0
[total_time] => 0.375
[namelookup_time] => 0.063
[connect_time] => 0.078
[pretransfer_time] => 0.11
[size_upload] => 488
[size_download] => 535
[speed_download] => 1426
[speed_upload] => 1301
[download_content_length] => 535
[upload_content_length] => 488
[starttransfer_time] => 0.375
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 23.219.20.24
[certinfo] => Array
(
)
[primary_port] => 443
[local_ip] => 10.21.50.28
[local_port] => 57726
[curl_error] =>
[curl_errno] => 0
)
=== END CURL_INFO ===
=== PARSED ===
Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => This transaction has been approved.
[4] => 9FUGIS
[5] => Y
[6] => 40034159620
[7] => 5d1c987e8d88e
[8] => TEST TRANSACTION 5d1c987e8d4a6
[9] => 12.34
[10] => CC
[11] => auth_capture
[12] => 1234
[13] => Joe
[14] => Test
[15] =>
[16] => 123 Main St.
[17] => Springfield
[18] => MO
[19] => 12345
[20] =>
[21] =>
[22] =>
[23] => Joe.Text@example.com
[24] =>
[25] =>
[26] =>
[27] =>
[28] =>
[29] =>
[30] =>
[31] =>
[32] =>
[33] =>
[34] =>
[35] =>
[36] =>
[37] =>
[38] => P
[39] => 2
[40] =>
[41] =>
[42] =>
[43] =>
[44] =>
[45] =>
[46] =>
[47] =>
[48] =>
[49] =>
[50] => XXXX1111
[51] => Visa
[52] =>
[53] =>
[54] =>
[55] =>
[56] =>
[57] =>
[58] =>
[59] =>
[60] =>
[61] =>
[62] =>
[63] =>
[64] =>
[65] =>
[66] =>
[67] =>
[68] => FALSE
[69] => 194894850DF855D0B801F3691203A98CB2EC6C5C1F71E06917FA699065412664DCD7BC35FE2918937BBAB8DCB460DA9E8741799E455CB1D7CCA6BEFEBA71DCC2
)
=== END PARSED ===
Process finished with exit code 0
确保已生成签名密钥。如果没有哈希,则无法为您计算哈希值,因为生成哈希值需要签名密钥)。非常感谢您抽出时间运行我的示例代码。不幸的是,这并不能解决我的问题。我选择这个作为答案,因为它正确地指出,必须使用Authorize.net仪表板生成签名密钥。也就是说,您必须使用您的帐户凭据登录到他们的网站,单击设置,然后单击API凭据和密钥,在该页面底部,您可以获得新的签名密钥。如果没有签名密钥,authorize.net无法计算HMAC-SHA512哈希。我执行了这个步骤,传入的购买事务开始包含散列。这就是您正在测试的代码?如果是这样的话,我们两个账户之间的差异似乎是一种设置。不过,我没有看到任何会导致此值无法返回的内容。@johncode yes这就是正确的代码。我也在authorize.net社区论坛上发了帖子。我一定会发布任何可能出现的解决方案或解释。请参阅我的更新答案。您可能缺少签名密钥。