概述
官网是最好的文档来源。
一、明确结构
首先,需要搞清楚三个实体:
- 微信服务器
- 我的服务器
- 用户
这三个实体之间的关系如下所示:微信服务器相当于一个代理、一个中转站。
一旦明确了三者之间的关系,其它问题就变得自然而然了:
- 微信服务器和我的服务器之间如何进行数据交换?
以什么样的格式进行通信?XML、JSON等格式 - 微信服务器怎么知道我的服务器在哪里?
即如何通过微信公众号绑定我的服务器? - 如何保证安全性?
为了防止别人冒充我的服务器,我的服务器跟微信服务器进行交互时必须携带一些凭证。 - 如何传递多媒体数据?
二、账号类型与权限
微信公众号分为订阅号、服务号、企业号三种。申请服务号和企业号需要相关资质证明,订阅号个人就可以申请。
目前,很多个人订阅号都是人工操作的,它们并没有绑定服务器,没有自动回复功能。但是可以手动回复图片、文本等消息。
对于个人订阅号来说,绑定服务器后,我的服务器和微信服务器之间的交互非常有限,比如不能发送客服消息、不能发送图片。这一点,我认为微信太封闭了。
功能最丰富的是测试号,测试号包含微信公众号的一切功能。
三、消息类型
我的服务器和微信服务器之间的消息分为两种:被动回复消息和客服消息。
对于被动回复消息的处理,需要编写Web接口来处理请求。如果使用Java语言,可以编一个Servlet或者使用SpringMVC框架;如果使用Python语言,可以用Flask或者Django。对于这部分内容,可以参考这篇博客:Flask接通微信公众号
对于客服消息,需要编写代码向微信服务器发送HTTP请求。客服消息是我的服务器主动向微信服务器发送的。如果使用Java语言,可以使用HttpClient库;如果使用Python语言,当然要使用requests库。
对于微信服务器向我的服务器发送的消息(也就是用户向微信服务器发送的消息),有两种方式:get方式和post方式。
- get方式
仅仅用来完成绑定“我的服务器”时的握手操作 - post方式
用来发送用户消息。实际上,我们所要做的就是解析post来的数据,然后按照官网规定的格式回复之。
所以,跟微信服务器打交道用到的就是Http请求:回复Http请求和发送Http请求。
四、关于accessToken
我的服务器向微信服务器发送客服消息(也就是发起HTTP请求,主动发送消息)时,必须携带凭证,这个凭证就是accessToken。试想,如果没有这个凭证,张三的服务器也可以冒充我的服务器向微信服务器发送一堆垃圾消息,进而发送给了我的微信公众号的用户,那对我的公众号将是毁灭性的灾难。
accessToken的获取需要依赖两样东西:
- appId:标志着你的公众号的id,不同公众号不一样,这个是公开的
- appSecret:app密钥,这个密钥是腾讯随机生成的,这个是私有的,打死不能告诉别人
有了这两样东西,我们就可以通过发送HTTP请求来获取accessToken了。
注意,accessToken是临时生成的,只在一段时间内有效(3天时间),过期之后就需要重新像微信服务器请求新的accessToken。
这个过程最佳实践是这样的:当向微信服务器发送HTTP请求失败的时候,检查错误码,看看是不是因为accessToken,如果是,那么更新accessToken。一言以蔽之,accessToken只在必要的时候才更新,这是一种懒惰加载的机制。对于微信服务器返回的错误码,官方文档介绍非常详细。
要注意,不可以每次发送HTTP请求前都获得新的accessToken,这对于微信服务器和我的服务器来说都是一种浪费,正因为如此,微信服务器限制每天允许获取的accessToken个数不超过2000个。
五、关于Session
众所周知,Session和Cookie是Web技术中重要的存储方式。但是,因为有了微信服务器从中搅和,我的服务器再也无法在Session和Cookie中存放消息了。因为对于我的服务器来讲,只有一个用户,那就是微信服务器。我存储的Cookie和Session跟我微信公众号实际的用户半毛钱关系都没有。
于是,自己实现Session机制可能在有些应用中是必需的。这可以通过Redis来实现。因为Redis本身就是缓存数据库,调用简单。
六、重要的开发实践:使用日志
在微信服务器开发过程中,需要不断更改代码,然后上传到服务器。在开发过程中,这个过程是繁琐的,抛出异常之后,必须要很快定位错误,因此,编写的程序必须建立打印日志。
当微信接口调试好了之后,在开发中就不要通过微信来检查程序了,而要用本地命令行充当用户,调用程序进行处理。这样省去很多部署过程。
七、使用微信框架
无论是Java语言还是Python语言,开源社区早就已经退出了完善的微信框架。使用框架的好处在于:我们可以集中精力与业务逻辑,而不必关注与微信服务器之间的交互。
Java微信框架有:
- weixin4j
- wechat4j
- fastweixin
Python微信框架有:
- wechat-python-sdk
- weRoBot基于Flask的Python微信框架
当然,使用框架也有一定的坏处:如果不了解框架细节,出了问题不好定位。如果学习框架用法比学习直接实现微信接口更难,不如直接自己实现。
即便是不使用框架,自己实现,代码量也不会超过200行,在只使用微信公众号部分功能的的情况下尤为如此。自己实现的过程其实就是实现协议的过程,这个过程只需要参考着文档来实现,并没有什么技术难度。
八、绑定我的服务器
登录微信服务器之后,在左侧导航栏找到“开发/基本配置”,绑定我的服务器的所有操作都在此页完成。
这三项确定之后,就可以发送客服消息了。前两项appId和appSecret用于从服务器获取accessToken,这样微信服务器才会搭理你。第三项是IP白名单,只有在IP白名单中的IP才可以给微信服务器发送消息。
然后在“修改配置”中,绑定URL,填写token,根据自己情况看看是否需要加密
关于“修改配置”强调三点:
- 绑定URL:URL必须是http或者https开头,必须是80端口(可以使用nginx配置转发规则,从而实现多个应用共用80端口)
- 输入token:这个token用于跟“我的服务器”之间的第一次握手。对于第一次握手,过程详见微信开发者文档。原理就是:微信服务器给你几个字符串,你对这几个字符串排序、加密、验证一下这几个字符串,然后返回echostr。这个过程的意义在于:让“我的服务器”认识微信服务器,如果“我的服务器”不能做到这一点(也就是我的服务器上那个URL不能正常工作),则无法提交修改后的配置信息。
- 加密:对于重要的公众号,可以选择消息加密,这样一来消息传递过程中即使消息被截获敌手也破解不了。
九、官网很重要
无论学什么东西,官方资料都是最权威、最全面的第一手资料。至少要从头到尾浏览一遍,这样遇到问题之后知道去哪里去查。
至于别人的博客、框架之类的,都是前人的经验,很有可能比官网更突出重点、写得更详细,但是时效性差(官网变了前人经验就没用了)、权威性差(前人不一定对)。
转载于:https://www.cnblogs.com/weiyinfu/p/6965012.html
最后
以上就是暴躁月饼为你收集整理的微信公众号开发总结的全部内容,希望文章能够帮你解决微信公众号开发总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复