微信支持的Authorization code授權模式(公眾號開發)(開放平台資料中心中的代公眾號發起網頁授權)


 

鏈接:https://blog.csdn.net/ASZJBGD/article/details/82838356

主要流程分為兩步:

1.獲取code

2.通過code換取accesstoken

流程圖:

第一步:請求CODE

請求方法

在確保微信公眾賬號擁有授權作用域(scope參數)的權限的前提下(一般而言,已微信認證的服務號擁有snsapi_base和snsapi_userinfo),使用微信客戶端打開以下鏈接(嚴格按照以下格式,包括順序和大小寫,並請將參數替換為實際內容):

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE&component_appid=component_appid#wechat_redirect 

若提示“該鏈接無法訪問”,請檢查參數是否填寫錯誤,是否擁有scope參數對應的授權作用域權限。

參數說明

參數 是否必須 說明
appid 公眾號的appid
redirect_uri 重定向地址,需要urlencode,這里填寫的應是服務開發方的回調地址
response_type 填code
scope 授權作用域,擁有多個作用域用逗號(,)分隔
state 重定向后會帶上state參數,開發者可以填寫任意參數值,最多128字節
component_appid 服務方的appid,在申請創建公眾號服務成功后,可在公眾號服務詳情頁找到

返回說明

用戶允許授權后,將會重定向到redirect_uri的網址上,並且帶上code, state以及appid

redirect_uri?code=CODE&state=STATE&appid=APPID 

若用戶禁止授權,則重定向后不會帶上code參數,僅會帶上state參數

redirect_uri?state=STATE 

第二步:通過code換取access_token

請求方法

獲取第一步的code后,請求以下鏈接獲取access_token:

https://api.weixin.qq.com/sns/oauth2/component/access_token?appid=APPID&code=CODE&grant_type=authorization_code&component_appid=COMPONENT_APPID&component_access_token=COMPONENT_ACCESS_TOKEN 

需要注意的是,由於安全方面的考慮,對訪問該鏈接的客戶端有IP白名單的要求。

參數說明

參數 是否必須 說明
appid 公眾號的appid
code 填寫第一步獲取的code參數
grant_type 填authorization_code
component_appid 服務開發方的appid
component_access_token 服務開發方的access_token

返回說明

正確的返回:

  1.  
    {
  2.  
    "access_token":"ACCESS_TOKEN",
  3.  
    "expires_in":7200,
  4.  
    "refresh_token":"REFRESH_TOKEN",
  5.  
    "openid":"OPENID",
  6.  
    "scope":"SCOPE"
  7.  
    }
參數 說明
access_token 接口調用憑證
expires_in access_token接口調用憑證超時時間,單位(秒)
refresh_token 用戶刷新access_token
openid 授權用戶唯一標識
scope 用戶授權的作用域,使用逗號(,)分隔

錯誤返回樣例:

{"errcode":40029,"errmsg":"invalid code"} 

第三步:刷新access_token(如果需要)

由於access_token擁有較短的有效期,當access_token超時后,可以使用refresh_token進行刷新,refresh_token擁有較長的有效期(30天),當refresh_token失效的后,需要用戶重新授權。

請求方法

獲取第一步的code后,請求以下鏈接獲取access_token:

https://api.weixin.qq.com/sns/oauth2/component/refresh_token?appid=APPID&grant_type=refresh_token&component_appid=COMPONENT_APPID&component_access_token=COMPONENT_ACCESS_TOKEN&refresh_token=REFRESH_TOKEN 

參數說明

參數 是否必須 說明
appid 公眾號的appid
grant_type 填refresh_token
refresh_token 填寫通過access_token獲取到的refresh_token參數
component_appid 服務開發商的appid
component_access_token 服務開發方的access_token

返回說明

正確的返回:

  1.  
    {
  2.  
    "access_token":"ACCESS_TOKEN",
  3.  
    "expires_in":7200,
  4.  
    "refresh_token":"REFRESH_TOKEN",
  5.  
    "openid":"OPENID",
  6.  
    "scope":"SCOPE"
  7.  
    }
參數 說明
access_token 接口調用憑證
expires_in access_token接口調用憑證超時時間,單位(秒)
refresh_token 用戶刷新access_token
openid 授權用戶唯一標識
scope 用戶授權的作用域,使用逗號(,)分隔

錯誤返回樣例::

{"errcode":40029,"errmsg":"invalid code"} 

第四步:通過網頁授權access_token獲取用戶基本信息(需授權作用域為snsapi_userinfo)

如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取用戶信息了。

請求方法

http:GET(請使用https協議) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 

參數說明

參數 描述
access_token 網頁授權接口調用憑證,注意:此access_token與基礎支持的access_token不同
openid 用戶的唯一標識
lang 返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語

返回說明

正確時返回的JSON數據包如下:

  1.  
    {
  2.  
    "openid":" OPENID",
  3.  
    " nickname": NICKNAME,
  4.  
    "sex":"1",
  5.  
    "province":"PROVINCE"
  6.  
    "city":"CITY",
  7.  
    "country":"COUNTRY",
  8.  
    "headimgurl": "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
  9.  
    "privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
  10.  
    "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
  11.  
    }
參數 描述
openid 用戶的唯一標識
nickname 用戶昵稱
sex 用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知
province 用戶個人資料填寫的省份
city 普通用戶個人資料填寫的城市
country 國家,如中國為CN
headimgurl 用戶頭像,最后一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空。若用戶更換頭像,原有頭像URL將失效。
privilege 用戶特權信息,json 數組,如微信沃卡用戶為(chinaunicom)
unionid 只有在用戶將公眾號綁定到微信開放平台帳號后,才會出現該字段。詳見: 獲取用戶個人信息(UnionID機制

錯誤時微信會返回JSON數據包如下(示例為openid無效):

{"errcode":40003,"errmsg":" invalid openid "}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM