/*** 统一下单接口,获取prepay_id
*@paramrequest
*@return
*/@RequestMapping(value= "/unifiedOrder", method =RequestMethod.GET)
@ResponseBodypublic MapunifiedOrder(HttpServletRequest request,String openId,String totalFee) {try{//不带properties扩展名的文件名
ResourceBundle wx = ResourceBundle.getBundle("wx");//统一下单https://api.mch./pay/unifiedorder
String unifiedorder_url = "https://api.mch./pay/unifiedorder";//拼接统一下单地址参数
Map paraMap = new HashMap();//获取请求ip地址
String ip = request.getHeader("x-forwarded-for");if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
ip= request.getHeader("Proxy-Client-IP");
}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
ip= request.getHeader("WL-Proxy-Client-IP");
}if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
ip=request.getRemoteAddr();
}if(ip.indexOf(",")!=-1){
String[] ips= ip.split(",");
ip= ips[0].trim();
}
String appid= wx.getString("wx_appid");
paraMap.put("appid", appid);
paraMap.put("body", "********");
paraMap.put("mch_id", "****");
paraMap.put("nonce_str", WXPayUtil.generateNonceStr());
paraMap.put("openid", openId);
paraMap.put("out_trade_no", new Date().getTime()+"");//订单号
paraMap.put("spbill_create_ip", ip);
paraMap.put("total_fee",totalFee);
paraMap.put("trade_type", "JSAPI");
paraMap.put("notify_url",wx.getString("red_url") + "/callback.do");//此路径是微信服务器调用支付结果通知路径随意写
String sign = WXPayUtil.generateSignature(paraMap, "********");
paraMap.put("sign", sign);
String xml= WXPayUtil.mapToXml(paraMap);//将所有参数(map)转xml格式
System.out.println(xml);
String xmlStr= wxMpService.post(unifiedorder_url, xml); //发送post请求"统一下单接口"返回预支付id:prepay_id//以下内容是返回前端页面的json数据
String prepay_id = "";//预支付id
if (xmlStr.indexOf("SUCCESS") != -1) {
Map map =WXPayUtil.xmlToMap(xmlStr);
prepay_id= (String) map.get("prepay_id");
}
Map payMap = new HashMap();
payMap.put("appId", appid);
payMap.put("timeStamp", WXPayUtil.getCurrentTimestamp()+"");
payMap.put("nonceStr", WXPayUtil.generateNonceStr());
payMap.put("signType", "MD5");
payMap.put("package", "prepay_id=" +prepay_id);
String paySign= WXPayUtil.generateSignature(payMap, "*******");
payMap.put("paySign", paySign);
String xml2= WXPayUtil.mapToXml(payMap);//将所有参数(map)转xml格式
System.out.println(xml2);returnpayMap;
}catch(Exception e) {
e.printStackTrace();return null;
}
}
@RequestMapping(value="/callback",method=RequestMethod.GET)publicString callBack(HttpServletRequest request,HttpServletResponse response){//System.out.println("微信支付成功,微信发送的callback信息,请注意修改订单信息");
InputStream is = null;try{
is= request.getInputStream();//获取请求的流信息(这里是微信发的xml格式所有只能使用流来读)
String xml = WXPayUtil.inputStream2String(is, "UTF-8");
Map notifyMap = WXPayUtil.xmlToMap(xml);//将微信发的xml转map
if(notifyMap.get("return_code").equals("SUCCESS")){//支付成功
}//告诉微信服务器收到信息了,不要在调用回调action了========这里很重要回复微信服务器信息用流发送一个xml即可
response.getWriter().write("");
is.close();
}catch(Exception e) {
e.printStackTrace();
}return null;
}