我用用php '\n' 不行,验证不通过 ,换成了 "\n" 就可以。不能用单引号
V3合单支付 支付签名验证失败(已解决)问题详细说明:接口获取到预支付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=="
2021-08-03