微信公众号后台开发总结
2018年03月19日 17:24:10 阅读数:3059更多
个人分类: 微信公众号开发SpringMaven服务器配置(URL)
微信公众号后台开发总结
一、项目简介
当前需要做一个公众号后台,前期需要实现的功能有:
(1) 在用户关注公众号时便获取用户的信息同时还要将用户信息存入数据库。
(2) 在用户给公众号发送消息时,后台能够对消息的类型进行识别同时进行回复。
从要实现的功能数量上来讲,这的确很少,但是却牵涉到很多的东西,包括后台开发环境的搭建(使用的框架、数据库选择、服务器、前端页面的选择)、公众号后台与微信官方的后台的对接(里面牵涉到很多的配置需要注意),有特别是微信官方给的官方文档里面讲的很粗略,很多细节没有提到,只能自己去查找相关的资料,实例代码还竟然全部都是PHP的,对于一个一直使用JAVA做开发并且还是第一次接触微信公众号后台开的我来说真是雪上加霜,在这中间遇到很多的困难,掉过很多的坑,不过最终庆幸的是把功能都做出来,下面我就分两个部分介绍一下两个功能实现的步骤以及一些注意事项,希望能够帮到以后需要做微信公众号后台的人。
二、微信后台开发
第一个部分、公众号后台实现消息自动回复
1、 后台开发环境搭建介绍
由于之前使用SSM做过相关的后台开发,所以本次仍然使用SSM框架,数据库方面之前一直用Mysql,相对熟悉就用Mysql(期间有尝试过Oracle但是在安装Plsql时一直没有成功过,后面就放弃了),服务器方面使用了Tomcat 服务器,它是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。
开发平台使用了IDEA,IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主,它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等,免费版只支持Java等少数语言。我使用的是IDEA2017.2.5版本,网上可以找到相关的破解方法,不过这款工具的确好用,之前一直用Myeclipse,但在一次实习中公司要求使用IDEA,在那次实习期间深切的体会到该软件的强大,又特别时期强大的提示功能。
关于在IDEA上搭建开发环境我使用了Maven,具体的搭建过程就不多说了,网上已经有很多成熟的资料。下面就开始进行微信的后台开发流程。
2、 微信后台开发的流程
在本次微信后台的开发过程中,我没有先在微信公众号的官网上申请一个微信公众号测试号,而是先进行了后台系统的搭建和开发,我先将所需要的实体类、工具类、Controller类、持久层的类和相应的SQl语句的代码编写好编译成功之后才申请的公众号账号进行测试。现在我从申请公众号以及公众号的配置到后台的测试进行说明。
(1)申请账号:首先通过微信公众号官网申请公众号账号,微信公众号有服务号、企业号和订阅号他们之间相应的区别已经申请流程大家可以自己在网上查阅,他家可以根据自己的需求来申请相应类型的公众号,本次我申请的是服务号。
(2)服务器配置:在申请完毕公众号后我们开始进入开发者模式,登录账号进入你的微信公众号管理页面,下拉到底点击基本配置。
图1
如上图所示你需要启用服务器配置,你需要做的就是天蝎服务器地址(URL)和令牌(Token),下面的消息加解密匙可以自动生成,主要还是上面两个的配置,令牌(Token)这个是在后台的程序中自己设定的,你后台怎么设置的这个就怎么设置,不过它的格式有相应的要求,需要符合要求才行。关于服务器地址(URL)需要多说一点,该URL必须是要在公网中能够访问得到的URL,并且只支持80端口,我们平时在自己的电脑上做开发都是用的内网,所以你的URL只能在内网上访问,而外网无法访问;在这个地方也是花了很多时间才得以解决这个问题,在上网查阅资料的过程中有人推荐使用花生壳进行内网映射,于是我就进行尝试,不过没能成功,然后又看到使用nat123可以进行内网映射,然后又进行尝试,终于是成功了;它的具体做法是:下载nat123然后注册用户,(具体的购买操作就不说明了,费用很合理)然后添加映射选择80(http)栏。
图2
图3
如图所示是添加映射的界面,你需要给自己应用去一个名字,内网的端口号8080,内网地址我填写了localhost,这样方便,免得换一个网络环境后又需要修改,建议填写localhost,外网的域名nat123会自动给你分配一个,如果你有自己的外网域名也可以使用,然后点击确认保存即可,需要注意的是:在每次关闭电脑后,下一次启动项目要使用该映射时,必须再一次打开nat123,然后映射才能启用。
服务器配置告一段落,还有公众号信息的一点东西需要注意:公众号的AppID在申请公众号后便生成了,但是开发者密匙和IP白名单还没有,开发者密匙需要根据提示获得,并且微信不负责存储该密匙,需要自己做相应的保存,IP白名单后面再详细说它;微信端的配置基本结束,下面我们开始来看一看后台。
图4
(3)后台开发:在后台开发前,再先说一说微信端的服务器地址(URL),在微信端与后台连接成功后,用户在微信端的关注、取消关注、发送语音、发送文字以及图片等消息,微信都会讲这些消息推送给这个URL地址,后台再根据具体的消息类型进行处理。
首先:打通微信与后台
刚刚说了在移动端,用户的各种消息以及关注事件微信都会通过服务器地址(URL)推送给后台,所以打通微信与后台该URL很是关键,但在URL配置正确后,还需要知道以下:微信与后台的第一次连接有一个验证过程,该加密验证流程如下:
<1> 将token、timestamp、nonce三个参数进行字典序排序
<2> 将三个参数字符串拼接成一个字符串进行SHA1加密
<3> 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
图5
图五中的代码便是验证身份的代码,其中一些具体的方法在网上都能找到就补贴出来了;验证通过后会在控制台上打印出“连接微信公众号平台测试成功”的字样。自此,微信端到后台的通道就打开了,这样用户的信息以及关注、取消关注时间就能被推送到后台了,我们就开始处理这些消息。
然后:处理微信推送过来的用户消息
(1)我们需要一个微信消息基类BaseWechatMessage,该类包含了消息的发送者微信号ToUserName、发送发账号(一个OpenID)FromUserName、消息创建时间(整形)CreateTime、消息类型MsgType。
(2)还需要一个消息的实体类TextMessage,该类继承微信消息基类,该消息实体类包含一个成员变量Content,指的是消息的内容。然后还需要一些其他的工具类,我就不列出来了。
注:微信端推送过来的用户消息或事件是通过POST的方式请求过来的,验证使用的get的请求方式。
图6
用户的消息过来后会被拦截到该Controller中进行处理,会根据不同的消息的类型进行相应的解析,下面是processRequest方法部分代码截图,当消息为文本消息时,
后台将会向用户发送"Welcome to WeChat!"。
图7
需要再说明一点的是:微信推送过来的文本消息格式如下:
<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>
需要在后台将XML中的信息提取出来。而回复消息的时候则要将信息封装到该格式的XML中。
图8
功夫不负有心人,终于在我的不懈努力之下,初见成效;今天就到这儿,下次接着说怎样获取用户信息并存入数据库