微信公衆號第三方平臺受權流程

微信公衆號第三方平臺受權流程

獲取受權碼流程: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": "************"  //刷新令牌
}
相關文章
相關標籤/搜索