openId是用戶在當前公衆號下的惟一標識(‘身份證’)。在微信中進行微信分享、支付等操做時須要用戶的openid。H5要在微信中獲取到用戶openid,須要得到微信受權,受權分兩種方式:靜默受權和手動受權html
靜默受權:用戶使用過程當中不知不覺獲取到openid,不須要用戶手動受權,可是會在原頁面進行刷新前端
手動受權:須要用戶點擊贊成受權,能獲取到更多用戶信息web
(我本次使用的是靜默受權,因此詳細記錄一下靜默受權的方式)後端
一、首先,要有一個公衆號,以及公衆號的appid,而後在公衆號後臺上設置你的網頁受權域名(注意不加http://和https://)api
二、靜默受權,在進入網頁以後,訪問微信提供的url,在其中設置受權方式以及回調頁面url,返回的頁面url中就會包含一個code參數瀏覽器
(注意:此處的url是轉碼事後的url)緩存
url轉碼方法:微信
var url = this.urlencode(url_old);微信開發
// 編碼函數app
urlencode (str) {
str = (str + '').toString();
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
},
具體獲取code方法:
// 獲取code
getBaseInfos(){
var url_code = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+你的appid+"&redirect_uri="+當前頁面url+"&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect";
window.location.href = url_code;//打開這個連接,你的url後面就會跟上code的參數
}
若是配置參數所有正確,那麼此時經過回調地址刷新頁面後,你就會看到在地址欄中的code了。
注意:要監測當前url中是否含有code參數,若是包含的話就繼續下一步操做,不然頁面是一直重複刷新反覆獲取code。且要注意code碼只能使用一次,使用事後就失效了。
三、拿到code以後,須要把code傳給後端,後端去請求微信獲取openid等參數,前端是獲取不到的,微信開發文檔中是這麼寫的:
後端請求成功後,獲得的數據應該是這樣的
四、這樣咱們就能獲取到用戶的openid進行開發了
判斷是否微信內置瀏覽器,若是是微信內置瀏覽器的話,去獲取用戶的openid,不然在外面瀏覽器中打開獲取不到code是會報錯的。
一、判斷是不是微信瀏覽器
isWeiXin() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger') {
return true;
} else {
return false;
}
}
二、根據以上函數判斷值進行不一樣的操做
if(this.isWeiXin()){
console.log(" 是來自微信內置瀏覽器")
if(url_s.indexOf("code") > 0 ){// 若是url字符串包含code字段
this.code = cs.code;//則獲取code參數值並存入緩存
localStorage.setItem("code", cs.token);
this.getOpenId();//繼續下一步獲取openid
}else{//不然,就先調取函數獲取code
this.getBaseInfos();
}
}else{
console.log("不是來自微信內置瀏覽器")
}