校验签名也正确,但是一直返回的都是签名错误,不知道错在哪里
代码也贴出来
private function get_pub_key()
{
$rsafile = SITE_PATH . 'data/cert/' . $this->appid . '_publicrsa.pem';
if (!is_file($rsafile)) {
$data['mch_id'] = $this->mchid;
$data['nonce_str'] = $this->random(12);
$sign = $this->getParam($data);
$dataXML = "<xml>
<mch_id>" . $data['mch_id'] . "</mch_id>
<nonce_str>" . $data['nonce_str'] . "</nonce_str>
<sign>" . $sign . "</sign>
</xml>";
$url = 'https://fraud.mch.weixin.qq.com/risk/getpublickey';
$ret = $this->httpsPost($url, $dataXML, true);
if ($ret['return_code'] == 'SUCCESS' && isset($ret['pub_key'])) {
file_put_contents($rsafile, $ret['pub_key']);
return $ret['pub_key'];
} else {
return null;
}
} else {
return file_get_contents($rsafile);
}
}
请按照以下几点进行排查:
1、使用签名检查工具(https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1)校验签名算法是否有误
2、确认秘钥是否有误(服务商模式使用服务商商户号秘钥,秘钥是在商户平台配置,如果同一商户号调用其它接口成功可排除是秘钥问题)
3、确认接口实际的请求参数与生成签名原串的参数一致,不能增加或缺少参数(可通过打印签名原串进行排查)
4、确认参数的大小写,参数名与接口文档一致
5、签名原串的参数值使用原始值,不需要encode
6、接口需要使用UTF-8编码