经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » 微信小程序 » 查看文章
详解微信小程序开发用户授权登陆
来源:jb51  时间:2019/4/25 8:37:29  对本文有异议

本篇将帮助读者实现基于 微信开发者工具 & C#环境 下的用户在小程序上的授权登陆。

准备:

微信开发者工具下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

微信小程序开发文档:https://developers.weixin.qq.com/miniprogram/dev/index.html

开发:

在开发之初,我们需要先明确微信方已经制定好的授权登陆流程,参看 官方API - 登陆接口。

你会看到微信方为开发者制定好的登陆授权流程:

如图,即为一个顺向的用户登陆授权的流程。

为什么说它是一个顺向的流程呢?因为在真正的小程序开发中,我们并不确定用户何时需要起调如上的登陆流程(如:用户在某些特定场景下的凭证丢失,但Ta并没有退出小程序而是在小程序内部做跳转等相关操作,即有可能导致一些预期之外的异常),所以,我们需要在这个顺向的流程之外,加一层检测机制,来解决这些异常场景,而官方API中,wx.checkSession 刚好可以一定程度上解决这个问题。

那么,我们的认证流程其实应该是:

小程序 wx.checkSession 校验登陆态为失效

success :接口调用成功的回调函数,session_key未过期,流程结束;    

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

小程序端 wx.login 获取code 并 wx.request 提交code给己方服务器

己方服务器 提交Appid + appSecret + code 到微信方服务器 获取 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做基础支持

 

并在一些需要引用的页面进行引用

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

接着,在Common.js 中实现逻辑

  1. //用户登陆
  2. function userLogin() {
  3. wx.checkSession({
  4. success: function () {
  5. //存在登陆态
  6. },
  7. fail: function () {
  8. //不存在登陆态
  9. onLogin()
  10. }
  11. })
  12. }
  13. function onLogin() {
  14. wx.login({
  15. success: function (res) {
  16. if (res.code) {
  17. //发起网络请求
  18. wx.request({
  19. url: 'Our Server ApiUrl',
  20. data: {
  21. code: res.code
  22. },
  23. success: function (res) {
  24. const self = this
  25. if (逻辑成功) {
  26. //获取到用户凭证 存儲 3rd_session
  27. var json = JSON.parse(res.data.Data)
  28. wx.setStorage({
  29. key: "third_Session",
  30. data: json.third_Session
  31. })
  32. getUserInfo()
  33. }
  34. else {
  35. }
  36. },
  37. fail: function (res) {
  38. }
  39. })
  40. }
  41. },
  42. fail: function (res) {
  43. }
  44. })
  45. }
  46. function getUserInfo() {
  47. wx.getUserInfo({
  48. success: function (res) {
  49. var userInfo = res.userInfo
  50. userInfoSetInSQL(userInfo)
  51. },
  52. fail: function () {
  53. userAccess()
  54. }
  55. })
  56. }
  57. function userInfoSetInSQL(userInfo) {
  58. wx.getStorage({
  59. key: 'third_Session',
  60. success: function (res) {
  61. wx.request({
  62. url: 'Our Server ApiUrl',
  63. data: {
  64. third_Session: res.data,
  65. nickName: userInfo.nickName,
  66. avatarUrl: userInfo.avatarUrl,
  67. gender: userInfo.gender,
  68. province: userInfo.province,
  69. city: userInfo.city,
  70. country: userInfo.country
  71. },
  72. success: function (res) {
  73. if (逻辑成功) {
  74. //SQL更新用户数据成功
  75. }
  76. else {
  77. //SQL更新用户数据失败
  78. }
  79. }
  80. })
  81. }
  82. })
  83. }

至此,小程序端的流程基本实现完毕,接着实现己方服务API

Login 接口逻辑范例

  1. if (dicRequestData.ContainsKey("CODE"))
  2. {
  3. 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"]);
  4. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(apiUrl);
  5. myRequest.Method = "GET";
  6. HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
  7. StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
  8. string content = reader.ReadToEnd();
  9. myResponse.Close();
  10. reader.Close();
  11. reader.Dispose();
  12. //解析
  13. userModel ReMsg = JSONUtil.JsonDeserialize<userModel>(content); //解析
  14. if ((!string.IsNullOrWhiteSpace(ReMsg.openid)) && (!string.IsNullOrWhiteSpace(ReMsg.session_key)))
  15. {
  16. // 成功 自定义生成3rd_session与openid&session_key绑定并返回3rd_session
  17. }
  18. else
  19. {
  20. // 错误 未获取到用户openid 或 session
  21. }
  22. }
  23. else
  24. {
  25. // 错误 未获取到用户凭证code
  26. }

UserInfoUpdate 接口在此不加赘述,用户根据自身情况对数据进行操作即可,微信方调用成功时返回的相关参数信息如下

至此,完成了小程序基本的授权登陆及用户信息的获取。

认真看完以上所有后

有啥不懂的 欢迎留言提问~

注:以上内容有所删减,仅保留通用内容。在具体项目中必定存在部分逻辑需要调整,引鉴的同学请注意

以上所述是小编给大家介绍的微信小程序开发用户授权登陆详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号