1. 注册,开发者身份认证
这一步需要填写一些个人或者公司的身份信息,需要300块钱的认证费。
这一步比较简单,就不多说了,基本上交了钱就能通过了。
2. 创建第三方开放平台
2.1 第三方平台运行机制:
用户公众号绑定的微信扫码授权给第三方平台,第三方平台获得对方公众号的部分控制权,比如当授权消息管理权限时,用户公众号收到的消息会自动转发给第三方平台,第三方平台再代替用户公众号回复。
2.2 创建流程
填写基本,这个根据实际情况填写。
设置权限集,这个根据需要获取的公众号权限设置。
-
填写开发资料,这个信息十分关键,后面的开发基本围绕于此。
登录授权的发起页域名:填写平台域名,不要写
https://
之类的协议头。授权测试公众号列表:填写自己用于开发测试使用的公众号
AppID
授权事件接收URL:用户公众号在授权接入、取消授权、更新授权的时候,微信会向平台服务器的这个URL发送请求,需要平台做相关处理。
下面这些信息和公众号开发基本一致,在获取了用户授权之后,可以将授权公众号当作自己的公众号开发:
公众号消息校验Token,公众号消息加解密Key,公众号消息与事件接收URL,公众号开发域名
填写白名单IP地址列表,填写自己服务器的ip就好。
2.3 开发流程
1.先生成供用户点击后调到授权二维码的链接
链接的形式如下:
https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=平台appid
&pre_auth_code=微信提供的pre_auth_code
&redirect_uri=授权回调uri
打开之后会出现类似这样的二维码,绑定了公众号的微信扫描之后可以授权接入我们的第三方平台。
观察上面的链接我们会发现,component_appid是创建之后就有的,直接复制一下贴上去就可以。
而pre_auth_code需要平台自己获取,redirect_uri
自己填写(注意要加协议头)。
微信服务器每10分钟会向授权事件接收URL
发送POST
请求,请求链接中包含一下参数msg_signature
,
timestamp
,nonce
,请求的body
是一个加密之后的xml,根据上面填写的公众号相关信息可以解密。
根据这些可以从xml中拿到ComponentVerifyTicket
,再用ComponentVerifyTicket
作为参数,向https://api.weixin.qq.com/cgi-bin/component/api_component_token
发起请求,就可以拿到component_access_token
,再用component_access_token
作为参数向https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode
发送请求,拿到最终的pre_auth_code
,到此,授权链接构造完成,接下来要处理授权事件。
2.获取用户公众号授权
用户在扫码授权后,微信服务器会向redirect_uri
发送get
请求,我们需要处理这个请求,从中获取auth_code
的值,再用使用auth_code
这个授权码换取公众号的授权信息authorization_info
,我们可以存储这些信息供后面使用,比如说知道是谁接入了授权等等,根据需要来,不存也问题不大。
3.代公众号操作(这里以代接受和回复消息为例)
起始到这里,就是类似于微信公众号开发了。
用户在接入授权的公众号中回复消息以及授权、取消授权时,微信服务器会自动将操作信息发送给我们的第三方平台(之前留了公众号消息与事件接收URL,这个里面可以获取到appid,主要是为了方便管理,在接收回复操作中没什么作用),然后我们就是接收和回复消息。为了安全,微信要求消息必须要经过加密,不然是无法发送的。
4.全网发布验证
全网发布时,需要微信那边模拟通过。于是要在上面的基础上增加一个授权事件回复。
当消息类型是type=event
并且是微信提供的用户名时,向这个模拟用户回复event + "from_callback"
,和普通的文本消息一样,只要将回复xml的content设置为event + "from_callback"
即可。其中event也在接收到的xml体中,名词是Event
。
到这里,整个开放平台就大功告成了,全网发布需要三天的审核时间,请耐心等待。
吐槽:微信的文档写的十分跳跃,作为一个很少写web应用的算法工程师,阅读起来压力很大,网上看到部分博客也都写的不怎么全面,于是我将整个开发过程完整的写下来以便后人借鉴,少踩些坑,另外,如果是用python开发的话,上面涉及微信操作的一些方法推荐使用wechatpy
这个库,非常方便。