公众号开发——自动回复功能
步骤
- 编写公众号接口程序–采用SpringBoot编写
- 部署程序
- 申请公众号和配置公众号
- 参考资料
编写公众号接口程序
公众号官方接口说明
- 验证服务器配置是否正确接口
- 接受文本信息接口
编写程序接口
- 验证服务器配置是否正确接口
@GetMapping("/gong")public void getGong(HttpServletRequest request , HttpServletResponse response){// 微信加密签名String signature = request.getParameter("signature");// 时间戳String timestamp = request.getParameter("timestamp");// 随机数String nonce = request.getParameter("nonce");// 随机字符串String echostr = request.getParameter("echostr");List<String> params = new ArrayList<String>();params.add("english");params.add(timestamp);params.add(nonce);// 1. 将token、timestamp、nonce三个参数进行字典序排序Collections.sort(params, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {return o1.compareTo(o2);}});// 2. 将三个参数字符串拼接成一个字符串进行sha1加密Digester sha1 = new Digester(DigestAlgorithm.SHA1);String temp = sha1.digestHex(params.get(0) + params.get(1) + params.get(2));if (temp.equals(signature)) {try {response.getWriter().write(echostr);} catch (IOException e) {e.printStackTrace();}}}
- 接受文本信息接口
@PostMapping("/gong")public void postGong(HttpServletRequest request, HttpServletResponse response) throws IOException {// 解决乱码request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");// 处理接收消息ServletInputStream in = request.getInputStream();// 将流转换为字符串StringBuilder xmlMsg = new StringBuilder();byte[] b = new byte[4096];for (int n; (n = in.read(b)) != -1;) {xmlMsg.append(new String(b, 0, n, "UTF-8"));}// 将POST流转换为XStream对象XStream xs = new XStream();xs.processAnnotations(TencentVO.class);// 将xml内容转换为InputMessage对象,![CDATA[]]会自动被去掉TencentVO tencentVO = (TencentVO) xs.fromXML(xmlMsg.toString());// 服务端String servername = tencentVO.getToUserName();// 客户端String custermname = tencentVO.getFromUserName();// 接收时间long createTime = tencentVO.getCreateTime();// 返回时间Long returnTime = Calendar.getInstance().getTimeInMillis() / 1000;// 取得消息类型String msgType = tencentVO.getMsgType();// 根据消息类型获取对应的消息内容if (msgType.equals("text")) {StringBuffer str = new StringBuffer();str.append("<xml>");str.append("<ToUserName><![CDATA[" + custermname + "]]></ToUserName>");str.append("<FromUserName><![CDATA[" + servername + "]]></FromUserName>");str.append("<CreateTime>" + returnTime + "</CreateTime>");str.append("<MsgType><![CDATA[" + msgType + "]]></MsgType>");// 回复信息String outContent = "欢迎访问我的公众号";str.append("<Content><![CDATA[" + outContent + "]]></Content>");str.append("</xml>");response.getWriter().write(str.toString());} else {StringBuffer str = new StringBuffer();str.append("<xml>");str.append("<ToUserName><![CDATA[" + custermname + "]]></ToUserName>");str.append("<FromUserName><![CDATA[" + servername + "]]></FromUserName>");str.append("<CreateTime>" + returnTime + "</CreateTime>");str.append("<MsgType><![CDATA[" + msgType + "]]></MsgType>");str.append("<Content><![CDATA[" + "不支持的多媒体" + "]]></Content>");str.append("</xml>");response.getWriter().write(str.toString());}}}@XStreamAlias("xml")
class TencentVO implements Serializable {private static final long serialVersionUID = 1L;@XStreamAlias("ToUserName")private String ToUserName;@XStreamAlias("FromUserName")private String FromUserName;@XStreamAlias("CreateTime")private Long CreateTime;@XStreamAlias("MsgType")private String MsgType = "text";@XStreamAlias("MsgId")private Long MsgId;// 文本消息@XStreamAlias("Content")private String Content;public String getToUserName() {return ToUserName;}public void setToUserName(String toUserName) {ToUserName = toUserName;}public String getFromUserName() {return FromUserName;}public void setFromUserName(String fromUserName) {FromUserName = fromUserName;}public Long getCreateTime() {return CreateTime;}public void setCreateTime(Long createTime) {CreateTime = createTime;}public String getMsgType() {return MsgType;}public void setMsgType(String msgType) {MsgType = msgType;}public Long getMsgId() {return MsgId;}public void setMsgId(Long msgId) {MsgId = msgId;}public String getContent() {return Content;}public void setContent(String content) {Content = content;}@Overridepublic String toString() {return "TencentVO{" +"ToUserName='" + ToUserName + '\'' +", FromUserName='" + FromUserName + '\'' +", CreateTime=" + CreateTime +", MsgType='" + MsgType + '\'' +", MsgId=" + MsgId +", Content='" + Content + '\'' +'}';}
}
部署程序
我是购买阿里云的云服务器来部署,然后操作系统是centos7,使用springboot自带的tomcat部署
申请公共号和公众号配置
公众号配置
注意:端口号只能是80和443
参考资料
公众号
xstream
hutool的sha1加密
公众号开发——自动回复功能相关推荐
- 微信公众号开发自动回复的Python库——werobot
werobot 再说werobot这个库,这个库是我最近在做微信公众号开发的时候找到的.这个库封装了微信公众号的很多接口.通过这个库你可以很容易的给订阅你公众号的粉丝发送消息.推送图文.跟粉丝互动. ...
- python调用图灵机器人实现微信公众号的自动回复功能
刚刚创建这个公众号的时候,我的一个同事就找我的公众号聊天,但是那个时候我的公众号还是仅支持根据关键词,如果要做到支持智能回复,那基本上就是不可能.然后我结合我之前做的微信自动回复机器人的经历,我首 ...
- php 微信公众号开发-自动回复之标梵分享
今天我们再切换回php.使用php脚本完成公众号自动恢复的功能. 在开发之前需要先申请公众号,个人只能申请订阅号. 申请完毕之后,需要启用服务器配置,不需要开启开发者设置的.是的这个功能只需要开启服务 ...
- python微信公众号开发音乐功能_python利用微信公众号实现报警功能
python利用微信公众号实现报警功能 发布时间:2020-09-23 09:54:05 来源:脚本之家 阅读:84 作者:Python火火 微信公众号共有三种,服务号.订阅号.企业号.它们在获取Ac ...
- 微信公众号开发相关功能
1.controller代码 @Controller @RequestMapping("/wechat/platform") public class WechatControll ...
- 关注微信公众号实现自动回复功能
接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.创建CoreServlet文件 package com.jlc.action; import java.io.IOExcep ...
- 手把手教你如何微信公众号开发“翻译功能
翻译,我想这个功能已经很常见了,而且很多地方都有实现了,另外,不只是翻译功能,还可以是语音翻译等等,这些都是可以实现的,所以,写这篇文章,主要是介绍如何将公开的接口进行实际的使用..授人以鱼不如授人以 ...
- 微信公众号开发java版-消息回复(普通文字消息和语音消息)
本文介绍微信公众号消息自动回复功能的开发,开发语言 java话不多说,直接上代码 1.控制器代码 package webapp.controller;import org.springframewor ...
- 微信公众号 开发详解02【自动回复、发布文章、自定义菜单、3种链接跳转】
[微信公众号--零基础全面系统教学] [P01-P07]微信公众号 开发详解01[目的.起名.准备工作.注册流程.后台功能] [P08-P12]微信公众号 开发详解02[自动回复.发布文章.自定义菜单 ...
最新文章
- python怎么添加列_如何将列添加到DataFrame列?添加新列详细解释————
- MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题
- 201521123121 《Java程序设计》第14周学习总结
- 5 操作系统第二章 进程管理 线程介绍
- GDB调试带参数argc argv的程序
- IOS打开pdf文件
- [转]SREng扫描报告分析
- java.lang.ClassNotFoundException: org.apache.hive.service.cli.thrift.TCLIService$Iface
- 通过GetVersionEx获取Win10版本号
- oel 7.0 安装 mysql 5_MySQL 5.7.21 在 OEL6.9 平台上的二进制安装
- 关于面试技巧和简历写法的一些总结
- OpenHarmony 简介:使用鸿蒙操作系统,开发者能做的是啥呢,学习NodJS,可以开发应用了。后续慢慢学习,赶紧去加星星。
- http 301 302 303 307 308 傻傻分不清
- 新硬盘装机出现Disk Read Error解决方案
- ROS2+nav2+激光雷达导航(上)
- Pytorch中的torch.where函数
- 大华网络摄像头通过gstreamer 获取不到RTSP流
- UVM:3.4.1 设置打印信息的冗余度阈值
- 基于Multisim的自动售货的电路课程设计
- 最长回文子串(C语言)