1. 程式人生 > >H5微信網頁授權

H5微信網頁授權

一.網頁開發時的微信授權,首先公司要開通一個公眾號,然後需要配置相關的東西: 1.微信網頁授權:用於獲取使用者針對於公眾號的唯一標識openid。但只能新增一個域名,通常把它設定為一級域名。網頁授權回撥域名,首先,在微信公眾號請求使用者網頁授權之前,開發者需要先到公眾平臺官網中的“開發 - 介面許可權 - 網頁服務 - 網頁帳號 - 網頁授權獲取使用者基本資訊”的配置選項中,修改授權回撥域名。請注意,這裡填寫的是域名(是一個字串),而不是URL,因此請勿加 http:// 等協議頭;其次,授權回撥域名配置規範為全域名,比如需要網頁授權的域名為:www.qq.com,配置以後此域名下面的頁面http://www.qq.com/music.html 、

http://www.qq.com/login.html 都可以進行OAuth2.0鑑權。但http://pay.qq.com 、 http://music.qq.comhttp://qq.com無法進行OAuth2.0鑑權;最後,如果公眾號登入授權給了第三方開發者來進行管理,則不必做任何設定,由第三方代替公眾號實現網頁授權即可。 2.JS介面安全域名:分享到朋友圈(js-sdk)時用上,此介面要求將當前的介面url加密後,才可以分享到朋友圈,需要呼叫微信分享功能的時候就需要配置這個域名。登入微信公眾平臺進入“公眾號設定”的“功能設定”裡填寫“JS介面安全域名”,一般JS介面安全域名跟網頁授權回撥域名是一致的。 3.微信公眾號對應的AppId和Screct等。 在這裡插入圖片描述
在這裡插入圖片描述 二:在h5頁面上獲取code: //scope為snsapi_base //回撥頁面是使用者預設授權的,即調到我的繫結介面,代表僅僅獲取openid

// 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”}