微信公眾號網(wǎng)頁授權(quán)

一、添加業(yè)務(wù)域名

需要注意兩點:
1)、端口必須是默認80端口,添加的域名不能帶端口號!(這是微信規(guī)定的)
2)、下載的txt驗證文件必須放置在提供的域名目錄下。
配置好之后,直接瀏覽器地址欄訪問這個路徑,能打開就成功了。
二、前端授權(quán)獲取code
微信授權(quán)的第一步,是前端獲取微信返回的code值,把code值傳遞給服務(wù)器端才能獲取到用戶的openid(或unionid)。
那怎么拿到微信返回的code值?
通過window.location.href跳轉(zhuǎn)下面鏈接進行獲取:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect//若提示“該鏈接無法訪問”,請檢查參數(shù)是否填寫錯誤,是否擁有scope參數(shù)對應(yīng)的授權(quán)作用域權(quán)限。
參數(shù)說明:
APPID:公眾號的唯一標(biāo)識,申請公眾號已經(jīng)分配好的;
REDIRECT_URL : 在成功拿到code值,你需要跳轉(zhuǎn)到你項目的路徑地址,比如login.html之類的;
SCOPE :有兩個固定值:snsapi_base(靜默授權(quán)),snsapi_userinfo(顯式授權(quán)) ,兩者任選其一;
STATE : 這個參數(shù)是自定義,什么值都行,你配置什么值,到時候跳轉(zhuǎn)回來后,原樣給你帶回來,需要注意的是有格式要求(重定向后會帶上state參數(shù),開發(fā)者可以填寫a-zA-Z0-9的參數(shù)值,最多128字節(jié));
靜默授權(quán)與顯式授權(quán)的區(qū)別:
1、以snsapi_base為scope發(fā)起的網(wǎng)頁授權(quán),是用來獲取進入頁面的用戶的openid的,并且是靜默授權(quán)并自動跳轉(zhuǎn)到回調(diào)頁的.(靜默的另一種:對于已關(guān)注公眾號的用戶,如果用戶從公眾號的會話或者自定義菜單進入本公眾號的網(wǎng)頁授權(quán)頁,即使是scope為snsapi_userinfo,也是靜默授權(quán),用戶無感知。)
2、以snsapi_userinfo為scope發(fā)起的網(wǎng)頁授權(quán),是用來獲取用戶的基本信息的。但這種授權(quán)首次需要用戶手動同意,并且由于用戶同意過,所以無須關(guān)注,就可在授權(quán)后獲取該用戶的基本信息。
前端獲取code的代碼:
methods: {//(以vue為例)getCode() { // 非靜默授權(quán),第一次有彈框this.code = ''var local = window.location.href // 獲取頁面urlvar appid = 'wx65adcf075369****'this.code = this.getUrlCode().code // 截取codeif (this.code == null || this.code === '') { // 如果沒有code,則去請求window.location.href =`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`} else {// 你自己的業(yè)務(wù)邏輯}},getUrlCode() { // 截取url中的code方法var url = location.searchthis.winUrl = urlvar theRequest = new Object()if (url.indexOf("?") != -1) {var str = url.substr(1)var strs = str.split("&")for (var i = 0; i < strs.length; i++) {theRequest[strs[i].split("=")[0]] = (strs[i].split("=")[1])}}return theRequest}}
代碼邏輯是先判斷有沒有code,沒有才去獲取,使用encodeURIComponent()對回調(diào)url進行編碼。
三、后端獲取openid(或unionid)
這里一般是有前端傳遞code給后端,由后端請求微信提供的接口,來獲取用戶的openid(或unionid)
1、獲取openid:
get請求接口鏈接如下:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
參數(shù)說明:
| appid | 是 | 公眾號的唯一標(biāo)識 |
| secret | 是 | 公眾號的appsecret |
| code | 是 | 填寫第一步獲取的code參數(shù) |
| grant_type | 是 | 填寫為authorization_code |
成功返回數(shù)據(jù)如下:
{"access_token":"ACCESS_TOKEN", //接口調(diào)用憑證"expires_in":7200,//access_token接口調(diào)用憑證超時時間,單位(秒)"refresh_token":"REFRESH_TOKEN",//用戶刷新access_token"openid":"OPENID",//授權(quán)用戶唯一標(biāo)識"scope":"SCOPE"//用戶授權(quán)的作用域,使用逗號(,)分隔}
如果你只需要得到opend_id,這里就結(jié)束了。如果需要獲取unionid則還需要請求下面接口。
2、獲取unionid
通過返回的openid和access_token獲取用戶信息,get請求接口如下:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
a:scope為snsapi_userinfo顯式授權(quán)返回的數(shù)據(jù)如下:
{"subscribe": 1,//用戶是否訂閱該公眾號標(biāo)識,值為0時代表此用戶沒有關(guān)注該公眾號"openid":" OPENID",//用戶的標(biāo)識,對當(dāng)前公眾號唯一" nickname": NICKNAME,//用戶的昵稱"sex":"1",//用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知"language": "zh_CN",//用戶的語言,簡體中文為zh_CN"province":"PROVINCE"//用戶所在省份"city":"CITY",//用戶所在城市"country":"COUNTRY",//用戶所在國家"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",//用戶頭像,最后一個數(shù)值代表正方形頭像大小(有0、46、64、96、132數(shù)值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空。若用戶更換頭像,原有頭像URL將失效。"subscribe_time": 1382694957,//用戶關(guān)注時間,為時間戳。如果用戶曾多次關(guān)注,則取最后關(guān)注時間"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL",//UnionID 來區(qū)分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(包括小程序),用戶的 UnionID 是唯一的"remark": "",//公眾號運營者對粉絲的備注,公眾號運營者可在微信公眾平臺用戶管理界面對粉絲添加備注"groupid": 0,//用戶所在的分組ID(兼容舊的用戶分組接口)"tagid_list":[128,2] //用戶被打上的標(biāo)簽ID列表}
ps:需要獲取用戶信息,必須使用scope為snsapi_userinfo的方式。
b:scope為 snsapi_base靜默授權(quán)返回的數(shù)據(jù)如下:
{"subscribe": 0,"openid":" OPENID","unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}
四、unionid與openid的區(qū)別
如果開發(fā)者擁有多個移動應(yīng)用、網(wǎng)站應(yīng)用、和公眾帳號(包括小程序),可通過unionid來區(qū)分用戶的唯一性,因為只要是同一個微信開放平臺帳號下的移動應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(包括小程序),用戶的unionid是唯一的。
換句話說,同一用戶,對同一個微信開放平臺下的不同應(yīng)用,unionid是相同的。
具體請查看公眾號開發(fā)文檔:https://developers.weixin.qq.com/doc/
本文完~
學(xué)習(xí)更多技能
請點擊下方公眾號
![]()

