我今天收到一封电子邮件,说:
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月的截止日期非常接近!
答案 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哈希的输出进行比较。