撸一撸微信公众号开发文档
从上次的测试来看,微信公众号平台的接入并不难,我一般习惯在动手实践得到直观的感受之后开始系统地学习。虽然接入测试成功,可以借助wechat_api获取access_token,发送消息;也能通过webot回复消息;但文档该啃还是要啃的。不过微信公众平台对初学者来说太不友好了,基本上就是从代码注释中生成的API DOC那种水准,很难让刚接触的人从文档上建立起一个总体的认识。 所以我先根据文档的入门介绍和内容目录画了张思维导图:
按官方的说法,微信将他提供的服务分成了公众号平台和开放号平台两部分。其中开放号平台是为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发提供服务的,目前不是我关心的重点。
不管是订阅号还是服务号,业务开发都要借助公众号平台提供的服务来完成。粗略地扫了一下文档后,我发现并不是所有内容都在介绍公众平台的API,有些是微信公众号功能的介绍,比如微信设备、微信连wifi之类的,所以没放到思维导图中。不过也可能是我没看到,等以后再说了,反正目前我最关心的就是消息类的API。
不过消息类API的文档组织也很散,作为一个资深程序员,如果你不能从系统的角度跟我讲话,我是很难听得懂的。即便勉强能听懂,也一定是我根据你说的脑补了一个系统出来,所以下面就是我根据微信文档脑补出来的系统概念图,相信我画得一定都是错的.....
微信公众号平台的接入提供了一个配置界面,我们只要把它需要的信息填上去就好了。当然,一般你应该不会马上就去动真正的配置,上线之前最好有个环境能测试一下。所以微信公众号很贴心地提供了一个测试号,没有公众号也可以申请测试号的,上一节已经试过了。
按照文档来看,在数据层,跟消息相关的实体应该有:
- 公众号账号
- 菜单
- 客服
- 用户
- 素材
- 消息
- 卡券
此外还有统计数据。
公众号平台针对每个数据实体都提供了相应的管理API,可以执行增删改查操作,比如针对自定义菜单,就有:
- 创建:http请求方式:
POST
(请使用https协议)https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN
- 获取:http请求方式:
GET
https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN
- 删除:http请求方式:
GET
https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=ACCESS_TOKEN
然后各种实体的管理和交互的操作可能都会有相关的事件,目前还没有看到一个完整的事件列表,虽然在事件处理中介绍了几种,但似乎还有散落在各处的事件。所以我在所有数据管理功能模块前面又不负责任地加上了一个事件管理模块。
最后是微信公众平台的外围,我猜大概是因为历史原因,外围的接口并不是一个套路。除了接入验证外,会由公众号平台发起请求的API,都是用XML封装数据,而我们对这些请求的响应也要用XML封装数据。而公众平台作为服务提供方时,所有API都要求用JSON封装请求数据,响应同样也是用JSON格式。
而且最奇葩的是,不管是处理平台转发过来的用户消息,还是接收各种事件通知,以及基本只会用到一次的接入验证,我们实现时都只给了一个URL的配额。也就是说我们要在这个URL里解析请求,然后再分发出去做不同的处理。我只想说,简直了。。。为什么公众平台接受请求的时候不只用https://api.weixin.qq.com/cgi-bin/
一个地址呢?
经过初步地了解,要对接微信公众号平台做一个服务系统,需要解决的问题大概包括:
- 与公众号平台保持一致的加解密算法
- 接入参数的验证
- token的获取和维护
- XML数据的解析和组装
- JSON数据的解析和组装
- 与微信公众平台相对应的数据实体维护
不过接下来应该先去看一看wechat-api的文档,不喜欢看文档的码农做不了好测试。