将值散列到 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 函数中将其转换为小写。