亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

首頁 微信小程序 小程序開發(fā) 介紹微信小程序開發(fā)之用戶授權(quán)登錄

介紹微信小程序開發(fā)之用戶授權(quán)登錄

Apr 08, 2021 am 10:34 AM

介紹微信小程序開發(fā)之用戶授權(quán)登錄

本篇將幫助讀者實(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 - 登陸接口。

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

?

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

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

那么,我們的認(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 存儲(chǔ) 3rd_session ( 在后續(xù)用戶操作需要憑證時(shí) 附帶該參數(shù) )

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

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

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

小程序端:

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

并在一些需要引用的頁面進(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ò)請(qǐng)求
        wx.request({
          url: 'Our Server ApiUrl',
          data: {
            code: res.code
          },
          success: function (res) {
            const self = this
            if (邏輯成功) {
              //獲取到用戶憑證 存儲(chǔ) 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
            {
                // 錯(cuò)誤 未獲取到用戶openid 或 session
            }
        }
        else
        {
            // 錯(cuò)誤 未獲取到用戶憑證code
        }

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

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

最后的最后,是從別人那里學(xué)來的賺零錢小套路~ 賞點(diǎn)小錢鼓勵(lì)一下我吧 !?! !?

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

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

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

相關(guān)免費(fèi)學(xué)習(xí)推薦:微信小程序開發(fā)

以上是介紹微信小程序開發(fā)之用戶授權(quán)登錄的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72