微信公众号开发
本篇文章介绍微信公众号的开发
微信公众号开发是基于微信官方提供的接口所进行的二次开发。
1.开发换境搭建
我们先来了解一下微信公众号开发的原理
示意图
当我们在微信公众号后台发送消息时,数据会转发到微信服务器上,如果我们在公众号后台配置了接口信息,那么微信服务器会将数据转发到开发者服务器。由开发者服务器做出响应, 再经过微信服务器转发到微信公众号客户端。这就是微信公众号开发的原理。
由于我们需要在公众号后台配置接口,所以并不能直接把本地启动的服务直接配置到公众号后台。这里我们需要使用到一款内网穿透工具ngork
, 将我们本地启动的服务映射到一个公网IP上,但是经过测试发现,ngork的域名都被微信屏蔽了。所以,在公众号后台配置是无法使用的。
这里我找到了另一款价格在接受范围的内网穿透工具-量子互联
量子互联官网:https://www.uulap.com/nattunnel
内网穿透非常简单,下面介绍如何将本地的服务映射到一个公网IP
1.登录量子互联控制台
2.选择解析线路
如果域名已备案,选择s5线路,如果域名未备案,选择香港服务器线路
3.域名映射
点击配置隧道
将自定义域名解析到s5线路
阿里云域名解析如下
这样我们就配置好了
4.下载客户端
登录token
获取
内网列表 >> TOKEN
填写token
登录即可
5.这里我们使用flask
框架架设我们的后端服务器
示例代码如下:
1 |
|
启动服务之后,我们就可以通过自定义域名访问本地开发的项目。
映射关系图解如下
这样我们就完成了开发换境的搭建,我们可以通过自定义域名访问本机的Web服务。
2.公众号后台配置
登录公众号后台,点击开发 》基本配置
如果此时我们点击提交,可以看到提示信息,token
校验失败
这是由于我们需要在本地服务器进行校验token
值,这里说一下微信校验的原理。当我们在公众后后台配置好URL地址后,所有通过公众号发送的消息都会转发到该地址。并且URL会携带四个参数signature
、timestamp
、nonce
、echostr
signature是对timestamp
, nonce
, 以及token
(约定好的令牌信息)这三个参数进行sha1加密, 如果校验通过,那么就返回echostr
给微信服务器。说明此次请求确实是微信服务器发过来的。因为我们的接口是暴露在公网的,
别人当然也可以发送网络请求到我们的服务器。如果没有这个检验,那么别人就可以随意访问我们的接口。
这里采用一个第三方库wechatpy
完成信息校验。
安装方式
1 |
|
示例代码如下
1 |
|
当我们校验了token值之后,就可以提交成功了。
最终配置信息如下
3.数据交互格式
用户通过公众号发送消息经由微信服务器转发到我们本地的服务器,数据交互使用的是XML格式,请求方式为POST请求。所以我们需要接受并解析微信服务器转发的数据
数据交互格式如下
1 |
|
我们可以获取到的信息有接收用户,发送用户,时间戳,消息类型,发送内容,消息id等字段信息。这里可以使用wechatpy
这个第三方库解析XML
格式的数据
用法如下
1 |
|
4.数据提取
1 |
|
msg
是一个TextMessage
对象,有以下这些属性
公共属性
1 |
|
文本消息特有属性
1 |
|
数据提取示例代码如下:
1 |
|
5.请求处理
前面已经说过微信服务器的数据交互格式是XML
格式,所以响应请求也应该将数据包装成XML
格式。同样借助wechatpy
这个封装好的第三方库回复用户消息。
示例代码如下
1 |
|
来看一下公众号回复的效果
这样就具备了回复消息的能力。基于此可以扩展非常多的东西,比如用户发送一张图片,可以利用百度API图像识别技术给颜值打分并将计算好的结果返回给用户,也可以和爬虫程序对接,用户回复某一个关键字,利用写好的脚本爬取数据并返回给用户。另外也可以更加方便维护和管理公众号的粉丝。再比如,可以记录公众号粉丝的关注或取消关注时间,做一些统计工作。
6.消息类型
最后简单说一下,消息类型有哪些呢?
主要有以下几种
文本消息 | 图片消息 |语音消息 |视频消息 |地理位置消息 |链接消息 |短视频消息
我们可以参考官方给出的文档进行二次开发
微信开发官文档:https://developers.weixin.qq.com/doc/
当然echatpy
这个第三方库能让我们的代码变得更加简洁高效
wechatpy官方文档:
http://docs.wechatpy.org/