Java设置接收企业微信消息服务器URL
创始人
2024-10-22 04:37:29

企业微信的接收消息服务器的程序用Java代码实现以下功能
1.接收并解析企业微信发送的消息
2.验证消息的合法性(签名验证)
3.根据消息内容进行相应的业务处理

接受消息服务器配置

登录企业微信后台管理

参考链接

企业微信 开发者 官方文档

https://developer.work.weixin.qq.com/tutorial/detail/38

java加解密库下载

https://developer.work.weixin.qq.com/devtool/introduce?id=10128

,这里,我下载的是json版本的

下载后解压如图

Sample 是一个测试类,com\qq\weixin\mp\aes  里是一些工具类,直接粘贴到项目使用,

实现代码

pom文件可能需要加入的依赖,(如果不是maven项目,直接用lib里的jar)

   org.json   json   20200518      commons-codec   commons-codec   1.9      org.gavaghan   geodesy   1.1.3 

controller代码

import lombok.extern.slf4j.Slf4j; import org.example.common.wei.WXBizJsonMsgCrypt; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.PrintWriter;  @Slf4j @RestController @RequestMapping("/weChat") public class WeChatCallBackController {      @GetMapping( "/callBackUrl")     public void callbackUrl(HttpServletRequest request, HttpServletResponse response) throws Exception{         // 微信加密签名         String sVerifyMsgSig = request.getParameter("msg_signature");         // 时间戳         String sVerifyTimeStamp = request.getParameter("timestamp");          // 随机数         String sVerifyNonce = request.getParameter("nonce");         // 随机字符串         String sVerifyEchoStr = request.getParameter("echostr");         System.out.println("request=" + request.getRequestURL());          String sToken = "XXXXXXXXXXXX";// 和设置服务器接受页面的保持一样,直接随机形成粘贴过来         String sCorpID = "XXXXXXXXXXXX";//企业id         String sEncodingAESKey = "XXXXXXXXXXXX;// 和设置服务器接受页面的保持一样,直接随机形成粘贴过来使用         PrintWriter out = response.getWriter();         // 通过检验msg_signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败         String sEchoStr = null;         try {             WXBizJsonMsgCrypt wxcpt = new WXBizJsonMsgCrypt(sToken, sEncodingAESKey, sCorpID);             sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp,                     sVerifyNonce, sVerifyEchoStr);             System.out.println("verifyurl echostr: " + sEchoStr);             // 验证URL成功,将sEchoStr返回             // HttpUtils.SetResponse(sEchoStr);         } catch (Exception e) {             //验证URL失败,错误原因请查看异常             e.printStackTrace();         }         if (sEchoStr == null) {             sEchoStr = sToken;         }         out.print(sEchoStr);         out.close();         out = null;     } }

将上面服务 发布到外网,暴露接口,可公网访问的,

然后配置到页面上(https://XXXXXX/weChat/callBackUrl)

内网穿透,可公网访问的方法

自己临时测试时,采用内网穿透 将自己本地的地址打到公网上

1. 钉钉内网穿透方法

内网穿透(测试版)--已废弃 - 钉钉开放平台

2. cloudflare内网穿透

https://blog.51cto.com/u_16099345/9937648

3. Localtunnel端口映射工具

官方后端服务器源码 https://github.com/localtunnel/server

 

winds 上  cmd 打开黑窗口 (localtunnel是用Node.js写的,所以必须先安装NodeJS环境)

安装  npm install -g localtunnel 执行  假设你的本地服务器在端口 8000 上运行,只需使用 LT 命令来启动隧道        lt --port 8000         lt --port 8000 --subdomain xxxxx      上面两个lt命令都行,第一个是默认域名随机生成一个,第二个指定域名      port:指定连接本地指定的服务端口      subdomain:设置固定的访问域名前缀(默认为随机字符),不要使用驼峰命名 直接访问 lt命令执行后的 your url is 后面的地址,就是代理后的地址 

相关内容

热门资讯

性能测试“软件”《崩坏:星穹铁... 米哈游今日发布公告:为了支持后续版本的内容更新以及游戏表现,《崩坏:星穹铁道》在 4.0 版本中,将...
一加Turbo 6系列9000... IT之家 1 月 5 日消息,一加手机官方今日宣布,一加 Turbo 6 系列新机将配备 9000m...
格力承诺家用空调不涨价 暂无“... 【太平洋科技快讯】1 月 5 日消息,格力电器通过官方公众号“格力文传”发文表示,近期,公司陆续收到...
齐翔腾达自主研发顺酐催化剂 来源:市场资讯 (来源:中化新网) 中化新网讯 近日,齐翔腾达自主开发的“正丁烷氧化制顺酐催化剂的研...
盘点全球融资超1亿美元的聚变能... 在过去几年中,核聚变发电技术已从饱受质疑——总是说还需要十年!——转变为一项越来越具体和诱人的技术,...