重要声明:本文章仅仅代表了作者个人对此观点的理解和表述。读者请查阅时持自己的意见进行讨论。
目录
本系列博文还包含了下面的博客:
- 【微信公众号开发】一、运作及配置流程简介(本文)
- 【微信公众号开发】二、解析微信请求及响应消息
- 【微信公众号开发】三、解析微信事件XML数据消息及响应
- 【微信公众号开发】四、公众号按钮设置及自己的微信按钮编辑器
- 【微信公众号开发】五、微信网页授权获取用户openId
- 【微信公众号开发】六、微信JS的使用
- 【微信公众号开发】七、微信JS需要注意的坑
- 【微信公众号开发】八、微信JS发起支付
微信里有不止一种运营方案,常说的“微信公众号开发”一般指对 服务号
和 订阅号
进行公司自有业务接入微信App的运行体系里面,借助微信的流量来完成公司业务的处理。
一、了解微信
什么是服务号?
服务号:为企业和组织提供更强大的业务服务与用户管理能力,主要偏向服务类交互(功能类似12315,114,银行,提供绑定信息,服务交互的); 适用人群:媒体、企业、政府或其他组织。 群发次数:服务号1个月(按自然月)内可发送4条群发消息。
什么是订阅号?
订阅号:为媒体和个人提供一种新的信息传播方式,主要功能是在微信侧给用户传达资讯;(功能类似报纸杂志,提供新闻信息或娱乐趣事) 适用人群:个人、媒体、企业、政府或其他组织。 群发次数:订阅号(认证用户、非认证用户)1天内可群发1条消息。
以上两处解释来自腾讯客服平台。可见,服务号主要提供服务,而订阅号主要提供的是咨询传达的目的。
所以,微信公众号开发,主要是开发 服务号
里面要提供的服务功能。服务号开发完成后,订阅号几乎完全相同,唯一不同(在程序上来说没区别)的就是订阅号有些接口不能用或者没有服务号那么开放。
二、运作方式
对于公司来说,要筹备一个服务号,需要使用公司的相关资质证件即可通过微信的审核获取到一个公众号,没有任何开发用户也可以关注到这个公众号,只不过提供不了任何功能。先假设我们已经完整的开发了所有功能或使用现存的某公众号。基于此,先来梳理用户得到服务的整个流程。
场景1、用户自行使用
用户打开公众号界面
--> 点击“个人中心”按钮
--> 打开网页个人中心界面
疑问
- 打开公众号里面有按钮?按钮咋来的?
- 点击按钮还能打开网页?网页哪来的?
场景2、用户发消息
用户打开公众号界面
--> 输入消息内容
--> 发送消息给公众号
--> 公众号给出回复
疑问
- 发消息没问题,但是回复是来自哪儿的?
无论是何种场景,我们最终都是要落实到程序代码上,撸代码前必须要了解程序的执行流程,就如同android里各个组件的生命周期方法一样,它们有一定的执行顺序流程。只要知道了微信的整套执行流程,上面的疑问也就迎刃而解了。微信服务号的执行流程如下图
用户发送的消息,会发送给微信的后台服务器,微信收到消息后会将该消息又推送给开发者的服务器(后文称我方服务器),我方服务器应返回适当的报文给微信服务器,这样便完成了一次用户的行为处理。对于公众号界面的按钮,微信会提供设置按钮接口,也可以直接在微信管理界面设置按钮。
三、后台配置及微信调用流程
后台配置
公众号申请成功后,如果不做一些后台配置,微信又怎么知道我方服务器地址多少,所以,我们首要第一步就是要在微信后台管理界面上配置好我方服务器提供给微信后台调用的接口地址。
在微信后台找到:【开发】-【基本配置】-【服务器配置】-【修改配置】例如下图:
如果你事先没有写好这个接口,就想直接设置,是不会成功的。如何让配置可以设置成功,下文将进行讲解。
微信调用我方服务器流程
无论是微信将用户消息推送给我方服务器,还是在微信后台进行接口地址的配置,微信服务器都会调用这个配置的接口地址,如果这个接口地址不可访问,微信会直接提示配置失败。即便你没有按微信的接口规范来开发这个接口,你一样不能正确配置。为了能正确配置,要了解微信调用我们写好的接口时传递了哪些参数,以及我们应该如何正确响应。
流程1、微信后台的HTTP请求
在配置时,点击确认那一刻,微信会向配置的接口地址发出一个HTTP的GET请求,该请求携带了几个参数值,我方服务器应解析这些参数值并告诉微信后台是否正确。下表列出了微信请求时给的参数:
字段 | 示列值 | 含义 |
---|---|---|
signature | 043eebc1e8ce70c1a39d342e7404bb16662a5449 | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 1561912408 | 时间戳 |
nonce | 1671776044 | 随机数 |
echostr | 54yvj673x21cb57h | 随机字符串 |
我方服务器将会收到这个请求,必须务必验证 signature
的正确性以保证这个请求是来自微信后台的,一切确认无误后,只需要将 echostr
的内容原样返回即可。
流程2、我方服务器验证请求
我方服务器获取到请求后,务必进行 signature
正确性判断,下面是来自微信官网的一张流程图,方便对验证流程的直观说明:
图中提到的“哈希算法”,其实使用的算法是 sha1
算法,下文将介绍如何使用 Java
编写对该请求的验证。