/***
* 支付回调接口*/@RequestMapping("/userpaycallback")publicString wxUserPaycallback(HttpServletRequest request) {try{
Map params =wxUserPayService.getParameter2Map(request.getParameterMap(),
request.getInputStream());if (null ==params) {throw new Exception("回调参数为空");
}//校验
if (!wxUserPayService.verify(params)) {throw new Exception("校验失败");
}
payDone(params);//支付处理return wxUserPayService.getPayOutMessage("SUCCESS", "成功").toMessage();
}catch(Exception e) {
e.printStackTrace();return wxUserPayService.getPayOutMessage("FALL", "失败").toMessage();
}
}
/**
* 支付结果处理
*/
private void payDone(Map dataMap) throwsException {
System.out.println("支付回调:" +JSON.toJSONString(dataMap));//{"transaction_id":"4200000109201805293331420304","nonce_str":"402880e963a9764b0163a979a16e0002","bank_type":"CFT","openid":"oXI6G5Jc4D44y2wixgxE3OPwpDVg","sign":"262978D36A3093ACBE4B55707D6EA7B2","fee_type":"CNY","mch_id":"1491307962","cash_fee":"10","out_trade_no":"14913079622018052909183048768217","appid":"wxa177427bc0e60aab","total_fee":"10","trade_type":"JSAPI","result_code":"SUCCESS","time_end":"20180529091834","is_subscribe":"N","return_code":"SUCCESS"}
String result_code = dataMap.get("result_code").toString();//支付结果code
String out_trade_no = dataMap.get("out_trade_no").toString();//商户交易订单id,此为支付记录id
if (!result_code.equals("SUCCESS")) {throw new Exception("支付回调失败:" +JSON.toJSONString(dataMap));
}
Pay pay= payService.getById(out_trade_no);//获取支付记录
if (pay == null || pay.getStatus() != 10) {//10=可用/待支付 20=支付成功 30=支付失败
throw new Exception("支付记录已经处理");
}
payService.pay(out_trade_no, result_code.equals("SUCCESS") ? 20 : 30);//根据回调结果更改支付结果状态//升级成会员的数据处理
if(result_code.equals("SUCCESS")) {//支付结果SUCCESS,支付成功开通会员,进行下一步操作
Document doc=newDocument();
doc.put("vipStatus", 20);//状态20开通会员
doc.put("vipCreateTime", newDate());
doc.put("expireTime", StringUtil.getMonthNextOrBeforeDate(3));//设置过期时间为3个月后
userService.updateUserVip(pay.getUserId(),doc);
}
}