微信公众号——回复关键字准备工作

249 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情

引言

我相信百分之99的程序员都遇到过这么个场景,关注的公众号,回复诸如python,返回下载地址的消息。如下图:

image.png

实现方案

我们先来看一下具体的流程,首先是微信客户端发送消息到微信服务器,微信服务器在将消息转发到我们的服务器,然后,我们的服务器根据关键字处理消息,返回微信所需的数据格式封装数据,返回给微信服务器,微信服务器再将消息推送到微信客户端

这就是大致的实现流程及细节。

公众号后台信息配置

我们在开发的时候,一定要配置我们的服务器与微信服务器完成通信

在微信公众号后台中,选择 设置与开发,然后点击下方的基本配置,进入后在右侧服务器配置处对我们的服务器地址(URL)、令牌(Token)、消息加解密密钥(EncodingAESKey)、消息加解密方式进行配置

image.png

上述的配置完成后,我们对上面的URL开发两个接口:

1)、GET请求的接口,用来对服务器有效性的验证

protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

   //微信加密签名
   String signature=req.getParameter("signature");
   //时间戳
   String timestamp=req.getParameter("timestamp");
   //随机数
   String nonce=req.getParameter("nonce");
   //随即字符串
   String echostr=req.getParameter("echostr");
   
   PrintWriter out=resp.getWriter();//得到流
   //通过验证signature对请求进行校验,若成功则原封不动的返回echose,既连接成功,否则连接失败
   
   if(SignUtil.checkSingnature(signature, timestamp, nonce)){
      out.print(echostr);
      
   }
   if(out != null){
      
      out.close();
   }
   out=null;
   
}

2)、POST请求的接口,用来接收微信服务器发送过来的消息。(微信服务器的消息全部是post请求过来的)

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    // 将请求、响应的编码均设置为UTF-8(防止中文乱码)  
       req.setCharacterEncoding("UTF-8");  
       resp.setCharacterEncoding("UTF-8");  
 
       // 调用核心业务类接收消息、处理消息  
       String respMessage = CoreService.processRequest(req);  
         
       // 响应消息  
       PrintWriter out = resp.getWriter();  
       out.print(respMessage);  
       out.close();  
}

好了,今天关键字回复的准备工作就完成了,欢迎大家留言交流。

也欢迎大家关注我的公众号《coder练习生》