项目地址:https://github.com/PassionZale/3Years
微信公众平台技术文档
如果你还是刚开始接触微信公众号开发,那么可能你需要研读一下微信公众平台技术文档:
这里有些概念、接口等你是必须而且一定要了解清楚的:
1. 获取 access_token
access_token
非常重要,几乎大部分公众号相关接口,都必须附带这个凭据。
你需要知道如何对 access_tolen
进行获取、缓存、刷新。
2. 自定义菜单
公众号菜单,几乎是每个“公众号项目”所刚需的一个功能。
菜单必须了解的是:自定义菜单事件推送。
3. 消息管理
你需要明白“微信用户”,“应用程序”,“微信服务器”这三者的数据传输方式:
微信用户,好比客户端,或者你粗略的认为是浏览器也行;
应用程序,好比服务端,是你自己的 Web App 项目所运行的服务器;
微信服务器,顾名思义,就是微信自己的服务器。
在公众号里面,“微信用户”与你的“应用程序”不会直接进行数据传输,它通常是由“微信服务器”作为中转站,将用户产生的数据请求以 GET/POST 等请求转发至“应用程序”。
例如,“微信用户”在公众号中输入了:Hello,此时,“应用程序”并不会收到“Hello”字符串。
“Hello”首先被“微信服务器”接收,然后“微信服务器”会判断该公众号是否开启开发者配置(配置后面会详细说明),若开启,“微信服务器”则会将“Hello”以 GET/POST 请求推送至公众号所配置的消息接收地址中。
“消息接收地址”便是“应用程序”中的一个连接,通常我称它为“应用程序”的微信主入口函数。
此时,“应用程序”最终接收到了“Hello”。
这时,你想让公众号回复“Welcome”给“微信用户”。
同样的,“应用程序”将“Welcome”发送至“微信服务器”,再由“微信服务器”发送给“微信用户”,最终“微信用户”便能在公众号聊天框中看到“Welcome”了。
4. 网页授权
当用户访问“应用程序”某个连接,如:个人中心,此时,你想展示他的订单列表、微信昵称、微信头像等等。
那么你如何才能确定当前用户是谁呢?
每一个微信用户都有唯一标识(openid)对应一个公众号;
同一个微信用户对应不同公众号,openid 都是不相同的。
你可以粗略的理解为,网页授权便是让微信用户,拿着自己的微信账户,在你的“应用程序”中登录一次,若想了解更全面,可以阅读官网 wiki:微信网页授权
授权完毕后,应用程序会获取到唯一标识:openid。
如果还不理解 openid 的作用,那么这样想想:应用程序拿到 openid 后,这个用户便登录成功了,openid 便是一个 LOGIN STATUS
。
这就好比,管理后台,输入用户名密码登录成功后,应用程序会存储或更新用户的登录状态一样。
粉丝模型
在设计公众号粉丝模型之前,我们需要知道一个微信粉丝的数据结构到底是怎样的?
打开:获取用户基本信息,往下拉,便会看到官方 wiki 所给出的粉丝数据结构:
{ "subscribe": 1, "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", "nickname": "Band", "sex": 1, "language": "zh_CN", "city": "广州", "province": "广东", "country": "中国", "headimgurl":"http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzic", "subscribe_time": 1382694957, "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL" "remark": "", "groupid": 0, "tagid_list":[128,2], "subscribe_scene": "ADD_SCENE_QR_CODE", "qr_scene": 98765, "qr_scene_str": "" }
粉丝模型,通常会基于这段数据结构来进行设计:
最需要注意的便是存储 nickname
:
由于微信用户昵称会有 emoji 表情,因此用 utf-8 是无法完整存储下来,需要改用 utf8mb4 进行存储。
具体可以阅读我过往的博客:处理微信公众号粉丝中包含Emoji表情的昵称