将值散列到 api
Hashing the value to the api
我有这个代码
$params = $version.$merchant_id.$payment_description.$order_id.$currency.$amount.$result_url_1;
$hash_value = hash_hmac('sha256',$params, $secret_key,false);
转换为 CF 为
param = version & merchant_id & payment_description & order_id & currency & amount & result_url_1,"SHA-256")>
hash_value = lcase(hash(param & secret_key,"SHA-256')>
但是数据不一样,我是不是漏了什么
php 代码(第一个代码片段)使用 hash_hmac
,如代码所示,它需要共享密钥来生成哈希。您的 CF 代码(第二个代码片段)仅使用普通的 hash
函数。
您不能像现在这样简单地连接参数和密码。它不会产生与您的 php 代码相同的哈希值。需要用到CF的HMac
函数,和php代码一样使用,把秘密作为一个单独的参数传给hmac函数。
参见参考文献:https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-h-im/hmac.html
如用户所述,CF HMac
函数 returns 大写的散列,而 PHP hash_mac
函数 returns 大写的散列小写。为了能够将 2 作为字符串进行比较,通过将 CF HMac
包装在 LCase
函数中将其转换为小写。
我有这个代码
$params = $version.$merchant_id.$payment_description.$order_id.$currency.$amount.$result_url_1;
$hash_value = hash_hmac('sha256',$params, $secret_key,false);
转换为 CF 为
param = version & merchant_id & payment_description & order_id & currency & amount & result_url_1,"SHA-256")>
hash_value = lcase(hash(param & secret_key,"SHA-256')>
但是数据不一样,我是不是漏了什么
php 代码(第一个代码片段)使用 hash_hmac
,如代码所示,它需要共享密钥来生成哈希。您的 CF 代码(第二个代码片段)仅使用普通的 hash
函数。
您不能像现在这样简单地连接参数和密码。它不会产生与您的 php 代码相同的哈希值。需要用到CF的HMac
函数,和php代码一样使用,把秘密作为一个单独的参数传给hmac函数。
参见参考文献:https://helpx.adobe.com/coldfusion/cfml-reference/coldfusion-functions/functions-h-im/hmac.html
如用户所述,CF HMac
函数 returns 大写的散列,而 PHP hash_mac
函数 returns 大写的散列小写。为了能够将 2 作为字符串进行比较,通过将 CF HMac
包装在 LCase
函数中将其转换为小写。