问题详细说明:接口获取到预支付id->二次加密->返回小程序->调起支付提示支付签名验证失败。
支付提示:
自检过程:1、签名验证,下载工具使用签名/验签商户私钥进行加密,验证是否与代码加密效果一致;2、小程序调起支付参数对照文档,大小写一致,获取服务器数据正常。
代码:
//支付加密
private function getPayEncrypt($arr)
{
global $_W;
//$str是待加密字符串
$str = '';
foreach ($arr as $item) {
$str .= $item.chr(hexdec('0x0A'));//"\n"; 这个位置可以直接用\n
}
$public_key = load_model_class('front')->get_config_by_name('wechat_apiclient_key_pem');//商户私钥
if (openssl_sign($str,$encrypted,$public_key,"sha256WithRSAEncryption")) {
$sign = base64_encode($encrypted);
} else {
throw new Exception('encrypt failed');
}
}
签名工具验证截图:
二次签名计算—加密数据及签名:
string(113) "wx1d117817c02dda11
1605861527
KIanKsuNqXalHXDhASdiqrbMUebRaceG
prepay_id=up_wx201638470087069e766a5c92e6a7910000
"
string(344)
"nPXMZj+cu94X27uuLuE3UWlPkS1UnHrwlnGS+Cw5ulnpHBs0b7ADD2e1ug7pYOIIMADeCO/HD/A9xKBOBNyl7XMRsQR0K4rRC9QbedXlR+HvZCI3vlPNHbsldWMp0gbNHbHVIliTW3RcqTf6fApmWP7am5Vweq/V2q0mSPwjApyjCXQIIv8iYP45GCCHWvvYV1WyS+I8Q/QP0pJ+sn+r0q1f2OU4hvF87m2ak1LLtw/dOhhHW0FaXoCsC9akrnk4B8DPleBNCAsDkhwtmmqLcXTIm4LFzqzSdmsgApfmuUj1qxpkXadK59AKYEPFTwJsZXsKhpWLDbLCcuqQfxLapg=="
我用用php '\n' 不行,验证不通过 ,换成了 "\n" 就可以。不能用单引号
这个工具有连接地址吗?在官网没找到这个工具
'timeStamp' => strval($time),