微信小程序开发用户授权登录

2020-12-24
来源:

本文将帮助读者基于微信开发人员工具和C#环境用户在小程序上实现授权登录。

准备工作:

微信开发人员工具下载链接:

微信小程序开发文档:

发展:

在开发之初,我们需要澄清微信制定的授权登录过程,请参阅API官方登录界面。

您会看到微信一方为开发人员制定了登录授权流程:

如图所示,它是转发用户登录授权的流程。

为什么它是向前流?因为在小程序的实际开发中,我们不确定用户何时需要调整上述登录过程(例如:在某些特定情况下,用户的凭据丢失了,但是Ta并没有退出小程序,而在小程序中]内部跳转和其他相关操作可能会导致意外异常。因此,除了这种前向流程之外,我们还需要添加一种检测机制来解决这些异常情况。官方的API,wx.checkSession可以在一定程度上解决这个问题。

因此,我们的认证过程实际上应该是:

-小程序 wx.checkSession验证登录状态无效

-success:成功的接口调用的回调函数,session_key尚未到期,并且过程结束;

-fail:接口调用失败,session_key已过期的回调函数

-“ 小程序终端wx.login获取代码,wx.request将代码提交到您的服务器

-“您自己的服务器向微信服务器提交Appid + appSecret +代码以获取session_key和openid

-“您自己的服务器根据session_key和openid生成3rd_session(微信提出了安全考虑,建议开发人员不要为传输数据而传输诸如openid之类的关键信息),并将3rd_session返回到小程序端

-“ 小程序端wx.setStorage存储3rd_session(当后续用户操作需要凭据时,将附加此参数)

-“ 小程序终端wx.getUserInfo获取用户信息+ wx.getStorage获取3rd_session数据,并使用wx.request将其提交到其自己的服务器

微信小程序授权开发

-“自己服务器的SQL用户数据信息已更新,过程结束;

组织好想法,然后实施流程

小程序一侧:

在小程序中,创建一个新的通用JS以提供基本支持

在需要引用的某些页面上引用


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

接下来,在Common.js中实现逻辑


//用户登陆 function userLogin() {    wx.checkSession({     success: function () {       //存在登陆态     },     fail: function () {       //不存在登陆态       onLogin()     }    }) } function onLogin() {    wx.login({     success: function (res) {       if (res.code) {         //发起网络请求         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更新用户数据成功           }           else {             //SQL更新用户数据失败           }         }       })     }    }) }

至此,小程序的过程基本完成,然后实现了自己的服务API

登录界面逻辑示例


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(content); //解析             if ((!string.IsNullOrWhiteSpace(ReMsg.openid)) && (!string.IsNullOrWhiteSpace(ReMsg.session_key)))             {                 // 成功 自定义生成3rd_session与openid&session_key绑定并返回3rd_session             }             else             {                 // 错误 未获取到用户openid 或 session             }         }         else         {             // 错误 未获取到用户凭证code         }

此处将不再重复UserInfoUpdate接口。用户可以根据自己的情况操作数据。呼叫成功后,微信方返回的相关参数信息如下:

到目前为止,小程序基本授权登录和用户信息获取已完成。

最后一件事是从别人那里学到的零钱小窍门〜请花一点钱鼓励我!!! (๑•̀ㅂ•́)و✧

仔细阅读以上所有内容

如果您听不懂,请留言并提出问题〜

注意:以上内容已删除,仅保留常规内容。在特定项目中必须要调整一些逻辑。请注意那些引用的内容。

分享