收藏
回答

小程序微信支付签名验证失败

Map<String, String> data = new HashMap<String, String>();

data.put("appid","wx9bc*****b8908");  //小程序ID

data.put("mch_id",config.getMchID()); //商户号

data.put("trade_type","JSAPI"); //支付场景 APP 微信app支付 JSAPI 公众号支付  NATIVE 扫码支付

data.put("notify_url",notifyUrl); //回调地址

data.put("spbill_create_ip",config.create_ip); //终端ip 

data.put("total_fee",amount); //订单总金额

data.put("out_trade_no",ordernum); //交易号

data.put("body",gname);

data.put("openid",openid);

data.put("nonce_str",WXPayUtil.generateNonceStr());// 随机字符串小于32位

String s = WXPayUtil.generateSignature(data, config.getKey());  //签名

data.put("sign",s);

Map<String, String> respData = wxpay.unifiedOrder(data);;

                if (respData.get("return_code").equals("SUCCESS")){

                        //返回给APP端的参数,APP端再调起支付接口

String resultCode = respData.get("result_code");

if("SUCCESS".equals(resultCode)){

Map<String, String> daa = new HashMap<>();

daa.put("appId", "wx9bc*****b8908");

daa.put("package", "prepay_id="+respData.get("prepay_id"));

daa.put("nonceStr", WXPayUtil.generateNonceStr());

daa.put("signType", "MD5");

daa.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));//单位为秒

daa.put("paySign", WXPayUtil.generateSignature(daa, config.getKey()));

        dataMap.put("data", daa);        //传给前端

}else {

}

}


最后一次编辑于  2019-03-07
回答关注问题邀请回答
收藏

4 个回答

  • 2019-07-16

    public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {

            this.config = config;

            this.notifyUrl = notifyUrl;

            this.autoReport = autoReport;

            this.useSandbox = useSandbox;

            if (useSandbox) {

                this.signType = SignType.MD5; // 沙箱环境

            }

            else {

              //  this.signType = SignType.HMACSHA256;//微信文档

                this.signType = SignType.MD5;//改成这个

            }

            this.wxPayRequest = new WXPayRequest(config);

        }

    这个坑,多少人掉进去过?

    2019-07-16
    有用 2
    回复
  • 旺仔
    旺仔
    2019-07-26

    预支付接口和先程序发起的支付接口,这两个接口参数不一致,一个短划线连接,一个是驼峰形式。

    appid和appId的区别。


    2019-07-26
    有用
    回复
  • 灬湫慕梵簦
    灬湫慕梵簦
    2019-07-25

    你好,“二次签名的时候要求appId是大写”您的这句话表达有问题,二次签名只是参数appid要以驼峰的形式,您这样说很容易让人以为是appid要转大写,我就是被这个坑了一天,现在调通了,希望对其他人有帮助

    2019-07-25
    有用
    回复
  • 微信支付技术助手7
    微信支付技术助手7
    2019-03-07

    您好,请参考:

    1.统一下单的时候,接口要传的appid是小写,但是二次签名的时候要求appId是大写,请注意。

    2.如下图:


    2019-03-07
    有用
    回复 10
    • 周
      2019-03-07

      我统一下单的接口appid是小写的,第二次appId是大写   传给前端  就是报支付验证签名失败

      2019-03-07
      回复
    • 微信支付技术助手7
      微信支付技术助手7
      2019-03-07回复

      您好,图二有检查吗?

      2019-03-07
      回复
    • 周
      2019-03-07回复微信支付技术助手7

      这个是前端接收的参数

      {"appId":"wx9bc*****b8908","timeStamp":"1551950140","signType":"MD5","package":"prepay_id=wx07171540735825b25b5da0aa2950542503","nonceStr":"By6AeXwjD0ZTjPgmrvuGgelkLOFcwvYR","paySign":"DC696BF9A61E1AA52DDE2A7A4C1FF33F"}


       {"errMsg":"requestPayment:fail:支付验证签名失败"}   老是报这个错误


      2019-03-07
      回复
    • 微信支付技术助手7
      微信支付技术助手7
      2019-03-07回复

      您好,请按照上图的仔细排查。

      2019-03-07
      回复
    • 微信支付技术助手7
      微信支付技术助手7
      2019-03-07回复

      您好,如果不可以,请加微信:WePayTS7

      2019-03-07
      回复
    查看更多(5)
登录 后发表内容