调用支付JSAPI缺少参数:total_fee?

新手上路,请多包涵

统一下单接口返回的数据也正确,返回到前台也都有数据,没有报过错~~
f440225107507d49e03829a555f5ac5_看图王.png955d3975fb79f735273ba5f348cf38b_看图王.png09df9651f90c67ecf524e27ca70cc95_看图王.png
<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg><appid><![CDATA[wxd96dc04a4b7b3c79]]></appid><mch_id><![CDATA[1556982581]]></mch_id><nonce_str><![CDATA[ewUrL4USTEsAM6mx]]></nonce_str><sign><![CDATA[357A7BF7D90BCC14870B19BA6B7A89A4]]></sign><result_code><![CDATA[SUCCESS]]></result_code><prepay_id><![CDATA[wx301153304416450cf516ca761092917600]]></prepay_id><trade_type><![CDATA[JSAPI]]></trade_type></xml>

String notify_url= "http://koc.261in.cn/puJin/kco/notify_url.do";

    Order payOrder = orderService.selectByorderNumber(orderNumber);
     Map<String,String> parameters = new HashMap<String,String>();
     parameters.put("appid", WechatPay.getWX_APPID());//商户密钥  
     parameters.put("mch_id", WechatPay.getWX_MCH_ID());  //商户号
     parameters.put("nonce_str", WXPayUtil.generateNonceStr());  //随机字符串
     parameters.put("body", payOrder.getOrder_detail());  //订单详情
     parameters.put("out_trade_no", payOrder.getOrder_number()); //订单id
    // parameters.put("fee_type", "CNY");  //标价币种
     String openid=(String) openidMap.get("openid");
     parameters.put("openid",openid); // 微信公众号统一标示openid
     //String total_fee=String.format("%.2f",Double.parseDouble(payOrder.getActual_pay()));
     String total_fee=new BigDecimal(100).multiply(new BigDecimal(payOrder.getActual_pay())).setScale(0,BigDecimal.ROUND_DOWN).toString();
     parameters.put("total_fee",total_fee); //支付金额   以分为单位
     parameters.put("spbill_create_ip",getIpAddr(request));//下单ip
     System.out.println(getIpAddr(request));
     parameters.put("notify_url", notify_url); //下边那个方法地址   支付成功回调路径
     parameters.put("trade_type", "JSAPI");  // 固定填写
    //设置签名
     String paysign=WXPayUtil.generateSignature(parameters, WechatPay.getWX_API_KEY());
     parameters.put("sign", paysign);
   //封装请求参数结束
     String requestXML = WXPayUtil.mapToXml(parameters);  
    //调用统一下单接口
     String result = PayCommonUtil.httpsRequest(ConfigUtil.UNIFIED_ORDER_URL, "POST", requestXML);
     System.out.println("\n"+result);
     try {
     /**统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay**/
        Map<String, String> resultMap = WXPayUtil.xmlToMap(result);
        Map<String,String> parameterMap2 = new HashMap<String,String>();  
           parameterMap2.put("appid", WechatPay.getWX_APPID());  
        System.out.println(resultMap.get("prepay_id"));
        parameterMap2.put("packages", "prepayid="+resultMap.get("prepay_id"));  
        parameterMap2.put("noncestr",  WXPayUtil.generateNonceStr());
        parameterMap2.put("signType", "MD5");
        parameterMap2.put("timestamp", WXPayUtil.getCurrentTimestamp()+"");  
        String sign2 = WXPayUtil.generateSignature(parameters, WechatPay.getWX_API_KEY());
        parameterMap2.put("sign", sign2);  
        map.put("code","200");
        map.put("msg",parameterMap2);
    } catch (JDOMException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return map;
阅读 6.2k
2 个回答

好多问题都会提示这个错误,要检查一下:

  • 是不是参数有问题
  • 是不是签名有问题
  • 另外,不要用沙箱环境

仔细阅读文档微信h5支付文档

新手上路,请多包涵

跪求各位大佬能够解答,这一个问题整了好几天了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题