微信公众号自动回复功能开发

本篇主要讲解 微信公众号自动回复功能开发,让我们自己去托管公众号回复的功能,这样可以更加灵活的根据公众号收到的信息来制定特定的回复信息,一起来了解吧!

1.注册公众号

如果你从来没创建过请先注册 微信公众平台

请选择订阅号,然后填写一些基本信息即可 ,具体注册流程这里就展开说了。

注意 邮箱作为登录帐号,请填写未被微信公众平台注册,未被微信开放平台注册,未被个人微信号绑定的邮箱 建议直接注册一个新邮箱使用

2.微信托管自动回复功能

微信提供了自动回复功能,也就是直接在微信上配置

分别提供了3种配置 1.关键词回复 2.收到消息回复 3.被关注回复

使用方法很简单 只需要在对应的回复类型上面配置即可 这里不做详细说明

3.自己开发服务托管自动回复功能

本篇重点讲解自己去托管自动回复功能,微信只做转发

3.1 关闭微信的自动回复功能

要想自己托管自动回复功能首先要讲微信的自动回复功能关闭 关闭方式如下

3.2 开发者中心配置托管的服务器信息

在开始服务器端开发之前,我先介绍一个natapp 内网穿透工具,有了它你可以直接将其本地映射一个地址配置到该URL地址上面,那么方便你调试 具体关于natapp的使用 请看我另一篇博客 natapp 内网穿透工具

主要配置URL地址 和Token信息 EncodingAESKey 可以随机生成

3.3 服务端开发(验证消息来来自微信服务器)

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

    参数    描述signature    微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。timestamp    时间戳nonce        随机数echostr        随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

      1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

你也可以简单粗暴的直接返回echostr 我暂时就是这样做的

    /*** 微信成为开发者 接口* @param signature : 签名* @param timestamp : 时间戳* @param nonce     : 随机数* @param echostr   : 随机字符串* @return*/@GetMapping("/authorize")public String authorize(@RequestParam("signature") String signature,@RequestParam("timestamp") Long timestamp,@RequestParam("nonce") String nonce,@RequestParam("echostr") String echostr) {log.info("【signature:{}】", signature);log.info("【timestamp:{}】", timestamp);log.info("【nonce:{}】", nonce);log.info("【echostr:{}】", echostr);return echostr;}

在上图中点击提交微信会发送请求到该接口 只要该接口正确返回了echostr,微信公众号管理平台就会如下显示 提交成功

微信验证 开发者成功后点击 启用 服务器配置信息

3.4 服务器端开发 (接收消息)

附上微信关于消息的开发文档 微信公众平台开发文档

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,也就是你刚刚配置的验证接口的URL地址,只不过是POST方式提交,所以你需要写一个POST接口

文本消息:

    <xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content><MsgId>1234567890123456</MsgId></xml>

     参数            描述ToUserName    开发者微信号FromUserName    发送方帐号(一个OpenID)CreateTime    消息创建时间 (整型)MsgType    消息类型,文本为textContent    文本消息内容MsgId

接受到的消息格式:

封装接收微信消息的实体

