国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 課堂 > 小程序 > 正文

詳解微信小程序開發(fā)用戶授權(quán)登陸

2020-03-21 15:59:29
字體:
供稿:網(wǎng)友

本篇將幫助讀者實(shí)現(xiàn)基于 微信開發(fā)者工具 & C#環(huán)境 下的用戶在小程序上的授權(quán)登陸。

準(zhǔn)備:

微信開發(fā)者工具下載地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

微信小程序開發(fā)文檔:https://developers.weixin.qq.com/miniprogram/dev/index.html

開發(fā):

在開發(fā)之初,我們需要先明確微信方已經(jīng)制定好的授權(quán)登陸流程,參看 官方API - 登陸接口。

你會看到微信方為開發(fā)者制定好的登陸授權(quán)流程:

微信小程序,小程序開發(fā),用戶授權(quán)登陸

如圖,即為一個順向的用戶登陸授權(quán)的流程。

為什么說它是一個順向的流程呢?因?yàn)樵谡嬲男〕绦蜷_發(fā)中,我們并不確定用戶何時需要起調(diào)如上的登陸流程(如:用戶在某些特定場景下的憑證丟失,但Ta并沒有退出小程序而是在小程序內(nèi)部做跳轉(zhuǎn)等相關(guān)操作,即有可能導(dǎo)致一些預(yù)期之外的異常),所以,我們需要在這個順向的流程之外,加一層檢測機(jī)制,來解決這些異常場景,而官方API中,wx.checkSession 剛好可以一定程度上解決這個問題。

那么,我們的認(rèn)證流程其實(shí)應(yīng)該是:

小程序 wx.checkSession 校驗(yàn)登陸態(tài)為失效

success :接口調(diào)用成功的回調(diào)函數(shù),session_key未過期,流程結(jié)束;    

fail :接口調(diào)用失敗的回調(diào)函數(shù),session_key已過期

小程序端 wx.login 獲取code 并 wx.request 提交code給己方服務(wù)器

己方服務(wù)器 提交Appid + appSecret + code 到微信方服務(wù)器 獲取 session_key & openid

己方服務(wù)器 根據(jù) session_key & openid  生成 3rd_session(微信方提出的基于安全性的考慮,建議開發(fā)者不要將openid等關(guān)鍵性信息進(jìn)行數(shù)據(jù)傳輸) 并返回 3rd_session 到小程序端

小程序端 wx.setStorage 存儲 3rd_session ( 在后續(xù)用戶操作需要憑證時 附帶該參數(shù) )

小程序端 wx.getUserInfo 獲取用戶信息 + wx.getStorage 獲取 3rd_session 數(shù)據(jù)后,一并 wx.request 提交給己方服務(wù)器

己方服務(wù)器 SQL用戶數(shù)據(jù)信息更新,流程結(jié)束;

思路整理完畢,接下來實(shí)現(xiàn)流程

小程序端:

在小程序中,新建一個通用的JS做基礎(chǔ)支持

 微信小程序,小程序開發(fā),用戶授權(quán)登陸

并在一些需要引用的頁面進(jìn)行引用

var common = require("../Common/Common.js")

接著,在Common.js 中實(shí)現(xiàn)邏輯

//用戶登陸function userLogin() { wx.checkSession({  success: function () {   //存在登陸態(tài)  },  fail: function () {   //不存在登陸態(tài)   onLogin()  } })} function onLogin() { wx.login({  success: function (res) {   if (res.code) {    //發(fā)起網(wǎng)絡(luò)請求    wx.request({     url: 'Our Server ApiUrl',     data: {      code: res.code     },     success: function (res) {      const self = this      if (邏輯成功) {       //獲取到用戶憑證 存儲 3rd_session        var json = JSON.parse(res.data.Data)       wx.setStorage({        key: "third_Session",         data: json.third_Session       })       getUserInfo()      }      else {       }     },     fail: function (res) {      }    })   }  },  fail: function (res) {   } }) } function getUserInfo() { wx.getUserInfo({  success: function (res) {   var userInfo = res.userInfo   userInfoSetInSQL(userInfo)  },  fail: function () {   userAccess()  } })} function userInfoSetInSQL(userInfo) { wx.getStorage({  key: 'third_Session',  success: function (res) {   wx.request({    url: 'Our Server ApiUrl',    data: {     third_Session: res.data,     nickName: userInfo.nickName,     avatarUrl: userInfo.avatarUrl,     gender: userInfo.gender,     province: userInfo.province,     city: userInfo.city,     country: userInfo.country    },    success: function (res) {     if (邏輯成功) {      //SQL更新用戶數(shù)據(jù)成功     }     else {      //SQL更新用戶數(shù)據(jù)失敗     }    }   })  } })}

至此,小程序端的流程基本實(shí)現(xiàn)完畢,接著實(shí)現(xiàn)己方服務(wù)API

Login 接口邏輯范例

if (dicRequestData.ContainsKey("CODE"))    {      string apiUrl = string.Format("https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code", ProUtil.SmartAppID, ProUtil.SmartSecret, dicRequestData["CODE"]);          HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(apiUrl);      myRequest.Method = "GET";      HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();      StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);      string content = reader.ReadToEnd();      myResponse.Close();      reader.Close();      reader.Dispose();       //解析      userModel ReMsg = JSONUtil.JsonDeserialize<userModel>(content); //解析      if ((!string.IsNullOrWhiteSpace(ReMsg.openid)) && (!string.IsNullOrWhiteSpace(ReMsg.session_key)))      {        // 成功 自定義生成3rd_session與openid&session_key綁定并返回3rd_session       }      else      {        // 錯誤 未獲取到用戶openid 或 session      }    }    else    {      // 錯誤 未獲取到用戶憑證code    }

UserInfoUpdate 接口在此不加贅述,用戶根據(jù)自身情況對數(shù)據(jù)進(jìn)行操作即可,微信方調(diào)用成功時返回的相關(guān)參數(shù)信息如下

微信小程序,小程序開發(fā),用戶授權(quán)登陸

至此,完成了小程序基本的授權(quán)登陸及用戶信息的獲取。

認(rèn)真看完以上所有后

有啥不懂的 歡迎留言提問~

注:以上內(nèi)容有所刪減,僅保留通用內(nèi)容。在具體項(xiàng)目中必定存在部分邏輯需要調(diào)整,引鑒的同學(xué)請注意

以上所述是小編給大家介紹的微信小程序開發(fā)用戶授權(quán)登陸詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VEVB武林網(wǎng)網(wǎng)站的支持!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 瑞丽市| 辛集市| 会东县| 荃湾区| 左权县| 航空| 大荔县| 靖江市| 漳浦县| 专栏| 长治市| 抚顺县| 九台市| 旬阳县| 江北区| 伊春市| 治多县| 威海市| 枣阳市| 鄂温| 军事| 金塔县| 白山市| 肃宁县| 合肥市| 磐石市| 临夏市| 长丰县| 鄂托克前旗| 收藏| 定结县| 琼海市| 龙海市| 固原市| 荆门市| 遂昌县| 乌拉特前旗| 调兵山市| 通河县| 海林市| 城步|