官网是最好的文档来源。html
首先,须要搞清楚三个实体:python
这三个实体之间的关系以下所示:微信服务器至关于一个代理、一个中转站。nginx
一旦明确了三者之间的关系,其它问题就变得天然而然了:git
微信公众号分为订阅号、服务号、企业号三种。申请服务号和企业号须要相关资质证实,订阅号我的就能够申请。
目前,不少我的订阅号都是人工操做的,它们并无绑定服务器,没有自动回复功能。可是能够手动回复图片、文本等消息。
对于我的订阅号来讲,绑定服务器后,个人服务器和微信服务器之间的交互很是有限,好比不能发送客服消息、不能发送图片。这一点,我认为微信太封闭了。github
功能最丰富的是测试号,测试号包含微信公众号的一切功能。数据库
个人服务器和微信服务器之间的消息分为两种:被动回复消息和客服消息。
对于被动回复消息的处理,须要编写Web接口来处理请求。若是使用Java语言,能够编一个Servlet或者使用SpringMVC框架;若是使用Python语言,能够用Flask或者Django。对于这部份内容,能够参考这篇博客:Flask接通微信公众号缓存
对于客服消息,须要编写代码向微信服务器发送HTTP请求。客服消息是个人服务器主动向微信服务器发送的。若是使用Java语言,可使用HttpClient库;若是使用Python语言,固然要使用requests库。安全
对于微信服务器向个人服务器发送的消息(也就是用户向微信服务器发送的消息),有两种方式:get方式和post方式。服务器
因此,跟微信服务器打交道用到的就是Http请求:回复Http请求和发送Http请求。微信
个人服务器向微信服务器发送客服消息(也就是发起HTTP请求,主动发送消息)时,必须携带凭证,这个凭证就是accessToken。试想,若是没有这个凭证,张三的服务器也能够冒充个人服务器向微信服务器发送一堆垃圾消息,进而发送给了个人微信公众号的用户,那对个人公众号将是毁灭性的灾难。
accessToken的获取须要依赖两样东西:
有了这两样东西,咱们就能够经过发送HTTP请求来获取accessToken了。
注意,accessToken是临时生成的,只在一段时间内有效(3天时间),过时以后就须要从新像微信服务器请求新的accessToken。
这个过程最佳实践是这样的:当向微信服务器发送HTTP请求失败的时候,检查错误码,看看是否是由于accessToken,若是是,那么更新accessToken。一言以蔽之,accessToken只在必要的时候才更新,这是一种懒惰加载的机制。对于微信服务器返回的错误码,官方文档介绍很是详细。
要注意,不能够每次发送HTTP请求前都得到新的accessToken,这对于微信服务器和个人服务器来讲都是一种浪费,正由于如此,微信服务器限制天天容许获取的accessToken个数不超过2000个。
众所周知,Session和Cookie是Web技术中重要的存储方式。可是,由于有了微信服务器从中搅和,个人服务器再也没法在Session和Cookie中存放消息了。由于对于个人服务器来说,只有一个用户,那就是微信服务器。我存储的Cookie和Session跟我微信公众号实际的用户半毛钱关系都没有。
因而,本身实现Session机制可能在有些应用中是必需的。这能够经过Redis来实现。由于Redis自己就是缓存数据库,调用简单。
在微信服务器开发过程当中,须要不断更改代码,而后上传到服务器。在开发过程当中,这个过程是繁琐的,抛出异常以后,必需要很快定位错误,所以,编写的程序必须创建打印日志。
当微信接口调试好了以后,在开发中就不要经过微信来检查程序了,而要用本地命令行充当用户,调用程序进行处理。这样省去不少部署过程。
不管是Java语言仍是Python语言,开源社区早就已经退出了完善的微信框架。使用框架的好处在于:咱们能够集中精力与业务逻辑,而没必要关注与微信服务器之间的交互。
Java微信框架有:
Python微信框架有:
固然,使用框架也有必定的坏处:若是不了解框架细节,出了问题很差定位。若是学习框架用法比学习直接实现微信接口更难,不如直接本身实现。
即使是不使用框架,本身实现,代码量也不会超过200行,在只使用微信公众号部分功能的的状况下尤其如此。本身实现的过程其实就是实现协议的过程,这个过程只须要参考着文档来实现,并无什么技术难度。
登陆微信服务器以后,在左侧导航栏找到“开发/基本配置”,绑定个人服务器的全部操做都在此页完成。
这三项肯定以后,就能够发送客服消息了。前两项appId和appSecret用于从服务器获取accessToken,这样微信服务器才会搭理你。第三项是IP白名单,只有在IP白名单中的IP才能够给微信服务器发送消息。
而后在“修改配置”中,绑定URL,填写token,根据本身状况看看是否须要加密
关于“修改配置”强调三点:
不管学什么东西,官方资料都是最权威、最全面的第一手资料。至少要从头至尾浏览一遍,这样遇到问题以后知道去哪里去查。 至于别人的博客、框架之类的,都是前人的经验,颇有可能比官网更突出重点、写得更详细,可是时效性差(官网变了前人经验就没用了)、权威性差(前人不必定对)。