这里我使用了 XStream 来解析XML 它非常好用,不了解的自行百度 后期可能会写一篇关于XStream的用法

    @Data@XStreamAlias("xml")public class WxXmlData implements Serializable {@XStreamAlias("ToUserName")private String toUserName;@XStreamAlias("FromUserName")private String fromUserName;@XStreamAlias("CreateTime")private Long createTime;@XStreamAlias("MsgType")private String msgType;@XStreamAlias("Content")private String content;@XStreamAlias("MsgId")private String msgId;//@XStreamAlias("Title")private String title;@XStreamAlias("Description")private String description;@XStreamAlias("Url")private String url;/*** 订阅或者取消订阅的事件*/@XStreamAlias("Event")private String event;@XStreamAlias("EventKey")private String eventkey;}

从InputStream流中读取到xml字符串(inputstream从 post接口的 request.getInputStream()获取),然后通过XStream解析到封装的实体对象WxXmlData中

    @Overridepublic WxXmlData resolveXmlData(InputStream in) throws IOException {String xmlData = FileUtils.getInputToString(in);log.info("【receive  xmlData str : {}】", xmlData);WxXmlData wxXmlData = null;try {XStream xstream = new XStream();//这个必须要加 不然无法转换成WxXmlData对象xstream.setClassLoader(WxXmlData.class.getClassLoader());xstream.processAnnotations(WxXmlData.class);xstream.alias("xml", WxXmlData.class);wxXmlData = (WxXmlData) xstream.fromXML(xmlData);log.info("【wxXmlData: {}】 ", wxXmlData);} catch (Exception e) {log.error("【error】{}", e.getMessage());}return wxXmlData;}

编写自动回复接口,这里有判断 event,如果是订阅可以做相应的回复,如果是 普通消息可以做相应的回复等等。。具体怎么实现回复逻辑看你自己的需求

注意:你的回复的人是 发送给你消息的人

       @Overridepublic String autoResponse(WxXmlData wxData) {

    WxXmlData resultXmlData = new WxXmlData();resultXmlData.setToUserName(wxData.getFromUserName());  //收到的消息是谁发来的再发给谁resultXmlData.setFromUserName(wxData.getToUserName());  //if (!StringUtils.isEmpty(wxData.getEvent())) {if (WxSubscribeEnum.SUBSCRIBE.getValue().equals(wxData.getEvent())) {resultXmlData.setMsgType("text");resultXmlData.setCreateTime(System.currentTimeMillis());resultXmlData.setContent("欢迎来到Johnny屋,本公众号会定期更新技术干货,愿与 读者共同成长。nn" +"-<a href="https://www.askajohnny.com">我的博客(建议PC端打开,移动端适配正在紧张开发中)</a>");}} else if(wxData.getContent().equalsIgnoreCase("vip")){resultXmlData.setMsgType("text");resultXmlData.setCreateTime(System.currentTimeMillis());resultXmlData.setContent("<a href="https://my.openwrite.cn/code/generate?blogId=18931-1576559666626-322">点击该链接,获取博客解锁验证码</a>");} else {resultXmlData.setMsgType("text");resultXmlData.setCreateTime(System.currentTimeMillis());resultXmlData.setContent("公众号正在开发中。后期请多多关注!");}XStream xstream = new XStream();xstream.processAnnotations(WxXmlData.class);xstream.setClassLoader(WxXmlData.class.getClassLoader()); return xstream.toXML(resultXmlData);  //XStream的方法,直接将对象转换成 xml数据

效果如下:

4.总结

本篇主要讲解微信公众号自动回复功能的开发,实现自己托管消息回复,能够更加灵活的根据不同的消息进行回复,主要就是对XML的报文解析并且发送对应的报文即可,后期可能会有其他关于微信公众号开发的文章包括 自定义菜单 等等 多多关注

个人博客系统 https://www.askajohnny.com欢迎访问!
本文由博客一文多发平台 OpenWrite 发布!

微信 SHA1 签名_微信公众号自动回复功能开发相关推荐

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

    一 实先自动回复功能的逻辑步骤 1 处理POST类型的控制逻辑,接收XML的数据包: 2 解析XML数据包(获得数据包的消息类型或者是事件类型): 3 拼装我们定义好的消息: 4 包装成XML格式: ...

  2. 微信公众号自动回复功能

    微信公众号自动回复功能分为两种,一种自主开发,一种利用公众号自动开发,两种不可兼容,开发状态的自动回复功能,将导致编辑状态下的菜单,自动回复失效. WeixinchatController代码:  这 ...

  3. 微信公众号自动回复功能如何设置带链接的文字

    为了满足微信公众号自动回复功能设置带链接的文字,第三方平台微号帮提供了粉丝对话定时推送功能实现,帮助公众号在线设置自动回复消息,消息内容可以插入带链接的文字,粉丝点击链接可以进入小程序.h5页面.小游 ...

  4. 搭建公众号自动回复功能

    程序员爱炫技,写个公众号文章,都想拿点技术整整[自动回复]:程序员爱偷懒,什么都想做个[自动化],最好所有事情系统都给做了,点点手指头就能达到目标. 今天的主角是如何搭建一个公众号自动回复功能.整个流 ...

  5. 微信 SHA1 签名_个性签名设计制作,多种样式免费一键设计

    在日常生活中我们经常能用到签名,比如证件.填表签字之类的.这时候如果我们的签名不太好看,可就未免就会有些尴尬了.如果签个帅气的名字,肯定有助于增加自己的魅力哦~ 今天"芒果头像社" ...

  6. node(koa)完成微信公众号自动回复功能

    首先需要在微信公众平台 - 基础设置 - 设置服务器地址 配置服务器地址时可能出现"参数错误,...."的情况,可能是因为域名被拦截,不能使用. 如果前端人员进行测试,可以使用ng ...

  7. 微信公众号硬件功能开发

    设备功能 在"设备功能"处添加产品,接入方案选择"平台基础接入方案" 添加成功后,就有100个配额 服务器配置 URL是后台回调接口地址,Token是为了验证回 ...

  8. 微信公众号分享功能开发体验

    公众号提供了一个分享功能,通过jsapi来访问,主要作用是修改特定页面下点击微信右上角[...]选择[转发给朋友][分享到朋友圈]以及[分享到手机QQ][分享到QQ空间]的内容. 分享到微信的操作步骤 ...

  9. php微信生成签名_微信APP支付服务端PHP生成签名

    官网支付说明 商户系统和微信支付系统主要交互说明: 步骤1:用户在商户APP中选择商品,提交订单,选择微信支付. 步骤2:商户后台收到用户支付单,调用微信支付统一下单接口.参见[统一下单API]. 步 ...

最新文章

  1. Zoom Capability
  2. 今天来说一下我的SAMC
  3. Unity上使用Linq To XML
  4. Java培训分享void的用法和意义
  5. 麦克风增强软件_唱吧麦克风不会唱歌用它唱都好听,《向往的生活》同款麦克风...
  6. mysql基本命令总结
  7. 演示:各种网络安全设备、***设备向微软证书服务器申请证书
  8. 江苏新一代物联网全省商用 全省信号覆盖率达97.5%
  9. apche的log4j.properties和log4j2.xml的配置和使用
  10. Nginx-浅析(转)
  11. matlab怎么绘制零极点,matlab中画系统零极点的方法
  12. 洛谷P1873 [COCI 2011/2012 #5] EKO / 砍树(二分法)
  13. Python计算标准差和方差
  14. linux mysql编译参数,Mysql 编译参数详解
  15. CentOS Linux 内核升级
  16. 肉价再次上涨 国家宏观调控成效遭受市场考验(转)
  17. 2019软件测试工程师面试题集锦
  18. 中国制药设备行业销售现状及竞争策略建议报告2022-2027年版
  19. android 黑马 模拟器,HBuilder调试夜神安卓模拟器方法
  20. GPS与GPRS区别

热门文章

  1. Docker学习笔记(2)--Docker常用命令
  2. Unity笔记之Unity读取/写入Excel
  3. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)...
  4. app读写照片和文件_App 偷看手机照片文件 25000 次,你要干什么?
  5. 内网渗透思路10之SPN拿下域控
  6. IntelliJ IDEA 日常使用介绍
  7. 蓝桥杯试题 数列排序
  8. 车载以太网之SomeIP协议
  9. Qt之调用FFTW3实现音频频谱(实现)
  10. Linux 基本使用和 web 程序部署