问题1)签名详解没有具体说明signData包含的参数转字符串规则,不同接口参数不同参数如果排序不同加密处理的结果也会不同,请说明一下加密字符串规则?
根据文档底部提供的python代码转换为php代码后,输出参数pay_sig、signature结果和python一致。
但切换为实际参数后就提示 "errmsg" => "签名校验失败 rid: 64cb7c4b-04288911-3af4b778"
public function testTignature()
{
$uri = '/xpay/query_user_balance';
$data = [
"openid" => "xxx",
"user_ip" => "127.0.0.1",
"env" => 0,
];
$jsonBody = str_replace(':', ': ', json_encode($data));
$jsonBody = str_replace(',', ', ', $jsonBody);
$query = [
'pay_sig' => hash_hmac('sha256', $uri . '&' . $jsonBody, "12345"),
'signature' => hash_hmac('sha256', $jsonBody, "9hAb/NEYUlkaMBEsmFgzig=="),
];
dump($query);
}
输出结果:
"pay_sig" => "c37809f27c6d7fd1837ad2500a04512b66b34fd793a39a385fade56dca89a4b5"
"signature" => "089d9e8dc5d308977360c4b79ec600a93d736802802a807d634192328032f6c7"
pay_sig校验失败,不要用"12345"这个key,要用mp页面上的appkey