client.setXmlParam(WXPayUtil.generateSignedXml(m, WxPayUtils.WX_PAY_PARTNER_KEY));
client.setHttps(true);
//执行post请求发送
client.post();
//4 得到发送请求返回结果
//返回内容,是使用xml格式返回
String xml = client.getContent();
//把xml格式转换map集合,把map集合返回
Map<String,String> resultMap = WXPayUtil.xmlToMap(xml);
//最终返回数据 的封装
Map map = new HashMap();
map.put("no", no);
map.put("price", price);
map.put("result_code", resultMap.get("result_code"));
map.put("code_url", resultMap.get("code_url"));
@Controller @RequestMapping("/wxpay") public class WxPayController { @RequestMapping("/pay") public String createPayQRcode(Model model) throws Exception{ String price = "0.01"; String no = getOrderNo(); Map m = new HashMap(); m.put("appid", WxPayUtils.WX_PAY_APP_ID); m.put("mch_id", WxPayUtils.WX_PAY_PARTNER); m.put("nonce_str", WXPayUtil.generateNonceStr()); m.put("body","微信支付测试"); //主体信息 m.put("out_trade_no", no); //订单唯一标识 m.put("total_fee", getMoney(price));//金额 m.put("spbill_create_ip", "127.0.0.1");//项目的域名 m.put("notify_url", WxPayUtils.WX_OPEN_NOTIFY_URL);//回调地址 m.put("trade_type", "NATIVE");//生成二维码的类型 //3 发送httpclient请求,传递参数xml格式,微信支付提供的固定的地址 HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder"); //设置xml格式的参数 //把xml格式的数据加密 client.setXmlParam(WXPayUtil.generateSignedXml(m, WxPayUtils.WX_PAY_PARTNER_KEY)); client.setHttps(true); //执行post请求发送 client.post(); //4 得到发送请求返回结果 //返回内容,是使用xml格式返回 String xml = client.getContent(); //把xml格式转换map集合,把map集合返回 Map<String,String> resultMap = WXPayUtil.xmlToMap(xml); //最终返回数据 的封装 Map map = new HashMap(); map.put("no", no); map.put("price", price); map.put("result_code", resultMap.get("result_code")); map.put("code_url", resultMap.get("code_url")); model.addAttribute("map",map); return "pay"; }
呃,你可以把你请求接口传出去的参数的数据
和接口返回的内容贴一贴,不然这样很难分析你到底什么问题的。
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause的错误
//4.判断是否支付成功
if(resultMap.get("trade_state").equals("SUCCESS")) ,就做了一个这个判断
<return_msg><![CDATA[OK]]></return_msg>
<result_code><![CDATA[FAIL]]></result_code>
<err_code_des><![CDATA[参数notify_url无效]]></err_code_des>
<err_code><![CDATA[PARAM_ERROR]]></err_code>
<mch_id><![CDATA[1510**9361]]></mch_id>
<appid><![CDATA[wx53***2d0678d22ac]]></appid>
<nonce_str><![CDATA[Mdq***H2mOP8tdDY]]></nonce_str>
<sign><![CDATA[7E0B113606**B172E880***6378AC580]]></sign>
</xml>
这就是从xml中获取到的,那几个**是我自己打上去的