步骤

  1. 编写公众号接口程序–采用SpringBoot编写
  2. 部署程序
  3. 申请公众号和配置公众号
  4. 参考资料

编写公众号接口程序

公众号官方接口说明

  1. 验证服务器配置是否正确接口
  2. 接受文本信息接口

编写程序接口

  1. 验证服务器配置是否正确接口
    @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();}}}
  1. 接受文本信息接口
 @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加密

公众号开发——自动回复功能相关推荐

  1. 微信公众号开发自动回复的Python库——werobot

    werobot 再说werobot这个库,这个库是我最近在做微信公众号开发的时候找到的.这个库封装了微信公众号的很多接口.通过这个库你可以很容易的给订阅你公众号的粉丝发送消息.推送图文.跟粉丝互动. ...

  2. python调用图灵机器人实现微信公众号的自动回复功能

    ​ 刚刚创建这个公众号的时候,我的一个同事就找我的公众号聊天,但是那个时候我的公众号还是仅支持根据关键词,如果要做到支持智能回复,那基本上就是不可能.然后我结合我之前做的微信自动回复机器人的经历,我首 ...

  3. php 微信公众号开发-自动回复之标梵分享

    今天我们再切换回php.使用php脚本完成公众号自动恢复的功能. 在开发之前需要先申请公众号,个人只能申请订阅号. 申请完毕之后,需要启用服务器配置,不需要开启开发者设置的.是的这个功能只需要开启服务 ...

  4. python微信公众号开发音乐功能_python利用微信公众号实现报警功能

    python利用微信公众号实现报警功能 发布时间:2020-09-23 09:54:05 来源:脚本之家 阅读:84 作者:Python火火 微信公众号共有三种,服务号.订阅号.企业号.它们在获取Ac ...

  5. 微信公众号开发相关功能

    1.controller代码 @Controller @RequestMapping("/wechat/platform") public class WechatControll ...

  6. 关注微信公众号实现自动回复功能

    接入微信公众平台开发,开发者需要按照如下步骤完成: 1.填写服务器配置 2.创建CoreServlet文件 package com.jlc.action; import java.io.IOExcep ...

  7. 手把手教你如何微信公众号开发“翻译功能

    翻译,我想这个功能已经很常见了,而且很多地方都有实现了,另外,不只是翻译功能,还可以是语音翻译等等,这些都是可以实现的,所以,写这篇文章,主要是介绍如何将公开的接口进行实际的使用..授人以鱼不如授人以 ...

  8. 微信公众号开发java版-消息回复(普通文字消息和语音消息)

    本文介绍微信公众号消息自动回复功能的开发,开发语言 java话不多说,直接上代码 1.控制器代码 package webapp.controller;import org.springframewor ...

  9. 微信公众号 开发详解02【自动回复、发布文章、自定义菜单、3种链接跳转】

    [微信公众号--零基础全面系统教学] [P01-P07]微信公众号 开发详解01[目的.起名.准备工作.注册流程.后台功能] [P08-P12]微信公众号 开发详解02[自动回复.发布文章.自定义菜单 ...

最新文章

  1. python怎么添加列_如何将列添加到DataFrame列?添加新列详细解释————
  2. MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题
  3. 201521123121 《Java程序设计》第14周学习总结
  4. 5 操作系统第二章 进程管理 线程介绍
  5. GDB调试带参数argc argv的程序
  6. IOS打开pdf文件
  7. [转]SREng扫描报告分析
  8. java.lang.ClassNotFoundException: org.apache.hive.service.cli.thrift.TCLIService$Iface
  9. 通过GetVersionEx获取Win10版本号
  10. oel 7.0 安装 mysql 5_MySQL 5.7.21 在 OEL6.9 平台上的二进制安装
  11. 关于面试技巧和简历写法的一些总结
  12. OpenHarmony 简介:使用鸿蒙操作系统,开发者能做的是啥呢,学习NodJS,可以开发应用了。后续慢慢学习,赶紧去加星星。
  13. http 301 302 303 307 308 傻傻分不清
  14. 新硬盘装机出现Disk Read Error解决方案
  15. ROS2+nav2+激光雷达导航(上)
  16. Pytorch中的torch.where函数
  17. 大华网络摄像头通过gstreamer 获取不到RTSP流
  18. UVM:3.4.1 设置打印信息的冗余度阈值
  19. 基于Multisim的自动售货的电路课程设计
  20. 最长回文子串(C语言)

热门文章

  1. Android 自定义圆形进度条(圆环刻度)View
  2. 海康萤石摄像头本地局域网拉流保存
  3. 机械设备制造企业,如何借助ERP系统做好委外加工管理?
  4. 安卓开发者中心!那些BAT大厂的Android面试官到底在想些什么?持续更新中
  5. VBA调用Shell
  6. JAVA实现闯关小游戏(一)
  7. Docker安装Jenkins
  8. 纪念 Dan Kohn 先生
  9. 关于拨号上网的几种错误解决办法
  10. The Log: What every software engineer should know about real-time data's unifying abstraction