mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 18:46:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			90 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 消息机制未实现,下面为通知回调中设置的代码部分
 | ||
| 
 | ||
| 以下代码可通过腾讯全网发布测试用例
 | ||
| 
 | ||
| ```Java
 | ||
| @RestController
 | ||
| @RequestMapping("notify")
 | ||
| public class NotifyController extends WechatThridBaseController {
 | ||
|     @Autowired
 | ||
|     protected WxOpenServiceDemo wxOpenService;
 | ||
|     @RequestMapping("receive_ticket")
 | ||
|     public Object receiveTicket(@RequestBody(required = false) String requestBody, @RequestParam("timestamp") String timestamp,
 | ||
|                                 @RequestParam("nonce") String nonce, @RequestParam("signature") String signature,
 | ||
|                                 @RequestParam(name = "encrypt_type", required = false) String encType,
 | ||
|                                 @RequestParam(name = "msg_signature", required = false) String msgSignature) {
 | ||
|         this.logger.info(
 | ||
|                 "\n接收微信请求:[signature=[{}], encType=[{}], msgSignature=[{}],"
 | ||
|                         + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
 | ||
|                 signature, encType, msgSignature, timestamp, nonce, requestBody);
 | ||
| 
 | ||
|         if (!StringUtils.equalsIgnoreCase("aes", encType) || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
 | ||
|             throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
 | ||
|         }
 | ||
| 
 | ||
|         // aes加密的消息
 | ||
|         WxOpenXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedXml(requestBody, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
 | ||
|         this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
 | ||
|         String out = null;
 | ||
|         try {
 | ||
|             out = wxOpenService.getWxOpenComponentService().route(inMessage);
 | ||
|         } catch (WxErrorException e) {
 | ||
|             throw new ResponseException(ErrorCodeEnum.ERROR, e);
 | ||
|         }
 | ||
| 
 | ||
|         this.logger.debug("\n组装回复信息:{}", out);
 | ||
| 
 | ||
|         return out;
 | ||
|     }
 | ||
|     @RequestMapping("{appId}/callback")
 | ||
|     public Object callback(@RequestBody(required = false)String requestBody,
 | ||
|                            @PathVariable ("appId") String appId,
 | ||
|                            @RequestParam("signature") String signature,
 | ||
|                            @RequestParam("timestamp") String timestamp,
 | ||
|                            @RequestParam("nonce") String nonce,
 | ||
|                            @RequestParam("openid") String openid,
 | ||
|                            @RequestParam("encrypt_type") String encType,
 | ||
|                            @RequestParam("msg_signature") String msgSignature) {
 | ||
|         this.logger.info(
 | ||
|                 "\n接收微信请求:[appId=[{}], openid=[{}], signature=[{}], encType=[{}], msgSignature=[{}],"
 | ||
|                         + " timestamp=[{}], nonce=[{}], requestBody=[\n{}\n] ",
 | ||
|                 appId, openid, signature, encType, msgSignature, timestamp, nonce, requestBody);
 | ||
|         logger.info("query:"+getHttpServletRequest().getQueryString()+"\nbody:"+requestBody);
 | ||
|         if (!StringUtils.equalsIgnoreCase("aes", encType) || !wxOpenService.getWxOpenComponentService().checkSignature(timestamp, nonce, signature)) {
 | ||
|             throw new IllegalArgumentException("非法请求,可能属于伪造的请求!");
 | ||
|         }
 | ||
| 
 | ||
|         String out = "";
 | ||
|         // aes加密的消息
 | ||
|         WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(requestBody, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
 | ||
|         this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
 | ||
|         // 全网发布测试用例
 | ||
|         if (StringUtils.equalsAnyIgnoreCase(appId, "wxd101a85aa106f53e", "wx570bc396a51b8ff8")) {
 | ||
|             try {
 | ||
|                 if (StringUtils.equals(inMessage.getMsgType(), "text")) {
 | ||
|                     if (StringUtils.equals(inMessage.getContent(), "TESTCOMPONENT_MSG_TYPE_TEXT")) {
 | ||
|                         out = new WxOpenCryptUtil(wxOpenService.getWxOpenConfigStorage()).encrypt(
 | ||
|                                 WxMpXmlOutMessage.TEXT().content("TESTCOMPONENT_MSG_TYPE_TEXT_callback")
 | ||
|                                         .fromUser(inMessage.getToUser())
 | ||
|                                         .toUser(inMessage.getFromUser())
 | ||
|                                         .build()
 | ||
|                                         .toXml()
 | ||
|                         );
 | ||
|                     } else if (StringUtils.startsWith(inMessage.getContent(), "QUERY_AUTH_CODE:")) {
 | ||
|                         String msg = inMessage.getContent().replace("QUERY_AUTH_CODE:", "") + "_from_api";
 | ||
|                         WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(msg).toUser(inMessage.getFromUser()).build();
 | ||
|                         wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
 | ||
|                     }
 | ||
|                 } else if (StringUtils.equals(inMessage.getMsgType(), "event")) {
 | ||
|                     WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(inMessage.getEvent() + "from_callback").toUser(inMessage.getFromUser()).build();
 | ||
|                     wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
 | ||
|                 }
 | ||
|             } catch (WxErrorException e) {
 | ||
|                 logger.error("callback", e);
 | ||
|             }
 | ||
|         }
 | ||
|         return out;
 | ||
|     }
 | ||
| }
 | ||
| ```
 | 
