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

微信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日

悬赏问题

  • ¥15 SPSS分类模型实训题步骤
  • ¥15 求解决扩散模型代码问题
  • ¥15 工创大赛太阳能电动车项目零基础要学什么
  • ¥20 limma多组间分析最终p值只有一个
  • ¥15 nopCommerce开发问题
  • ¥15 torch.multiprocessing.spawn.ProcessExitedException: process 1 terminated with signal SIGKILL
  • ¥15 QuartusⅡ15.0编译项目后,output_files中的.jdi、.sld、.sof不更新怎么解决
  • ¥15 pycharm输出和导师的一样,但是标红
  • ¥15 想问问富文本拿到的html怎么转成docx的
  • ¥15 我看了您的文章,遇到了个问题。