目的:
微信第三方公众平台是为了让公众号和小程序的运营者,可以一建授权给第三方平台,通过第三方平台来完成业务。
业务特征:
- 提供通用的解决方案;
- 基于安全的公众号授权机制;
- 是公众号外包团队的商业机会。
UnionID: 为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID。可以通过第三方平台调用接口获取到用户的unionID,不过需要提供用户的openID。
公众号授权给微信第三方平台流程:
第三方平台的一些设置:
授权流程技术说明
- 首先,我们要弄清楚这个途中用户的主体是谁,刚开始看的时候以为是使用公众号的粉丝用户,不过意识到很不合理,如何让每个用户都去做授权操作。所以在此说明这个用户的主体是公众号的管理员,只要管理员做了授权的操作即可;事实上,第三方平台是作为微信服务器和公众号之间信息传递的桥梁,授权之后,可以代替公众号完成业务,方便公众号的管理和某些业务的统一整合。
-
公众号管理员进入我们第三方平台的网站(http://bill.fj118114.com/wxthird/third/toAuthorize.htm),点击授权按钮,第三平台在后台同伙api获取预授权码,平台返回一个授权链接,点击回让管理员扫码授权,授权完成后会返回授权码,第三方平台凭此授权码可以获取公众号的信息。
-
获取预授权码
- 推送component_verify_ticket,第三方平台创建之后,微信服务器每隔10分钟会向第三方平台的接收地址推送一次 component_verify_ticket,用于获取第三方平台接口调用凭据。
其中遇到的坑:
[]微信api的说明信息没有完整返回参数说明,只有一个xml格式的返回数据。网上查了一下知道了参数;
[]返回的data数据是放在request的header中的,需要先读取出来;
消息解密,返回的参数需要解密才可以获取到xml格式的明文;微信会提供加解密方法。
<xml>
<AppId> </AppId>
<CreateTime>1413192605 </CreateTime>
<InfoType> </InfoType>
<ComponentVerifyTicket> </ComponentVerifyTicket>
</xml>
[]解密后的xml明文需要解析,最终得到component_verify_ticket。
[]component_verify_ticket需要保存下来,用于获取 component_access_token。
- 获取到预授权码后,就可以让管理员扫码授权了。微信提供两种授权方式,在此用的方式一。
- 方式一:授权注册页面扫码授权
[]坑三:
一开始以为这个是直接把这个链接生成二维码,让管理员去扫,然后扫了几下都是报错。正确的操作是把链接返回到页面,点击会跳出一个二维码,然后管理员扫码授权。微信会判断来源域名是否,即第三方平台设置时的后台域名。因此要在网站内发起授权。
[]这个链接有一个回调url(redirect_url),必须填写,也是接收授权码的方法路径。
- 获取到授权码就可以换取公众号或小程序的接口调用凭据(有效期2小时)
会返回一个调用凭据(authorizer_access_token)和一个刷新凭证(authorizer_refresh_token)
刷新凭证用户刷新调用凭据。
这个调用凭据(access_token)是可以用来调用公众号的api
https://api.weixin.qq.com/cgi-bin/user/get?access_token=这个例子是公众号获取用户列表的api,因此获取到凭据之后,第三方平台就可以代替公众号实现业务。
至此,就可以用第三平台代公众号实现一些业务,比如推送消息等。