本文为小编原创文章,首发于Java知识堂,高度原创,极具收藏价值的微信微信官方账号有干货,共同成长,共同进步,欢迎关注。
源码GitHub地址:https://github.com/erlieStar/weChat
如果不需要定制服务,就推送一些文章,不需要自己开发服务器。第1步和第4步就足够了。
本地测试下载ngrok,解决外网访问内网问题LZ用的是Sunny-Ngrok。
下载地址:https://www.ngrok.cc/
LZ下载了Win 64Bit版本,看了作者写的博客,建的。
http://www.sunnyos.com/article-show-71.html
这样我就把本地地址映射到http://erlie.free.ngok.cc。
但是,中国人的诚意牌,果断用了另一个https://ngrok.com/.
教程地址:https://jingyan . Baidu . com/article/f 00622826 C2 bcfbd 3 f 0 c 885 . html
Ngrok http 80 输入软件所在的路径,在命令行运行上述命令,这样就可以将一个外网地址映射到一个内网,但是每次重启时域名都会发生变化。
创建测试账号地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox? t =沙盒/登录
后面会用到AppID和appsecret。
url的内容是http://erlie.free.ngrok.cc/server/system,,其中/server/system是接口名称。因为这是一个Spring Boot项目,所以没有必要写项目名称。token是随便写的,主要用于验证。这时候点击提交显示配置失败,因为你要启动本地服务,让微信完成验证。
这是一份官方证明:
https://mp.weixin.qq.com/wiki? t =资源/RES _ main & amp;id=mp1421135319
打开本地服务并单击提交以成功。
框架结构
api中有三个类,AccessTokenApi(获取令牌)、IdAndSecretApi(保存appId和appSecret)和MenuApi(菜单管理)。LZ只写创建菜单的功能。查询、删除可以根据自己的需要编写)
bean中的1个类持有令牌。
控制器中有一个类是与微信交互的接口。
处理程序中有四个类:EventTypes、MsgTypes、MsgHandler和DefaultHandler。
msg中有类型3的类,事件包是事件类型,in是接收消息的类型,out是发送消息的类型。
Ui封装了菜单类和各种按钮类。
util中有三个类,CheckUtil(微信验证的类),ResponseUtil(发送get和post的类)和xmlUtil(将XML转换成map的帮助类)。
MenuManager是由ui包中的各种图形控件组成的界面。
整体思路类的继承关系如图所示。接收的消息和发送的消息都继承了一个基类,便于消息的统一处理。
将接收到xml文件统一转换成映射,根据MsgHandler中的类型判断数据属于哪种类型,用映射构造这个消息类型,即工厂模式。并且各种消息的处理交给各种抽象函数,而DefaultHandler实现各种消息的处理。
消息构造完成后,将xml文件发送到微信公众平台。我知道有两种方法来处理它。一种方法是使用XStream库将java对象转换成xml类型。这样每次都要获取新对象,比较麻烦。我没有使用这个方法,而是重写了toString()函数,这样每次发送消息时,父类都可以调用toString()函数,如下所示。但是,它对图形消息的类型不太友好。用LZ。
地址如下:https://mp.weixin.qq.com/debug/,你可以检查返回的数据是否正确。