|
@@ -190,59 +190,63 @@ public class WechatPayService {
|
|
|
log.error("wx-callBack--wxConfig-notexist");
|
|
log.error("wx-callBack--wxConfig-notexist");
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
|
|
+ Map<String, String> data = new HashMap<String, String>();
|
|
|
|
|
+ data.put("out_trade_no", order.getOrderSn());
|
|
|
|
|
+ Map<String, String> resp = WXPay.orderQuery(data,wxConfig.getAppid(),wxConfig.getMchId(),wxConfig.getMchKey());
|
|
|
|
|
+ log.info("wx-callBack-queryOrder--req:{},resp:{}",data,resp);
|
|
|
|
|
+
|
|
|
|
|
+ if (resp.get("trade_state") != null && resp.get("trade_state").equals(WXPayConstants.SUCCESS)) {
|
|
|
|
|
+ payFlag = true;
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
String inputLine = "";
|
|
String inputLine = "";
|
|
|
String notifyXml = "";
|
|
String notifyXml = "";
|
|
|
-
|
|
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(ReadAsChars(request));
|
|
|
|
|
- log.info("wx-callBack--msgJson:{}",jsonObject);
|
|
|
|
|
- if(request.getContentType().contains("application/json")){
|
|
|
|
|
-
|
|
|
|
|
- }else {
|
|
|
|
|
- while((inputLine = request.getReader().readLine()) != null){
|
|
|
|
|
- notifyXml += inputLine;
|
|
|
|
|
- }
|
|
|
|
|
- //关闭流
|
|
|
|
|
- request.getReader().close();
|
|
|
|
|
- log.info("wx-callBack--msgXml:{}",notifyXml);
|
|
|
|
|
- Map<String,String> map = WXPayUtil.xmlToMap(notifyXml);
|
|
|
|
|
- //解析成Map
|
|
|
|
|
-
|
|
|
|
|
- if (WXPayUtil.isSignatureValid(map,wxConfig.getMchKey(), WXPayConstants.SignType.MD5)
|
|
|
|
|
- || WXPayUtil.isSignatureValid(map, wxConfig.getMchKey(), WXPayConstants.SignType.HMACSHA256)) {
|
|
|
|
|
- //判断 支付是否成功
|
|
|
|
|
- if("SUCCESS".equals(map.get("result_code"))){
|
|
|
|
|
- //获得 返回的商户订单号
|
|
|
|
|
- String out_trade_no = map.get("out_trade_no");
|
|
|
|
|
- trade_no = map.get("transaction_id");
|
|
|
|
|
- openId = map.get("openid");
|
|
|
|
|
- log.info("微信回调返回商户订单号:out_trade_no:{},transaction_id:{},openid:{}" , out_trade_no,trade_no,openId);
|
|
|
|
|
- //修改订单状态
|
|
|
|
|
- //todo 支付成功
|
|
|
|
|
- if(!out_trade_no.equals(order.getOrderSn())){
|
|
|
|
|
- log.error("wx-call-back error :orderSn:{},out_trade_no:{}" ,order.getOrderSn(), out_trade_no);
|
|
|
|
|
- return false;
|
|
|
|
|
- }
|
|
|
|
|
- payFlag = true;
|
|
|
|
|
-
|
|
|
|
|
- log.info("微信支付成功,订单号:" + out_trade_no);
|
|
|
|
|
- //通知微信服务器已经支付成功
|
|
|
|
|
- notifyXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code>"
|
|
|
|
|
- + "<return_msg><![CDATA[OK]]></return_msg></xml> ";
|
|
|
|
|
- }else{
|
|
|
|
|
- notifyXml = "<xml><return_code><![CDATA[FAIL]]></return_code>"
|
|
|
|
|
- + "<return_msg><![CDATA[报文为空]]></return_msg></xml> ";
|
|
|
|
|
|
|
+ while((inputLine = request.getReader().readLine()) != null){
|
|
|
|
|
+ notifyXml += inputLine;
|
|
|
|
|
+ }
|
|
|
|
|
+ //关闭流
|
|
|
|
|
+ request.getReader().close();
|
|
|
|
|
+ log.info("wx-callBack--msgXml:{}",notifyXml);
|
|
|
|
|
+ Map<String,String> map = WXPayUtil.xmlToMap(notifyXml);
|
|
|
|
|
+ //解析成Map
|
|
|
|
|
+
|
|
|
|
|
+ if (WXPayUtil.isSignatureValid(map,wxConfig.getMchKey(), WXPayConstants.SignType.MD5)
|
|
|
|
|
+ || WXPayUtil.isSignatureValid(map, wxConfig.getMchKey(), WXPayConstants.SignType.HMACSHA256)) {
|
|
|
|
|
+ //判断 支付是否成功
|
|
|
|
|
+ if("SUCCESS".equals(map.get("result_code"))){
|
|
|
|
|
+ //获得 返回的商户订单号
|
|
|
|
|
+ String out_trade_no = map.get("out_trade_no");
|
|
|
|
|
+ trade_no = map.get("transaction_id");
|
|
|
|
|
+ openId = map.get("openid");
|
|
|
|
|
+ log.info("微信回调返回商户订单号:out_trade_no:{},transaction_id:{},openid:{}" , out_trade_no,trade_no,openId);
|
|
|
|
|
+ //修改订单状态
|
|
|
|
|
+ //todo 支付成功
|
|
|
|
|
+ if(!out_trade_no.equals(order.getOrderSn())){
|
|
|
|
|
+ log.error("wx-call-back error :orderSn:{},out_trade_no:{}" ,order.getOrderSn(), out_trade_no);
|
|
|
|
|
+ return false;
|
|
|
}
|
|
}
|
|
|
- } else{
|
|
|
|
|
- log.error("签名验证错误");
|
|
|
|
|
|
|
+ payFlag = true;
|
|
|
|
|
+
|
|
|
|
|
+ log.info("微信支付成功,订单号:" + out_trade_no);
|
|
|
|
|
+ //通知微信服务器已经支付成功
|
|
|
|
|
+ notifyXml = "<xml><return_code><![CDATA[SUCCESS]]></return_code>"
|
|
|
|
|
+ + "<return_msg><![CDATA[OK]]></return_msg></xml> ";
|
|
|
|
|
+ }else{
|
|
|
notifyXml = "<xml><return_code><![CDATA[FAIL]]></return_code>"
|
|
notifyXml = "<xml><return_code><![CDATA[FAIL]]></return_code>"
|
|
|
- + "<return_msg><![CDATA[签名验证错误]]></return_msg></xml>";
|
|
|
|
|
|
|
+ + "<return_msg><![CDATA[报文为空]]></return_msg></xml> ";
|
|
|
}
|
|
}
|
|
|
- BufferedOutputStream out = new BufferedOutputStream(
|
|
|
|
|
- response.getOutputStream());
|
|
|
|
|
- out.write(notifyXml.getBytes());
|
|
|
|
|
- out.flush();
|
|
|
|
|
- out.close();
|
|
|
|
|
|
|
+ } else{
|
|
|
|
|
+ log.error("签名验证错误");
|
|
|
|
|
+ notifyXml = "<xml><return_code><![CDATA[FAIL]]></return_code>"
|
|
|
|
|
+ + "<return_msg><![CDATA[签名验证错误]]></return_msg></xml>";
|
|
|
}
|
|
}
|
|
|
|
|
+ BufferedOutputStream out = new BufferedOutputStream(
|
|
|
|
|
+ response.getOutputStream());
|
|
|
|
|
+ out.write(notifyXml.getBytes());
|
|
|
|
|
+ out.flush();
|
|
|
|
|
+ out.close();
|
|
|
|
|
+
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
log.error("微信支付回调数据异常, error:", e);
|
|
log.error("微信支付回调数据异常, error:", e);
|