From 4a57507fcff9008e5a5043345bdb323db074c147 Mon Sep 17 00:00:00 2001 From: xhxu Date: Mon, 23 Oct 2023 20:05:57 +0800 Subject: [PATCH] //pay notify --- .../controller/CallbackPayController.java | 101 ++++++------------ 1 file changed, 31 insertions(+), 70 deletions(-) diff --git a/suimangCApi/src/main/java/com/iformall/controller/CallbackPayController.java b/suimangCApi/src/main/java/com/iformall/controller/CallbackPayController.java index 23c2cd5..139c002 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/CallbackPayController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/CallbackPayController.java @@ -19,6 +19,7 @@ import com.iformall.service.pay.PayServiceFactory; import com.iformall.service.pay.service.pay.PayAdapterService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.apache.commons.lang3.StringUtils; import org.jdom2.JDOMException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -151,30 +152,12 @@ public class CallbackPayController extends BaseController { @AuthIgnore @ApiOperation("支付回调") @PostMapping(value = "/aliNotify") - public Map _aliNotify(HttpServletRequest request, HttpServletResponse response) { + public String _aliNotify(HttpServletRequest request, HttpServletResponse response) { logger.debug("[" + getIpAddr() + "] CallbackPayController::_aliNotify"); - String body1 = ((BodyReaderHttpServletRequestWrapper) request).getBody(); + String body = ((BodyReaderHttpServletRequestWrapper) request).getBody(); - logger.info("ali支付回调结果通知1{}"+JSONObject.toJSONString(body1)); - - Map< String , String > paranMap = new HashMap < String , String > (); - Map requestParams = request.getParameterMap(); - logger.info("ali支付回调结果通知2{}"+JSONObject.toJSONString(requestParams)); - - for(Iterator iter = requestParams.keySet().iterator(); iter.hasNext();){ - String name = (String)iter.next(); - String[] values = (String [])requestParams.get(name); - String valueStr = ""; - for(int i = 0;i < values.length;i ++ ){ - valueStr = (i==values.length-1)?valueStr + values [i]:valueStr + values[i] + ","; - } - //乱码解决,这段代码在出现乱码时使用。 - //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); - paranMap.put (name,valueStr); - } - - logger.info("ali支付回调结果通知{}"+JSONObject.toJSONString(paranMap)); + logger.info("ali支付回调结果通知 body{}"+body); Map resultMap = new HashMap<>(); @@ -182,65 +165,43 @@ public class CallbackPayController extends BaseController { * ----效验数据来源合法 */ try{ - String body = this.getBody(request); - logger.info("ali支付回调结果通知---body{}"+body); -// String msg = (String) paranMap.get("msg"); -// String type = (String) paranMap.get("type"); -// -// Map pMap = JSONObject.parseObject(msg, Map.class); -// String appid = (String) pMap.get("appid"); -// WxAppinfo appInfo = wxAppinfoService.getOnlyByAppIdFromRedis(appid); -// WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); -// if("payment".equals(type)){ -// String out_order_no = (String)pMap.get("cp_orderno"); -// -// EnumProductOrderPayVendor payVendorEnum = EnumProductOrderPayVendor.PAY_WAY_TT; -// ProductOrderPay orderPay = productOrderPayService.getByOrder(Long.parseLong(out_order_no), payVendorEnum); -// -// PayAdapterService payAdapterService = payServiceFactory.getPayAdapterService(payVendorEnum.getCode()); -// productOrderPayService.handleProductOrderByQuery(appInfo,payAccount,orderPay,payAdapterService); -// -// resultMap.put("err_no",0); -// resultMap.put("err_tips","success"); -// } + Map paranMap = handBody(body); + logger.info("ali支付回调结果通知 paranMap{}"+JSONObject.toJSONString(paranMap)); + + String app_id = paranMap.get("app_id"); + WxAppinfo appInfo = wxAppinfoService.getOnlyByAppIdFromRedis(app_id); + WxPayAccount payAccount = wxPayAccountService.getByIdFromRedis(appInfo.getPayId()); + + String out_trade_no = paranMap.get("out_trade_no"); + String trade_status = paranMap.get("trade_status"); + if("TRADE_SUCCESS".equals(trade_status)){ + EnumProductOrderPayVendor payVendorEnum = EnumProductOrderPayVendor.PAY_WAY_ALIPAY_WAP; + ProductOrderPay orderPay = productOrderPayService.getByOrder(Long.parseLong(out_trade_no), payVendorEnum); + + PayAdapterService payAdapterService = payServiceFactory.getPayAdapterService(payVendorEnum.getCode()); + productOrderPayService.handleProductOrderByQuery(appInfo,payAccount,orderPay,payAdapterService); + } + return "success"; }catch(Exception e){ logger.error("ali支付回调处理异常"+e); - resultMap.put("err_no",ErrorCode.SYS_SERVER_ERROR.getCode()); - resultMap.put("err_tips","ali支付回调处理异常"); } - return resultMap; + return "fail"; } - private String getBody(HttpServletRequest request) throws IOException { - StringBuilder stringBuilder = new StringBuilder(); - BufferedReader bufferedReader = null; - try { - InputStream inputStream = request.getInputStream(); - if (inputStream != null) { - bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"utf-8")); - char[] charBuffer = new char[1024]; - int bytesRead = -1; - while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { - stringBuilder.append(charBuffer, 0, bytesRead); - } - } else { - stringBuilder.append(""); - } - } catch ( - IOException ex) { - throw ex; - } finally { - if (bufferedReader != null) { - try { - bufferedReader.close(); - } catch (IOException ex) { - throw ex; + private Map handBody(String body){ + Map map = new HashMap<>(); + if(StringUtils.isNotBlank(body)){ + String[] key_value = body.split("&"); + if(key_value.length > 0){ + for (String kv: key_value) { + String[] split = kv.split("="); + map.put(split[0],split[1]); } } } - return stringBuilder.toString(); + return map; } }