public Map<String, String> order(HttpServletRequest request,String orderNo,String totalFee,String openid){
System.out.println("***WxPayController.order()");
Map<String, Object> retMap = new HashMap<String, Object>();
Map<String, String> payMap = new HashMap<String, String>();
RestTemplate rest = new RestTemplate();
rest.getMessageConverters().add(0, new StringHttpMessageConverter(Charset.forName("UTF-8")));
try {
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("appid", appid); //公众账号ID
paramMap.put("mch_id", mch_id); //商户号
paramMap.put("nonce_str", WXPayUtil.generateNonceStr()); //随机字符串
paramMap.put("body", desc); //商品描述
paramMap.put("out_trade_no", orderNo); //商户订单号
paramMap.put("total_fee", totalFee); //标价金额
paramMap.put("spbill_create_ip", getIpAddress(request));//终端IP
paramMap.put("notify_url", notify_url); //通知地址
paramMap.put("trade_type", "JSAPI"); //交易类型
paramMap.put("openid", openid);
String sign = WXPayUtil.generateSignature(paramMap, key);
paramMap.put("sign", sign);
String mapToXml = WXPayUtil.mapToXml(paramMap);
String postForObject = rest.postForObject(new URI(unifiedorder_url), mapToXml, String.class);
System.out.println("***postForObject:\n"+postForObject);
String prepayId = "";//预支付id
if (postForObject.indexOf("SUCCESS") != -1) {
Map<String, String> map = WXPayUtil.xmlToMap(postForObject);
prepayId = (String) map.get("prepay_id");
}
//todo payMap里面的key!不能有下划线!否则会导致后端验签成功前端验签失败!搞了我24小时才解决!!!
payMap.put("appId", appid);
payMap.put("timeStamp", System.currentTimeMillis()+""+"");
payMap.put("nonceStr", WXPayUtil.generateNonceStr());
payMap.put("signType", "MD5");
payMap.put("package", "prepay_id=" + prepayId);
String paySign = WXPayUtil.generateSignature(payMap, key);
payMap.put("paySign", paySign);
System.out.println("***微信创建订单成功");
return payMap;
} catch (Exception e) {
retMap.put("code", "500");
retMap.put("msg", e.getStackTrace());
e.printStackTrace();
}
return payMap;
}