微信公衆平臺開發 網頁受權獲取用戶基本信息

網頁受權獲取用戶基本信息

 

若是用戶在微信中(Web微信除外)訪問公衆號的第三方網頁,公衆號開發者能夠經過此接口獲取當前用戶基本信息(包括暱稱、性別、城市、國家)。利用用戶信息,能夠實現體驗優化、用戶來源統計、賬號綁定、用戶身份鑑權等功能。請注意,「獲取用戶基本信息接口是在用戶和公衆號產生消息交互時,才能根據用戶OpenID獲取用戶基本信息,而網頁受權的方式獲取用戶基本信息,則無需消息交互,只是用戶進入到公衆號的網頁,就可彈出請求用戶受權的界面,用戶受權後,就可得到其基本信息(此過程甚至不須要用戶已經關注公衆號。)」php


本接口是經過OAuth2.0來完成網頁受權的,是安全可靠的,關於OAuth2.0的詳細介紹,能夠參考OAuth2.0協議標準。在微信公衆號請求用戶網頁受權以前,開發者須要先到公衆平臺網站的個人服務頁中配置受權回調域名。html

關於配置受權回調域名的說明:web

受權回調域名配置規範爲全域名,好比須要網頁受權的域名爲:www.qq.com,配置之後此域名下面的頁面http://www.qq.com/music.htmlhttp://www.qq.com/login.html 均可以進行OAuth2.0鑑權。但http://pay.qq.comhttp://music.qq.comhttp://qq.com沒法進行OAuth2.0鑑權。

具體而言,網頁受權流程分爲三步:json

  1. 引導用戶進入受權頁面贊成受權,獲取code
  2. 經過code換取網頁受權access_token(與基礎支持中的access_token不一樣)
  3. 若是須要,開發者能夠刷新網頁受權access_token,避免過時
  4. 經過網頁受權access_token和openid獲取用戶基本信息

目錄

[隱藏]

第一步:用戶贊成受權,獲取code

在確保微信公衆帳號擁有受權做用域(scope參數)的權限的前提下(服務號得到高級接口後,默認帶有scope參數中的snsapi_base和snsapi_userinfo),引導關注者打開以下頁面:api

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
若提示「該連接沒法訪問」,請檢查參數是否填寫錯誤,是否擁有scope參數對應的受權做用域權限。
參考連接(請在微信客戶端中打開此連接體驗)
Scope爲snsapi_base
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=http%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
Scope爲snsapi_userinfo
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

參數說明數組

參數 是否必須 說明
appid 公衆號的惟一標識
redirect_uri 受權後重定向的回調連接地址
response_type 返回類型,請填寫code
scope 應用受權做用域,snsapi_base (不彈出受權頁面,直接跳轉,只能獲取用戶openid),snsapi_userinfo (彈出受權頁面,可經過openid拿到暱稱、性別、所在地。而且,即便在未關注的狀況下,只要用戶受權,也能獲取其信息
state 重定向後會帶上state參數,開發者能夠填寫任意參數值
#wechat_redirect 直接在微信打開連接,能夠不填此參數。作頁面302重定向時候,必須帶此參數

下圖爲scope等於snsapi_userinfo時的受權頁面:安全

網頁受權

用戶贊成受權後微信

若是用戶贊成受權,頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。若用戶禁止受權,則重定向後不會帶上code參數,僅會帶上state參數redirect_uri?state=STATEapp

code說明 :
code做爲換取access_token的票據,每次用戶受權帶上的code將不同,code只能使用一次,5分鐘未被使用自動過時。

第二步:經過code換取網頁受權access_token

首先請注意,這裏經過code換取的網頁受權access_token,與基礎支持中的access_token不一樣。公衆號可經過下述接口來獲取網頁受權access_token。若是網頁受權的做用域爲snsapi_base,則本步驟中獲取到網頁受權access_token的同時,也獲取到了openid,snsapi_base式的網頁受權流程即到此爲止。微信公衆平臺

請求方法

獲取code後,請求如下連接獲取access_token: 
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

參數說明

參數 是否必須 說明
appid 公衆號的惟一標識
secret 公衆號的appsecret
code 填寫第一步獲取的code參數
grant_type 填寫爲authorization_code

返回說明

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

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE"
}
參數 描述
access_token 網頁受權接口調用憑證,注意:此access_token與基礎支持的access_token不一樣
expires_in access_token接口調用憑證超時時間,單位(秒)
refresh_token 用戶刷新access_token
openid 用戶惟一標識,請注意,在未關注公衆號時,用戶訪問公衆號的網頁,也會產生一個用戶和公衆號惟一的OpenID
scope 用戶受權的做用域,使用逗號(,)分隔


錯誤時微信會返回JSON數據包以下(示例爲Code無效錯誤):

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

全局返回碼說明

第三步:刷新access_token(若是須要)

因爲access_token擁有較短的有效期,當access_token超時後,可使用refresh_token進行刷新,refresh_token擁有較長的有效期(7天、30天、60天、90天),當refresh_token失效的後,須要用戶從新受權。

請求方法

獲取第二步的refresh_token後,請求如下連接獲取access_token: 
https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
參數 是否必須 說明
appid 公衆號的惟一標識
grant_type 填寫爲refresh_token
refresh_token 填寫經過access_token獲取到的refresh_token參數

返回說明

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

{
   "access_token":"ACCESS_TOKEN",
   "expires_in":7200,
   "refresh_token":"REFRESH_TOKEN",
   "openid":"OPENID",
   "scope":"SCOPE"
}
參數 描述
access_token 網頁受權接口調用憑證,注意:此access_token與基礎支持的access_token不一樣
expires_in access_token接口調用憑證超時時間,單位(秒)
refresh_token 用戶刷新access_token
openid 用戶惟一標識
scope 用戶受權的做用域,使用逗號(,)分隔


錯誤時微信會返回JSON數據包以下(示例爲Code無效錯誤):

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

全局返回碼說明

第四步:拉取用戶信息(需scope爲 snsapi_userinfo)

若是網頁受權做用域爲snsapi_userinfo,則此時開發者能夠經過access_token和openid拉取用戶信息了。

請求方法

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

參數說明

參數 描述
access_token 網頁受權接口調用憑證,注意:此access_token與基礎支持的access_token不一樣
openid 用戶的惟一標識

返回說明

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

{
   "openid":" OPENID",
   " nickname": NICKNAME,
   "sex":"1",
   "province":"PROVINCE"
   "city":"CITY",
   "country":"COUNTRY",
    "headimgurl":    "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", 
	"privilege":[
	"PRIVILEGE1"
	"PRIVILEGE2"
    ]
}
參數 描述
openid 用戶的惟一標識
nickname 用戶暱稱
sex 用戶的性別,值爲1時是男性,值爲2時是女性,值爲0時是未知
province 用戶我的資料填寫的省份
city 普通用戶我的資料填寫的城市
country 國家,如中國爲CN
headimgurl 用戶頭像,最後一個數值表明正方形頭像大小(有0、4六、6四、9六、132數值可選,0表明640*640正方形頭像),用戶沒有頭像時該項爲空
privilege 用戶特權信息,json 數組,如微信沃卡用戶爲(chinaunicom)


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

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

 

 

看詳細技術過程請點擊  微信公衆平臺開發(71)OAuth2.0網頁受權

 

 

 
   
相關文章
相關標籤/搜索