Java设置接收企业微信消息服务器URL

企业微信的接收消息服务器的程序用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)

<dependency>
  <groupId>org.json</groupId>
  <artifactId>json</artifactId>
  <version>20200518</version>
</dependency>

<dependency>
  <groupId>commons-codec</groupId>
  <artifactId>commons-codec</artifactId>
  <version>1.9</version>
</dependency>

<dependency>
  <groupId>org.gavaghan</groupId>
  <artifactId>geodesy</artifactId>
  <version>1.1.3</version>
</dependency>

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 后面的地址,就是代理后的地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值