連接:https://blog.csdn.net/ASZJBGD/article/details/82838356java
主要流程分爲兩步:json
1.獲取codeapi
2.經過code換取accesstoken數組
流程圖:安全
第一步:請求CODE微信
請求方法app
在確保微信公衆帳號擁有受權做用域(scope參數)的權限的前提下(通常而言,已微信認證的服務號擁有snsapi_base和snsapi_userinfo),使用微信客戶端打開如下連接(嚴格按照如下格式,包括順序和大小寫,並請將參數替換爲實際內容):url
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參數對應的受權做用域權限。spa
參數說明.net
參數 | 是否必須 | 說明 |
---|---|---|
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 |
返回說明
正確的返回:
參數 | 說明 |
---|---|
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 |
返回說明
正確的返回:
參數 | 說明 |
---|---|
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數據包以下:
參數 | 描述 |
---|---|
openid | 用戶的惟一標識 |
nickname | 用戶暱稱 |
sex | 用戶的性別,值爲1時是男性,值爲2時是女性,值爲0時是未知 |
province | 用戶我的資料填寫的省份 |
city | 普通用戶我的資料填寫的城市 |
country | 國家,如中國爲CN |
headimgurl | 用戶頭像,最後一個數值表明正方形頭像大小(有0、4六、6四、9六、132數值可選,0表明640*640正方形頭像),用戶沒有頭像時該項爲空。若用戶更換頭像,原有頭像URL將失效。 |
privilege | 用戶特權信息,json 數組,如微信沃卡用戶爲(chinaunicom) |
unionid | 只有在用戶將公衆號綁定到微信開放平臺賬號後,纔會出現該字段。詳見: 獲取用戶我的信息(UnionID機制) |
錯誤時微信會返回JSON數據包以下(示例爲openid無效):
{"errcode":40003,"errmsg":" invalid openid "}