H5微信網頁授權
一.網頁開發時的微信授權,首先公司要開通一個公眾號,然後需要配置相關的東西:
1.微信網頁授權:用於獲取使用者針對於公眾號的唯一標識openid。但只能新增一個域名,通常把它設定為一級域名。網頁授權回撥域名,首先,在微信公眾號請求使用者網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 介面許可權 - 網頁服務 - 網頁帳號 - 網頁授權獲取使用者基本資訊”的配置選項中,修改授權回撥域名。請注意,這裡填寫的是域名(是一個字串),而不是URL,因此請勿加 http:// 等協議頭;其次,授權回撥域名配置規範為全域名,比如需要網頁授權的域名為:www.qq.com,配置以後此域名下面的頁面http://www.qq.com/music.html 、
// redirect_uri urlencode連結
|引數 是否必須 說明 appid 是 公眾號的唯一標識 redirect_uri 是 授權後重定向的回撥連結地址,請使用urlencode對連結進行處理 response_type 是 返回型別,請填寫code scope 是 應用授權作用域,snsapi_base (不彈出授權頁面,直接跳轉,只能獲取使用者openid),snsapi_userinfo (彈出授權頁面,可通過openid拿到暱稱、性別、所在地。並且,即使在未關注的情況下,只要使用者授權,也能獲取其資訊) state 否 重定向後會帶上state引數,開發者可以填寫a-zA-Z0-9的引數值,最多128位元組 #wechat_redirect 是 無論直接開啟還是做頁面302重定向時候,必須帶此引數
正常情況,授權成功頁面將跳轉至 redirect_uri/?code=CODE&state=STATE。 獲取code:
var getRequest = this.getRequest();
if (getRequest.code) {
this.code = getRequest.code;
} else {
var pageUrl = window.location.href
.replace(/[/]/g, "%2f")
.replace(/[:]/g, "%3a")
.replace(/[#]/g, "%23")
.replace(/[&]/g, "%26")
.replace(/[=]/g, "%3d");
var url =
"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +
"填寫網頁授權回撥域名所對應的那個公眾號的AppId" +
"&redirect_uri=" +
pageUrl + //這裡放當前頁面的地址
"&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect";
window.location.href = url;
}
console.log("CODE:" + getRequest.code);
//若h5存在跨域問題,可以讓後臺呼叫此介面 引數說明
引數 | 是否必須 | 說明 |
---|---|---|
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超時後,可以使用refresh_token進行重新整理,refresh_token有效期為30天,當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” }
第四步:拉取使用者資訊(需scope為 snsapi_userinfo)
如果網頁授權作用域為snsapi_userinfo,則此時開發者可以通過access_token和openid拉取使用者資訊了。
請求方法
**引數說明**
引數 描述:
access_token | 網頁授權介面呼叫憑證,注意:此access_token與基礎支援的access_token不同 |
---|---|
openid | 使用者的唯一標識 |
lang | 返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語 |
正確時返回的JSON資料包如下:
{ "openid":" OPENID",
" nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE"
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
引數 | 描述 |
---|---|
openid | 使用者的唯一標識 |
nickname | 使用者暱稱 |
sex | 使用者的性別,值為1時是男性,值為2時是女性,值為0時是未知 |
province | 使用者個人資料填寫的省份 |
city | 普通使用者個人資料填寫的城市 |
country | 國家,如中國為CN |
headimgurl | 使用者頭像,最後一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),使用者沒有頭像時該項為空。若使用者更換頭像,原有頭像URL將失效。 |
privilege | 使用者特權資訊,json 陣列,如微信沃卡使用者為(chinaunicom) |
unionid | 只有在使用者將公眾號繫結到微信開放平臺帳號後,才會出現該欄位。 |
第五步:檢驗授權憑證(access_token)是否有效 請求方法
引數 | 描述 |
---|---|
access_token | 網頁授權介面呼叫憑證,注意:此access_token與基礎支援的access_token不同 |
openid | 使用者的唯一標識 |
返回說明 正確的JSON返回結果:
{ “errcode”:0,“errmsg”:“ok”}
錯誤時的JSON返回示例:
{ “errcode”:40003,“errmsg”:“invalid openid”}