diff --git a/coolstore-partner-service/src/main/java/com/cool/store/handler/WeChatHandler.java b/coolstore-partner-service/src/main/java/com/cool/store/handler/WeChatHandler.java index 624189a10..da3e3aedb 100644 --- a/coolstore-partner-service/src/main/java/com/cool/store/handler/WeChatHandler.java +++ b/coolstore-partner-service/src/main/java/com/cool/store/handler/WeChatHandler.java @@ -1,5 +1,6 @@ package com.cool.store.handler; +import com.alibaba.fastjson.JSONObject; import com.cool.store.dao.PartnerUserWechatBindDAO; import com.cool.store.dto.wechat.WechatUserInfoDTO; import com.cool.store.service.wechat.WechatTemplateService; @@ -99,6 +100,8 @@ public class WeChatHandler { //根据openId 获取用户信息 WechatUserInfoDTO userInfo = wechatTemplateService.getUserInfo(fromUserName, null); + log.info("handleSubscribeEvent: {}", JSONObject.toJSONString(userInfo)); + //根据unionId 更新服务号ID if (userInfo != null) { partnerUserWechatBindDAO.updateByUnionId(userInfo.getUnionid(),fromUserName); diff --git a/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java b/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java index 1eb0558b3..ad7fe6900 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/config/OpenApiValidateFilter.java @@ -42,6 +42,10 @@ public class OpenApiValidateFilter implements Filter { private String coolAppKey; @Value("${cool.api.secret}") private String coolAppSecret; + private static final Set WHITELIST_URIS = new HashSet<>(Arrays.asList( + "/zxjp/open/v1/statusRefresh", + "/zxjp/open/v1/getStoreUser" + )); private static final List oldUrlMapping = new ArrayList<>(Arrays.asList( "/zxjp/open/v1/statusRefresh","/zxjp/open/v1/changePaymentStatus", "/zxjp/open/v1/getYlsToken", "/zxjp/open/v1/getStoreList", @@ -61,7 +65,7 @@ public class OpenApiValidateFilter implements Filter { } MDC.put(CommonConstants.REQUEST_ID, UUIDUtils.get32UUID()); //statusRefresh 放开不需要验签 - if (uri.startsWith("/zxjp/open/v1/statusRefresh") || uri.startsWith("/zxjp/open/v1/getStoreUser")) { + if (isWhitelistUri(uri)) { filterChain.doFilter(servletRequest, response); return; } @@ -174,6 +178,9 @@ public class OpenApiValidateFilter implements Filter { return OpenSignatureUtil.generateOldSign(params, coolAppSecret); } + private boolean isWhitelistUri(String uri) { + return WHITELIST_URIS.stream().anyMatch(uri::startsWith); + } @Override public void destroy() { } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java index 583927355..0d1c313a0 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/OpenApiController.java @@ -5,6 +5,7 @@ import com.cool.store.context.PartnerUserHolder; import com.cool.store.dto.*; import com.cool.store.dto.store.StoreUserPositionDTO; import com.cool.store.dto.wx.MiniProgramFreeLoginDTO; +import com.cool.store.handler.WeChatHandler; import com.cool.store.request.OpenApiStoreRequest; import com.cool.store.request.StoreCodeDTO; import com.cool.store.request.*; @@ -15,10 +16,12 @@ import com.cool.store.request.xgj.ReceiptCallBackRequest; import com.cool.store.response.ResponseResult; import com.cool.store.response.bigdata.ApiResponse; import com.cool.store.service.*; +import com.cool.store.utils.poi.StringUtils; import com.github.pagehelper.PageInfo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -52,6 +55,8 @@ public class OpenApiController { MessageTemplateService messageTemplateService; @Resource WechatMiniAppService wechatMiniAppService; + @Autowired + WeChatHandler weChatHandler; @PostMapping("/statusRefresh") public ApiResponse statusRefresh(@RequestBody StatusRefreshDTO statusRefreshDTO){ @@ -185,4 +190,31 @@ public class OpenApiController { public ApiResponse getTokenByMobile(@RequestBody @Validated MiniProgramFreeLoginDTO param) { return ApiResponse.success(wechatMiniAppService.getShortTermTokenByMobile(param)); } + + @RequestMapping(value = "/callback", produces = "application/xml;charset=UTF-8") + @ApiOperation("callback") + public String handleWechatMessage( + @RequestParam("signature") String signature, + @RequestParam("timestamp") String timestamp, + @RequestParam("nonce") String nonce, + @RequestParam(value = "echostr", required = false) String echostr, + @RequestBody(required = false) String requestBody) { + + System.out.println("收到微信消息:"); + System.out.println("signature: " + signature); + System.out.println("timestamp: " + timestamp); + System.out.println("nonce: " + nonce); + System.out.println("echostr: " + echostr); + System.out.println("requestBody: " + requestBody); + + if (StringUtils.isNotEmpty(requestBody)) { + try { + return weChatHandler.processMessage(weChatHandler.parseXmlToMap(requestBody)); + } catch (Exception e) { + log.info("回调处理失败 e:{}",e.getMessage()); + return "success"; + } + } + return nonce; + } } diff --git a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java index af2d3ddc6..a21f93dc2 100644 --- a/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java +++ b/coolstore-partner-web/src/main/java/com/cool/store/controller/webb/PCTestController.java @@ -98,14 +98,16 @@ public class PCTestController { private HttpRestTemplateService httpRestTemplateService; @Resource FranchiseFeeMapper franchiseFeeMapper; - + @Resource + WechatTemplateService wechatTemplateService; @Resource ShopInfoMapper shopInfoMapper; @Resource LinePayService linePayService; @Resource LinePayDAO linePayDAO; - + @Autowired + WeChatHandler weChatHandler; @GetMapping("/syncStore") public ResponseResult syncStore(@RequestParam("shopId")Long shopId){ syncMainSysServer.syncStore(shopId); @@ -561,8 +563,7 @@ public class PCTestController { } return request; } - @Autowired - WeChatHandler weChatHandler; + @RequestMapping(value = "/testWxNotice", produces = "application/xml;charset=UTF-8") @ApiOperation("testWxNotice") @@ -590,8 +591,6 @@ public class PCTestController { } return nonce; } - @Resource - WechatTemplateService wechatTemplateService; @ApiOperation("测试小程序模板消息") @PostMapping("/testMiniAppTemplate")