提问,Rsa::verify的问题
MichonneHsu opened this issue · comments
Michonne Hsu commented
运行环境
- OS:AliOS
- PHP:8.0.15
- wechatpay-php:latest
描述你的问题现象
$wechat_params=[
'wechatpay_timestamp'=>$wechatpay_timestamp,
'wechatpay_signature'=>$wechatpay_signature,
'wechatpay_serial'=>$wechatpay_serial,
'wechatpa_nonce'=>$wechatpa_nonce
];
$inBody=json_encode([
'id'=>$id,
'create_time'=>$create_time,
'resource_type'=>$resource_type,
'event_type'=>$event_type,
'summary'=>$summary,
'resource'=>$resource
]);
$v=Util::verify($wechat_params,$inBody);
verify代码
$message=Formatter::joinedByLineFeed($inWechatpayTimestamp, $inWechatpayNonce, $inBody);
$verifiedStatus =Rsa::verify($message,$inWechatpaySignature,$platformPublicKeyInstance);
我在5分钟内去验证是否有效,为什么老是$verifiedStatus
返回false
?
FlynnZhouZz commented
GhostCoder commented
James ZHANG commented
$inBody=json_encode
这个就不是原始传过来的JSON
字符串,PHP json_encode 默认的 int $flags = 0
意味着,当原始待编码的字符串含 UNICODE
, SLASH
, 此函数会转义成utf-8
编码格式,例如:
$a = ['c' => 'http://x', 'k' => '测试'];
print_r(json_encode($a));
打印为:
{"c":"http:\/\/x","k":"\u6d4b\u8bd5"}
而原始推送的可能是:
{"c":"http://x","k":"测试"}
你怎么校验上述自行编码的字符串,都会返回false
。