林海、 2022-12-29 09:46 采纳率: 100%
浏览 113
已结题

微信Native支付下单时提示签名错误-Validate response failed,the WechatPay signature is incorrect.

在进行微信支付native下单时,系统报错提示

img

我的代码如下

/** 商户号 */
    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<UserDO> wrapper = new QueryWrapper<>();
        wrapper.eq("name",userDO.getName());
        List<UserDO> 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的路径的时候不对吗?

  • 写回答

1条回答 默认 最新

  • 林海、 2022-12-30 09:22
    关注

    这个问题就出在证书上,微信自带的注释上面写的是“微信支付平台证书”路径而不是“商户证书路径”
    如果你是在微信商户号里的 账户中心-->API安全-->申请API证书里面获取到的证书的话,这个证书是你的商户证书和商户私钥,其中商户私钥是能用到到,但证书不是这个商户证书。

    img


    进去以后下载这个JAR包

    img


    下载好JAR包以后
    在这个github向下拉有一个生成加密证书的命令行

    img


    把这个命令行在cmd中运行一下,得到的返回值如下图

    img

    其中红框里就是加密了的微信支付平台证书,再根据微信提供的解密方法得到解密后的证书即可

    img

    解密出来的内容,自己把他复保存到一个pem文件中,然后微信支付平台证书就是这个文件的路径地址,完毕~

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月7日
  • 已采纳回答 12月30日
  • 创建了问题 12月29日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装