摘要:寫在最后我前端剛入門沒多久,最近在公司實習,受到身邊同事影響,所以也開始寫文章來記錄自己的學習心得,這是我第一次寫文章,所以可能寫的不太好,大家對文章和代碼有什么建議歡迎提出來一起交流,謝謝
微信網頁授權并獲取用戶信息 介紹
在很多微信H5應用里,當用戶訪問第三方應用時就需要進行微信網頁授權,并且很多涉及安全的操作我們必須要先獲取用戶信息才能繼續,本文章簡單介紹了微信授權流程,并通過申請微信測試賬號來模擬網頁授權,用戶在授權頁點擊確定登錄后獲取用戶信息并顯示在前端頁面,最后效果如下圖
工具及開發準備 1. 微信開發者工具及微信測試號因為是微信授權,所以必須要在微信環境下使用,首先我們要在這里安裝微信開發者工具,因為我們沒有自己的應用,所以還需要在微信公眾平臺申請一個接口測試號,這個接口測試號就相當于我們的第三方應用。
2. 參數設置登陸測試號后可以查看到自己的appId和appsecret信息,將體驗接口權限表里的網頁服務的網頁授權獲取用戶基本信息修改為127.0.0.1:8800,該地址就是用戶確認授權后回調的地址即我們應用的后臺處理地址,如下圖
最后拿出自己微信掃碼關注該測試號即可,如下圖所示
微信授權流程介紹具體流程及詳細介紹大家可以到官網微信公眾平臺技術文檔查看,大致分為四步:
引導用戶進入授權頁面同意授權,此時會調用微信api獲取code
授權通過后會帶上code參數請求回調地址
后臺獲取code,再次調用微信接口換取網頁授權access_token和openid
通過網頁授權access_token和openid獲取用戶基本信息(如果有unionid還會獲取到unionid參數)
正式開始詳細代碼可以在github上下載,地址https://github.com/wangfengyu...1. 原始代碼
let express = require("express"); const https = require("https"); let app = express(); //appID let appID = `wxec6fa9e9bc03d885`; //appsecret let appSerect = `4c8a0d14cff08959b4e17334cabf9cf0`; //點擊授權后重定向url地址 let redirectUrl = `/getUserInfo`; let host = `http://127.0.0.1:3000`; //微信授權api,接口返回code,點擊授權后跳轉到重定向地址并帶上code參數 let authorizeUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appID}&redirect_uri=` + `${host}${redirectUrl}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect` app.get("/login", function(req, res) { res.sendFile(path.resolve(__dirname,"login.html")); }); app.get("/auth", function(req, res) { res.writeHead(302, { "Location": authorizeUrl }); res.end(); }); app.get("/getUserInfo", function(req, res) { let code = req.query.code; let getaccess = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=` + `${appID}&secret=${appSerect}&code=${code}&grant_type=authorization_code`; //通過拿到的code和appID、app_serect獲取access_token和open_id https.get(getaccess, (resText) => { var ffffd = ""; resText.on("data", (d) => { ffffd += d; }); resText.on("end", () => { // console.log(ffffd); var obj = JSON.parse(ffffd); var access_token = obj.access_token; var open_id = obj.openid; //通過上一步獲取的access_token和open_id獲取userInfo即用戶信息 let getUserUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${open_id}&lang=zh_CN`; https.get(getUserUrl, (resText) => { user = ""; resText.on("data", (d) => { user += d; }); resText.on("end", () => { console.log(user); var userobj = JSON.parse(user); res.send(userobj); console.log(userobj); }); }) }); }).on("error", (e) => { console.error(e); }); // res.end(); }); app.listen(3000);
具體使用時要將appID和appSerect換成你對應的參數即可,因為我們的請求是要按一定順序的,但是node發送請求是異步的,所以我們的請求嵌套了三層,代碼很難看,所以這里可以采用ES6的async和await解決異步回調地獄。
2. 使用ES6的async和await的改進代碼async function wxAuth(req, res) { //解析querystring獲取URL中的code值 let code = req.query.code; //通過拿到的code和appID、app_serect獲取返回信息 let resObj = await getAccessToken(code); //解析得到access_token和open_id let access_token = resObj.access_token; let open_id = resObj.openid; //通過上一步獲取的access_token和open_id獲取userInfo即用戶信息 let userObj = await getUserInfo(access_token, open_id); console.log(userObj); res.render(path.resolve(__dirname,"userInfo.ejs"), {userObj: userObj}); // res.send(userObj); } //通過拿到的code和appID、app_serect獲取access_token和open_id function getAccessToken(code) { return new Promise( (resolve, reject) => { let getAccessUrl = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=` + `${appID}&secret=${appSerect}&code=${code}&grant_type=authorization_code`; https.get(getAccessUrl, (res) => { var resText = ""; res.on("data", (d) => { resText += d; }); res.on("end", () => { var resObj = JSON.parse(resText); resolve(resObj); }); }).on("error", (e) => { console.error(e); }); }); } //通過上一步獲取的access_token和open_id獲取userInfo即用戶信息 function getUserInfo(access_token, open_id) { return new Promise( (resolve, reject) => { let getUserUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${access_token}&openid=${open_id}&lang=zh_CN`; https.get(getUserUrl, (res) => { var resText = ""; res.on("data", (d) => { resText += d; }); res.on("end", () => { var userObj = JSON.parse(resText); resolve(userObj); }); }).on("error", (e) => { console.error(e); }); }) } app.listen(8800);
修改后代碼流程清晰了很多,最后將獲取到的userObj通過ejs模板渲染在前端頁面,就能看到文章最開始展現的效果圖。
寫在最后我前端剛入門沒多久,最近在公司實習,受到身邊同事影響,所以也開始寫文章來記錄自己的學習心得,這是我第一次寫文章,所以可能寫的不太好,大家對文章和代碼有什么建議歡迎提出來一起交流,謝謝!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96349.html
摘要:淺析微信支付微信公眾號網頁授權本文是淺析微信支付系列文章的第四篇,主要講解微信支付前如何獲取獲取網頁授權及用戶信息獲取。淺析微信支付系列已經更新三篇了喲,沒有看過的朋友們可以看一下哦。 淺析微信支付:微信公眾號網頁授權 本文是【淺析微信支付】系列文章的第四篇,主要講解微信支付前如何獲取獲取網頁授權及用戶信息獲取。 淺析微信支付系列已經更新三篇了喲~,沒有看過的朋友們可以看一下哦。 淺...
摘要:微信網頁授權,基于適配方案,開發的微信授權方案。項目地址又又又一次來寫微信網頁授權,一年前寫過的微信授權解決方案。 vue微信網頁授權,基于vue-cli3.0+webpack 4+vant ui + sass+ rem適配方案+axios,開發的微信授權方案。項目地址:vue-wechat-auth 又又又一次來寫微信網頁授權,一年前寫過的 [vue 微信授權解決方案]。 參考了[v...
摘要:項目背景因為項目采用前后端完全分離方案,所以,無法使用常規的微信授權登錄作法,需要采用實現微信授權登錄。其實實現這個也麻煩,在實現之前,我們需要了解一下微信授權的整個流程。用戶微信登錄授權以后回調過來的會攜帶兩個參數,第一個是另一個就是。 項目背景 因為項目采用前后端完全分離方案,所以,無法使用常規的微信授權登錄作法,需要采用 ajax 實現微信授權登錄。 需求分析 因為本人是一個ph...
摘要:在實際開發中,無論是做端端還是微信公眾號等類型的項目的時候,或多或少都會涉及到微信相關的開發,最近公司項目要求實現微信網頁授權,并獲取微信用戶基本信息的功能及微信分享的功能,現在總算完成了,但開發過程中遇到好幾個坑。 在實際開發中,無論是做PC端、WebApp端還是微信公眾號等類型的項目的時候,或多或少都會涉及到微信相關的開發,最近公司項目要求實現微信網頁授權,并獲取微信用戶基本信息的...
閱讀 2968·2023-04-25 19:45
閱讀 2690·2021-11-19 09:40
閱讀 690·2021-10-14 09:49
閱讀 2668·2021-09-30 09:47
閱讀 2201·2021-09-26 09:55
閱讀 1220·2021-09-22 16:01
閱讀 2809·2019-08-30 14:19
閱讀 706·2019-08-29 16:44