微信公众号第三方平台授权流程

微信公众号第三方平台授权流程

获取授权码流程:

拿到component_verify_ticket 
-> 获取component_access_token 
-> 获取pre_auth_code 
-> 引导用户进入授权页 
-> 用户同意授权给第三方平台 
-> 拿到授权码(auth_code)
-> 获取authorizer_access_token(若过期,使用 authorizer_refresh_token 刷新)
-> 根据authorizer_access_token调用公众号相关API

1. 第三方平台方获取预授权码(pre_auth_code)

预授权码是第三方平台方实现授权托管的必备信息

1.1. 推送component_verify_ticket

授权事件接受URL:用于接收取消授权通知、授权成功通知、授权更新通知,也用于接收ticket,ticket是验证平台方的重要凭据。

微信服务器每十分钟向授权事件接收URL推送一次component_verify_ticket,用于获取第三方平台接口调用凭据

POST数据说明:

<xml>
<AppId> </AppId>  //第三方平台AppID
<CreateTime>1413192605 </CreateTime>  //时间戳
<InfoType> </InfoType>  //component_verify_ticket
<ComponentVerifyTicket> </ComponentVerifyTicket>  //Ticket内容
</xml>
1.2. 获取第三方平台component_access_token

第三方平台通过自己的component_appid(即在微信开放平台管理中心的第三方平台详情页中的AppID和AppSecret)和component_appsecret,以及component_verify_ticket来获取自己的接口调用凭证(component_access_token)

接口调用请求说明:

  • Http请求方式: POST
  • 请求接口: https://api.weixin.qq.com/cgi-bin/component/api_component_token
POST请求数据示例:
{
  "component_appid":"appid_value",  //第三方平台appid
  "component_appsecret": "appsecret_value",  //第三方平台appsecret
  "component_verify_ticket": "ticket_value"  //微信后台推送的ticket
}

返回结果示例:
{
"component_access_token": "61W3mEpU66027wgNZ_MhGHNQDHnFATkDa9-2llqrMBjUwxRSNPbVsMmyD-yq8wZETSoE5NQgecigDrSHkPtIYA",  //第三方平台component_access_token
"expires_in": 7200  //有效期
}
1.3. 获取预授权码pre_auth_code

第三方平台通过自己的接口调用凭据(component_access_token)来获取用于授权流程准备的预授权码(pre_auth_code)

接口调用请求说明:

  • Http请求方式: POST
  • 请求接口: https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=xxx
POST数据示例:
{
  "component_appid":"appid_value"  //第三方平台方appid
}

返回结果示例
{
  "pre_auth_code": "Cx_Dk6qiBE0Dmx4EmlT3oRfArPvwSQ-oa3NL_fwHM7VI08r52wazoZX2Rhpz1dEw",  //预授权码
  "expires_in": 600  //有效期,为20分钟
}

2. 获取授权码

2.1. 引导用户进入授权页

授权页网址:

https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=xxxx&pre_auth_code=xxxxx&redirect_uri=xxxx

参数说明:

  • component_appid: 第三方平台方appid
  • pre_auth_code: 第一步获取的预授权码
  • redirect_uri: 回调url
2.2. 用户确认并同意登录授权给第三方平台方

用户进入第三方平台授权页后,需要确认并同意将自己的公众号登录授权给第三方平台方,完成授权流程。

2.3. 授权后回调URI,得到授权码(authorization_code)和过期时间

授权流程完成后,授权页会自动跳转进入回调URI,并在URL参数中返回授权码和过期时间(redirect_url?auth_code=xxx&expires_in=600)

参数说明:

  • auth_code: 授权码
  • expires_in: 过期时间

3. 利用授权码调用用户公众号的相关API

在得到授权码后,第三方平台方可以使用授权码(auth_code)换取授权公众号的接口调用凭据(authorizer_access_token,也简称为令牌),再通过该接口调用凭据,按照公众号开发者文档(mp.weixin.qq.com/wiki)的说明,去调用公众号相关API。

先根据授权码(auth_code)换取公众号的接口调用凭据(authorizer_access_token)

接口调用请求说明:

  • Http请求方式: POST(请使用https协议)
  • 请求接口: https://api.weixin.qq.com/cgi-bin/component/api_query_auth?component_access_token=xxxx
POST数据示例:
{
  "component_appid": "appid_value",  //第三方平台appid
  "authorization_code": "auth_code_value"  //授权码,会在授权成功时返回给第三方平台,详见第三方平台授权流程说明
}

返回结果示例: 
{ 
  "authorization_info": {
  "authorizer_appid": "wxf8b4f85f3a794e77", 
  "authorizer_access_token": "QXjUqNqfYVH0yBE1iI_7vuN_9gQbpjfK7hYwJ3P7xOa88a89-Aga5x1NMYJyB8G2yKt1KCl0nPC3W9GJzw0Zzq_dBxc8pxIGUNi_bFes0qM", 
  "expires_in": 7200, 
  "authorizer_refresh_token": "dTo-YCXPL4llX-u1W1pPpnp8Hgm4wpJtlR6iV0doKdY", 
  "func_info": [
    {
      "funcscope_category": {
        "id": 1
      }
    }
  ]
}

返回值说明:

  • authorization_info: 授权信息
  • authorizer_appid: 授权方appid
  • authorizer_access_token: 授权方接口调用凭据(在授权的公众号具备API权限时,才有此返回值),也简称为令牌
  • expires_in: 有效期(在授权的公众号具备API权限时,才有此返回值)
  • authorizer_refresh_token: 接口调用凭据刷新令牌(在授权的公众号具备API权限时,才有此返回值),刷新令牌主要用于公众号第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。 一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌
  • func_info: 公众号授权给开发者的权限集列表,详情查看:权限集列表

拿到授权码(authorizer_access_token)后,根据 authorizer_access_token 调用公众号相关API。

获取(刷新)授权公众号的接口调用凭据(令牌)

方令牌(authorizer_access_token)失效时,可用刷新令牌(authorizer_refresh_token)获取新的令牌。请注意,此处token是2小时刷新一次,开发者需要自行进行token的缓存,避免token的获取次数达到每日的限定额度。

接口调用请求说明:

  • http请求方式: POST(请使用https协议)
  • 请求接口: https:// api.weixin.qq.com /cgi-bin/component/api_authorizer_token?component_access_token=xxxxx
POST数据示例:
{
  "component_appid": "appid_value", //第三方平台appid
  "authorizer_appid": "auth_appid_value",  //授权方appid
  "authorizer_refresh_token": "refresh_token_value"
}

authorizer_refresh_token: 授权方的刷新令牌,刷新令牌主要用于公众号第三方平台获取和刷新已授权用户的access_token,只会在授权时刻提供,请妥善保存。一旦丢失,只能让用户重新授权,才能再次拿到新的刷新令牌

返回结果示例: 
{
  "authorizer_access_token": "aaUl5s6kAByLwgV0BhXNuIFFUqfrR8vTATsoSHukcIGqJgrc4KmMJ-JlKoC_-NKCLBvuU1cWPv4vDcLN8Z0pn5I45mpATruU0b51hzeT1f8",  //授权方令牌
  "expires_in": 7200,  //有效期,为2小时
  "authorizer_refresh_token": "************"  //刷新令牌
}

转载于:https://my.oschina.net/u/553773/blog/663711

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值