需求:以微信公眾號為入口,提供h5頁面共用戶進行業務操作,用戶信息完全依賴公眾號;
方案:創建公眾號-》用戶關注公眾號-》靜默授權到h5頁面-》h5頁面獲取用戶信息-》用戶在h5頁面上進行業務操作;
准備:公眾號一個(必須是需要認證的,認證需要硬性條件,無奈只能用測試賬號,測試賬號有一個坑的地方,下邊會講到), 可以進行域名訪問80端口的服務器一台(域名和服務器都好搞也便宜,但是域名需要備案才能訪問,無奈只能找內網穿透的工具,我用的是natapp,一開始用的是免費版的,但是域名很不穩定,每變一次都需要改代碼改設置,索性在natapp上買了一個vpi隧道9塊錢一個月,然后又在上面買了個域名,3塊錢一年,用了一下午還算穩定,用來做開發綽綽有余了)
工具:VS+HBuilderX+Mysql+微信開發工具
步驟:
1 .net創建webapi提供接口 實現功能A 用戶驗證和信息獲取 2 具體業務接口
2 mysql數據庫存儲用戶信息和業務數據
3 uni-app創建后h5頁面
也沒什么高深的代碼,分享一下頁面授權部分代碼
onLoad() { var appId = 'xxx'; var reg = new RegExp("(^|&)" + "code" + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); var code = ""; if (r != null) code = unescape(r[2]); if (code == null || code == "") { window.location.href = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appId + "&redirect_uri=" + encodeURIComponent("xxx") + "&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect"; //頁面授權 } else {
//授權后根據返回的code獲取用戶信息 uni.request({ url: 'xxxx', header: { 'content-type': 'application/x-www-form-urlencoded' //自定義請求頭信息 }, method: 'POST', data: { Code: code }, success: res => { this.Data= res.data; }, fail: fail => {}, complete: () => {} }); } }
踩坑的地方:
a js跨域的問題,網上解決方案很多,我索性把web站點和api站點部署到一個站點下,其中一個布置成站點,另一個布置成該站點下的應用程序;
b 如果用戶尚未關注公眾號,則提示需關注該公眾號,錯誤碼10006。眼下之意不關注不能玩。問題原因網上大都說是測試賬號的原因;
c 我一開始授權那里思路錯了,按照需求,因為用戶是在關注公眾號的前提下操作,所以我只要通過靜默授權拿到用戶的openId就可以通過公眾號接口拿到用戶詳細信息 ,一開始以為一定需要非靜默授權。非靜默授權一般都是用戶沒有關注公眾號的情況下才會用的。
d 之前沒接觸過公眾號開發,剛開始跟幾個同事討論這個東西,他們竟然都很肯定的說openid每一次都會變/或者重新關注公眾號后會變,今天事實證明他們錯了。因為openid變掉的話我都沒辦法標識用戶了,搞得慌慌的。看來實踐出真知,而且自己不確定的技術一定不要說的很確定的樣子,對人對己都不好,切記。