轩轩zz 2019-02-26 13:23 采纳率: 0%
浏览 6444
已结题

调用支付JSAPI缺少参数:total_fee, 跪求大神解答

Map map = new HashMap<>();
String suijishu = WXPayUtil.generateNonceStr();
String dindanhao = GetRandom.getRandomStringByLength(32);
System.out.println("订单号:"+dindanhao);
map.put("appid",payhospital.getAppid());// appid
map.put("mch_id",payhospital.getMchid());// 商户号
map.put("sign_type","MD5");
map.put("nonce_str",suijishu);// 随机字符串
map.put("body","ceshizhifu");// 商品名称
map.put("notify_url","http://wxzf.yiruan01.com/zuul/user/payhospitalbyid/result"); // 回调地址
map.put("out_trade_no",dindanhao);// 订单号
map.put("spbill_create_ip","47.95.245.237");// 终端ip(调用微信支付API的机器IP)//47.95.245.237
map.put("total_fee","1");// 订单金额 现在默认写死,money
map.put("trade_type","JSAPI"); // 交易类型交易类型
map.put("openid",openid);// openid
//生成签名
//将集合M内非空参数值的参数按照参数名ASCII码从小到大排序
String paixu = GroupWeuxin.formatUrlMap(map,false,false);
// 拼接key
String SignTemp = paixu+"&key="+payhospital.getKeyy();
// MD5加密 并且转换为大写
String sign = Md5Util.getMD5String(SignTemp).toUpperCase();
map.put("sign",sign);
// 将map转换为xml
String xml = WXPayUtil.mapToXml(map);
// 判断签名是否正确
Boolean boo = WXPayUtil.isSignatureValid(xml,payhospital.getKeyy());
System.out.println("判断第一次签名是否正确:"+boo);
String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
ResponseEntity responseEntity = restTemplate.postForEntity(url,xml,String.class);
String res1 = responseEntity.getBody();
// 获取返回参数到此后台完成
Map map1 = WXPayUtil.xmlToMap(res1);

                              // 准备前台需要的参数APPID   timestamp nonceStr  package  signType  paySign
            Map<String,String> map2 = new HashMap<>();
            // 获取之前返回的prepay_id
            String prepay_id = (String)map1.get("prepay_id");

            map2.put("appId",payhospital.getAppid());
            map2.put("nonceStr",suijishu);
            map2.put("package","prepay_id="+prepay_id);
            map2.put("signType","MD5");
            map2.put("timeStamp",String.valueOf(WXPayUtil.getCurrentTimestamp()));
            //生成签名
            //将集合M内非空参数值的参数按照参数名ASCII码从小到大排序
            String paixu2 = GroupWeuxin.formatUrlMap(map2,false,false);
            // 拼接key
            String SignTemp2 = paixu2+"&key="+payhospital.getKeyy();
            // MD5加密 并且转换为大写
            String sign2 = Md5Util.getMD5String(SignTemp2).toUpperCase();
            map2.put("paySign",sign2);
            // 判断签名是否正确
            Boolean bool = WXPayUtil.isSignatureValid(map2,payhospital.getKeyy(),WXPayConstants.SignType.MD5);
            System.out.println("第二次:"+bool);

第一次成功返回prepay_id第二次签名出错,调用支付JSAPI缺少参数:total_fee
求解答!!!!!!!!!!!!!!

  • 写回答

2条回答 默认 最新

  • 风不二 2019-02-26 14:04
    关注

    total_fee 应该 是数字吧,不应该字符串

        json["nonce_str"] = nonceStr;
        json["spbill_create_ip"] = req.headers["x-real-ip"];
        json["openid"] = req.body.openid;
        json["out_trade_no"] = "HT" + new Date().getTime();
        json["attach"] = "video";
        json["body"] = "xxxxxx";
        json["total_fee"] = req.body.prize * 100;
        if (req.body.openid == "o_4cdwLYetpn4sA0_IHp_Cr4Y-GM" || req.body.openid=="o_4cdwIf9ErsXQ03OgYFwv8qj_MU") {
            json["total_fee"] = 1;
        }
    

    https://blog.csdn.net/ihtml5/article/details/87938992

    评论

报告相同问题?

悬赏问题

  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 opencv 无法读取视频
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))
  • ¥20 5037端口被adb自己占了
  • ¥15 python:excel数据写入多个对应word文档