@RestController@RequestMapping(“/wxpay”)
public class WXController {
@PostMapping(“/notify”)
public String wxnotify(HttpServletRequest request,HttpServletResponse response) {
String xmlBack = “”;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),“UTF-8”));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine()) != null){
sb.append(line);
}
br.close();
//sb为微信返回的xml,微信sdk提供转化成map的方法
String notityXml = sb.toString();
System.out.println(“接收到的报文:” + notityXml);
Map<String, String> map = WXPayUtil.xmlToMap(notityXml);
WXPay wxpay = new WXPay(new PayConfig());
if (wxpay.isPayResultNotifySignatureValid(map)) {//验证成功
String return_code = map.get(“return_code”);//状态
String out_trade_no = map.get(“out_trade_no”);//订单号
String result_code = map.get(“result_code”);
//其实这里验证两个code都是success就说明充值成功了。可以处理自己的业务逻辑了。
if (!“SUCCESS”.equals(return_code) || !“SUCCESS”.equals(result_code)) {
System.out.println(“充值失败!”);
//支付失败的逻辑
xmlBack = “<xml>” + “<return_code><![CDATA[FAIL]]></return_code>” + “<return_msg><![CDATA[报文为空]]></return_msg>” + “</xml> “;
return xmlBack;
}
xmlBack = “<xml>” + “<return_code><![CDATA[SUCCESS]]></return_code>” + “<return_msg><![CDATA[SUCCESS]]></return_msg>” + “</xml> “;
return xmlBack;
} else {
System.out.println(“<<<<<<<<<<<<<<<<<<<<<微信支付回调通知签名错误”);
xmlBack = “<xml>” + “<return_code><![CDATA[FAIL]]></return_code>” + “<return_msg><![CDATA[报文为空]]></return_msg>” + “</xml> “;
return xmlBack;
}
} catch (Exception e) {
System.err.println(e);
System.out.println(“微信支付回调通知失败”);
xmlBack = “<xml>” + “<return_code><![CDATA[FAIL]]></return_code>” + “<return_msg><![CDATA[报文为空]]></return_msg>” + “</xml> “;
return xmlBack;
}
}}