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

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

获取受权码流程:api

拿到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数听说明:app

<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)url

接口调用请求说明:code

  • 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)component

接口调用请求说明:xml

  • 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. 引导用户进入受权页

受权页网址:token

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": "************"  //刷新令牌
}
相关文章
相关标签/搜索