使用https POST进行交易,但在我的代码中不了解如何从MD5过渡到transHashSHA2

时间:2019-01-11 18:36:48

标签: md5 sha256 authorize.net

我今天收到一封电子邮件,说:

  

Authorize.Net正在逐步淘汰基于MD5的transHash元素,而支持基于SHA-256的transHashSHA2。 Merchant界面中控制MD5哈希选项的设置将在2019年1月下旬删除,transHash元素将在以后确定的日期停止返回值。

     

我们已经确定您已经配置了此功能,并且可能依赖事务响应中基于MD5的transHash来验证发件人是Authorize.Net。

我使用http POST方法提交事务,并使用一些很久以前编写的C代码对响应进行MD5检查。我应该如何处理POST以进行过渡以及如何处理“ transHasSHA2”内容?当前在C语言中,我正在链接libssl并使用MD5_函数。

该死的,我很久以前就这样做了,2019年1月的截止日期非常接近!

1 个答案:

答案 0 :(得分:0)

Authorze.Net发送的电子邮件中包含指向说明how to transition to the new hash的页面的链接:

  

交易哈希升级指南

     

Authorize.Net正在淘汰基于MD5的 transHash 元素,转而使用基于SHA-512的 transHashSHA2 。那个设定   在控制MD5哈希选项的Merchant界面中,   已在2019年1月底删除, transHash 元素将   以后不再确定返回值。

     

当您收到来自Authorize.Net的交易响应时,它   包含 transHashSHA2 元素。 transHashSHA2 包含   Authorize.Net为事务生成的HMAC-SHA512哈希。   要使用它,请使用您的签名密钥构造HMAC-SHA512哈希,   转换为字节格式,作为HMAC密钥,并构造一条消息   从您的API登录ID,交易ID和交易中   量。将您的哈希结果与 transHashSHA2 进行比较。如果两个   值匹配,则交易响应来自Authorize.Net。

     

注意:如果不这样做, transHashSHA2 的值将为null   首先generate the Signature Key

     

要使用签名密钥来验证 transHashSHA2 的值,请执行以下操作:

     

第1步。 Generate a Signature Key并将其存储在服务器上的安全位置。

     

第2步。将签名密钥转换为字节数组。

     

第3步。创建一个以插入号(“ ^”)开头的消息字符串,然后是由插入号分隔的以下三个字段,以及   终止于另一个插入符:

     

•您在 createTransactionRequest 中发送的API登录ID   名称元素。

     

•我们在 createTransactionResponse 中发送的交易ID   在 transId 元素中。

     

•我们发送的交易金额    amount 元素中的 createTransactionResponse

     

例如,如果您的API登录ID为“ ANet123”,则    transId 为“ 20987654321”,并且 amount 的值为“ 9.99”,消息字符串如下所示:

     

^ ANet123 ^ 20987654321 ^ 9.99 ^

     

第4步。使用HMAC-SHA512对第2步中的签名密钥的字节数组形式与第3步中的消息字符串进行哈希处理。

     

第5步。 transHashSHA2 的值与第4步中提到的HMAC-SHA512哈希的输出进行比较。