本文将帮助读者基于微信开发人员工具和C#环境用户在小程序上实现授权登录。
准备工作:
微信开发人员工具下载链接:
微信小程序开发文档:
发展:
在开发之初,我们需要澄清微信制定的授权登录过程,请参阅API官方登录界面。
您会看到微信一方为开发人员制定了登录授权流程:
如图所示,它是转发用户登录授权的流程。
为什么它是向前流?因为在小程序的实际开发中,我们不确定用户何时需要调整上述登录过程(例如:在某些特定情况下,用户的凭据丢失了,但是Ta并没有退出小程序,而在小程序中]内部跳转和其他相关操作可能会导致意外异常。因此,除了这种前向流程之外,我们还需要添加一种检测机制来解决这些异常情况。官方的API,wx.checkSession可以在一定程度上解决此问题。
因此,我们的认证过程实际上应该是:
-小程序 wx.checkSession验证登录状态无效
-成功:成功的接口调用的回调函数,session_key尚未过期,过程结束;
-失败:接口调用失败,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接口。用户可以根据自己的情况对数据进行操作。呼叫成功后,微信方返回的相关参数信息如下:
到目前为止,小程序基本授权登录和用户信息获取已完成。
PHP中文网站,有许多免费的小程序开发教程,欢迎学习!
上面是微信小程序中开发的用户授权登录功能的详细内容,请注意php中文网站上的其他相关文章!
相关标签:微信小程序本文转载于:CSDN,如有违反,请联系删除