CodeIgniter4中生成HexEncode(SHA-256(Body))签名出错排查
问题分析与修正方案
你的代码存在两个关键错误,导致生成的签名和API预期不符:
错误1:重复编码哈希结果
hash('sha256', $body) 函数默认返回的就是SHA256哈希的十六进制编码结果,完全符合规则里的HexEncode(Sha256(Body))要求。但你额外调用了bin2hex($hashbody),相当于把已经是十六进制的字符串再做一次二进制转十六进制编码,结果自然完全错误。
错误2:json_encode参数误用
json_encode的第二个参数应该是JSON选项常量(如JSON_UNESCAPED_UNICODE),你传入true会被解析为JSON_HEX_TAG等组合选项,可能导致生成的JSON格式(比如是否包含多余转义、空格)和API预期的不一致,进而影响哈希计算结果。API示例对应的正确JSON体是无空格的{"hello":"world"}。
正确实现代码
$datas = [ 'hello' => 'world', ]; // 生成标准无多余转义的JSON字符串 $body = json_encode($datas); // 直接获取SHA256的十六进制编码结果,无需额外处理 $stringToSign = hash('sha256', $body); // 输出结果:a47a5f14b3e78b5e3d3f81b1a1468499be964660f818c10adcac792c42709749 echo $stringToSign;
内容的提问来源于stack exchange,提问作者BИ Develop
相关产品推荐
相关产品推荐

