本文主要整合微信文档各接口,最终得到可以使用的授权公众号令牌方法
1、在获得微信推送的ticket后,我们可以通过Ticket拿到自己的令牌(component_access_token):
POST https://api.weixin.qq.com/cgi-bin/component/api_component_token
{
“component_appid”: “appid_value” ,//第三方平台 appid
“component_appsecret”: “appsecret_value”,//第三方平台 appsecret
“component_verify_ticket”: “ticket_value”}//微信后台推送的 ticket
}
appid和appsecret可在开放平台详情中获取,appsecret需要管理员扫码后生成,生成后保存起来,无法再次查看。ticket则由授权事件接收配置接口提供。
返回结果示例:
{
“component_access_token”: “83_2TWHaWs10Dr_YHpvkBrasdadsdasdasMUfunPv8LWe-DeTZcKyJcptLhSzD8r7oTAGnRp6nZMRAhwkXUyrrFgDqn3CbH_nPnK34fk75AZOWdX4IV6fkTphXlDf_8TKTbADALCL”,
“expires_in”: 7200 }
拿到其中的component_access_token,该令牌一般用于url请求路径上,有效期为12小时,根据微信文档可以在11小时50分重新获取存储。
2、拿到我们的令牌后,就可以调用其他的微信API了,下一步则是生成让对方授权给我们的二维码或链接中的参数pre_auth_code(预授权码):
POST
https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=COMPONENT_ACCESS_TOKEN
{
“component_appid”: “appid_value” //第三方平台 appid
}
返回结果示例:
{
“pre_auth_code”:
“Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw”,
“expires_in”: 600
}
pre_auth_code有效期根据文档描述为30分钟,且不能共用,即每个授权二维码或链接单独一个预授权码。
官方描述:
参数 | 必填 | 说明 |
---|---|---|
component_appid | 是 | 第三方平台方 appid |
pre_auth_code | 是 | 预授权码 |
redirect_uri | 是 | 授权回调 URI(填写格式为https://xxx)。(插件版无该参数) 管理员授权确认之后会自动跳转进入回调 URI,并在 URL 参数中返回授权码和过期时间(redirect_url?auth_code=xxx&expires_in=600) |
auth_type | 是 | 要授权的账号类型,即商家点击授权链接或者扫了授权码之后,展示在用户手机端的授权账号类型。 1 表示手机端仅展示公众号;2 表示仅展示小程序,3 表示公众号和小程序都展示。 4表示小程序推客账号; 5表示视频号账号; 6表示全部,即公众号、小程序、视频号都展示 第三方平台开发者可以使用本字段来控制授权的账号类型。 对于已经注销、冻结、封禁、以及未完成注册的账号不再出现于授权账号列表。 |
biz_appid | 否 | 指定授权唯一的小程序或公众号 。如果指定了appid,则只能是该appid的管理员进行授权,其他用户扫码会出现报错。auth_type、biz_appid 两个字段如果设置的信息冲突,则biz_appid生效的优先级更高。例如,auth_type=1,但是biz_appid是小程序的appid,则会按照auth_type=2来处理,即以biz_appid的类型为准去拉出来对应的权限集列表. |
category_id_list | 否 | 指定的权限集id列表,如果不指定,则默认拉取当前第三方账号已经全网发布的权限集列表。 如需要指定单个权限集ID,写法为“category_id_list=99” ,如果有多个权限集,则权限集id与id之间用中竖线隔开。 |
最终H5授权链接示例:https://open.weixin.qq.com/wxaopen/safe/bindcomponent?action=bindcomponent&no_scan=1&component_appid=APPID&pre_auth_code=预授权码&redirect_uri=接口地址&auth_type=6
(这里使用H5链接没用二维码, 是因为二维码生成莫名其妙挂了,返回preauthcode无效,但H5又行。。。)
3、授权成功后,微信会回调redirect_url的地址,在该回调中会返回auth_code授权码,在该步骤需在接口上处理接收该值后,再用该code码获取authorizer_access_token令牌和authorizer_refresh_token刷新令牌
- 1.使用授权码获取授权信息
当用户在第三方平台授权页中完成授权流程后,第三方平台开发者可以在回调 URI 中通过 URL 参数获取授权码。使用以下接口可以换取公众号/小程序的授权信息。建议保存授权信息中的刷新令牌(authorizer_refresh_token)。使用过程中如遇到问题,可在开放平台服务商专区发帖交流。
注意: 公众号/小程序可以自定义选择部分权限授权给第三方平台,因此第三方平台开发者需要通过该接口来获取公众号/小程序具体授权了哪些权限,而不是简单地认为自己声明的权限就是公众号/小程序授权的权限。
POST 数据示例:
官方文档:https://developers.weixin.qq.com/doc/oplatform/openApi/OpenApiDoc/ticket-token/getAuthorizerAccessToken.html
POST https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=COMPONENT_ACCESS_TOKEN
{ “component_appid”:“appid_value” , // 第三方平台 appid
“authorization_code”: “auth_code_value” // auth_code }
- 2.获取授权账号调用令牌
接口说明
该接口用于获取授权账号的authorizer_access_token。authorizer_access_token 有效期为 2 小时,authorizer_access_token 失效时,可以使用 authorizer_refresh_token 获取新的 authorizer_access_token。使用过程中如遇到问题,可在开放平台服务商专区发帖交流。
authorizer_access_token 有效期为 2 小时,开发者需要缓存 authorizer_access_token,避免 API 调用触发每日限额。
缓存方法可以参考:
返回:
官方文档:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
POST
https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=ACCESS_TOKEN
{
“component_appid”: “appid_value” , //第三方平台 appid
“authorizer_appid”: “auth_appid_value”, //授权方 appid
“authorizer_refresh_token”: “refresh_token_value” //刷新令牌
}
刷新令牌,获取授权信息时得到,用于更新令牌有效期,最后也是返回”success”给微信即可。
获取到令牌后即可代公众号调用微信API进行开发,即可获取到当前第三方平台数据或已授权公众号的令牌信息(30天失效,需重新生成授权链接)