在进行微信支付native下单时,系统报错提示
我的代码如下
/** 商户号 */
public static String merchantId = "15********";
/** 商户API私钥路径 */
public static String privateKeyPath = "E:\\project\\QS\\aaa\\src\\main\\resources\\15*******cert\\apiclient_key.pem";
/** 商户证书序列号 */
public static String merchantSerialNumber = "4A8C8FF*******";
/** 微信支付平台证书路径 */
public static String wechatPayCertificatePath = "E:\\project\\QS\\aaa\\src\\main\\resources\\15********cert\\apiclient_cert.pem";
public String CreteQR(UserDO userDO){
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq("name",userDO.getName());
List users = userDAO.selectList(wrapper);
//预下单生成
PrepayRequest request = new PrepayRequest();
request.setAppid("wx09********");
request.setMchid("15********");
request.setDescription(users.get(0).getIfmember().equals("0") ? "充值会员" : "续费会员");
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String out_trade_no = fmt.format(new Date());
request.setOutTradeNo(out_trade_no); //商户系统内部订单号
request.setNotifyUrl("http://********/aaa/ResNotifyUrl"); //通知地址
Amount amount = new Amount();
amount.setTotal(2000);
amount.setCurrency("CNY");
request.setAmount(amount);
// 初始化商户配置
RSAConfig config =
new RSAConfig.Builder()
.merchantId(merchantId)
// 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
.privateKeyFromPath(privateKeyPath)
.merchantSerialNumber(merchantSerialNumber)
.wechatPayCertificatesFromPath(wechatPayCertificatePath)
.build();
PrepayResponse resp = new NativePayService.Builder().config(config).build().prepay(request);
return resp.getCodeUrl();
}
我都是用的JAR包里面自带的方法为什么会出现签名错误,是因为引入证书或者KEY的路径的时候不对吗?
这个问题就出在证书上,微信自带的注释上面写的是“微信支付平台证书”路径而不是“商户证书路径”
如果你是在微信商户号里的 账户中心-->API安全-->申请API证书里面获取到的证书的话,这个证书是你的商户证书和商户私钥,其中商户私钥是能用到到,但证书不是这个商户证书。
其中红框里就是加密了的微信支付平台证书,再根据微信提供的解密方法得到解密后的证书即可
解密出来的内容,自己把他复保存到一个pem文件中,然后微信支付平台证书就是这个文件的路径地址,完毕~