目录
引言
我相信百分之99的程序员都遇到过这么个场景,关注的公众号,回复诸如python,返回下载地址的消息。如下图:
实现方案
我们先来看一下具体的流程,首先是微信客户端发送消息到微信服务器,微信服务器在将消息转发到我们的服务器,然后,我们的服务器根据关键字处理消息,返回微信所需的数据格式封装数据,返回给微信服务器,微信服务器再将消息推送到微信客户端
这就是大致的实现流程及细节。
公众号后台信息配置
我们在开发的时候,一定要配置我们的服务器与微信服务器完成通信
在微信公众号后台中,选择 设置与开发,然后点击下方的基本配置,进入后在右侧服务器配置处对我们的服务器地址(URL)、令牌(Token)、消息加解密密钥(EncodingAESKey)、消息加解密方式进行配置
上述的配置完成后,我们对上面的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练习生》
这篇文章因为文字段被标记为质量低,以下文字就是为了打破它的文字段而造成的质量低!
相信和我一样遇到这个问题的的小伙伴们,心里也已经暗自问候了这个产品经理的祖总十八代了吧!
算法实在是不敢苟同,文字的长短和文章的质量有毛线的关系吗?