统一下单接口返回的数据也正确,返回到前台也都有数据,没有报过错~~
<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;
好多问题都会提示这个错误,要检查一下:
仔细阅读文档微信h5支付文档