Php Authorize.Net AIM响应中缺少HMAC-SHA512哈希

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

我在验证他们对AIM交易的响应时措手不及。我正在尝试修复一些遗留代码,以使我们的遗留站点在重建站点出来之前保持步履蹒跚——它不会运行最新的Authorize.Net PHP SDK,因此在回答这个问题时,请不要建议这样做

在尝试修复此遗留代码时,我无法让测试事务(甚至一些测试事务使用实时/生产凭据运行)提供标题为“验证响应”的部分中承诺的HMAC-SHA512哈希。

以下是来自AIM事务的原始响应示例:

“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社区论坛上发了帖子。我一定会发布任何可能出现的解决方案或解释。请参阅我的更新答案。您可能缺少签名密钥。