小程序登录及AppSecret(小程序密钥) - 新闻资讯 - 云南小程序开发|云南软件开发|云南网站建设-昆明葵宇信息科技有限公司

159-8711-8523

云南网建设/小程序开发/软件开发

知识

不管是网站,软件还是小程序,都要直接或间接能为您产生价值,我们在追求其视觉表现的同时,更侧重于功能的便捷,营销的便利,运营的高效,让网站成为营销工具,让软件能切实提升企业内部管理水平和效率。优秀的程序为后期升级提供便捷的支持!

您当前位置>首页 » 新闻资讯 » 小程序相关 >

小程序登录及AppSecret(小程序密钥)

发表时间:2021-1-4

发布人:葵宇科技

浏览次数:64


在授权开发以后,需要提交小程序密钥,有小程序密钥第三方才有能力获取用户的一些信息,提供一些能力!

平台分别提供多种方式实现微信登录:
  1. 调用wx.login接口,静默获取openid
适用场景:无需使用用户头像、昵称、Unionid信息
复制代码
  1. 使用 open-data (小程序)或者开放数据域(小游戏)的方式展示用户信息(无需用户授权)
适用场景:需要在前端“展示”用户头像、昵称信息,但不需要获取Unionid
复制代码
  1. 使用button(小程序)或UserInfoButton(小游戏)组件,用户点击后弹窗请求用户授权
适用场景:需要获取用户头像、昵称、Unionid等基本信息
复制代码

开发建议

  • 第一步:获取openID
当用户访问小程序时,先通过wx.login,获取用户openID 。这时无需弹框授权,开发者拿到 openID 可以建立自身的帐号 ID。
复制代码
  • 第二步: 使用open-data方式或开放数据域方式展示头像昵称
如需要在前端展示用户头像、昵称信息, 使用open-data 方式或者开放数据域的方式展示用户信息
复制代码
  • 第三步:根据实际使用场景,使用组件,引导用户登录
在关键操作中,如必须获取用户头像、昵称、UnionID信息,可根据第一步获取的openID判断是新用户还是旧用户:

    如果是旧用户,可以直接登录,也可定期使用wx.getUserInfo更新用户的信息;

    如果是新用户,使用button(小程序)或UserInfoButton(小游戏)组件,在用户点击后弹窗请求获取用户基本信息。
复制代码

会话密钥 session_key 有效性

开发者如果遇到因为session_key 不正确而校验签名失败或解密失败,请关注下面几个与session_key有关的注意事项

1. wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。开发者应该在明确需要重新登录时才调用 wx.login,及时通过 code2Session 接口更新服务器存储的 session_key。
2. 微信不会把 session_key 的有效期告知开发者。我们会根据用户使用小程序的行为对 session_key 进行续期。用户越频繁使用小程序,session_key 有效期越长。
开发者在 session_key 失效时,可以通过重新执行登录流程获取有效的
3. 开发者在 session_key 失效时,可以通过重新执行登录流程获取有效的 session_key。使用接口 wx.checkSession可以校验 session_key 是否有效,从而避免小程序反复执行登录流程。
4. 当开发者在实现自定义登录态时,可以考虑以 session_key 有效期作为自身登录态有效期,也可以实现自定义的时效性策略。
复制代码
  • 如果使用自己服务器定义的登录态失效时间,则不需要wx.checkSession

下面是自己项目中的小程序登录代码

涉及到用户扫码进入小程序,同时判断扫码进入是否注册过

   //获取个人信息
   getUserFootpathInfofunction (that{
    that = this;
    wx.login({
      successfunction (data{
        console.log(data, '个人信息1')
        http.getReq('getwechatinfo?code=' + data.code + "&serct=" + app.globalData.serct, function (ress{
          console.log(ress)
          app.globalData.openid = ress.data.openid
          that.setData({
            openid:ress.data.openid
          })
          http.getReq("getuserinfo?openid=" + ress.data.openid + "&unionid=" + app.globalData.unionid + "&serct=" + getApp().globalData.serct, function (res{
            console.log(res.data, '个人信息2')
            // imageId 扫码进入小程序 用户 进入游戏的唯一标识
            that.setData({
              imageId: res.data.imageId
            })
            if (that.data.device) {
              getApp().globalData.type = 2// 2代表扫码
              // 同时通过注册得Id判断是否注册,
              if (that.data.imageId) {
                // 授权成功
                that.setData({
                  bikeFlagtrue
                })
              } else {
                // 没有授权 "跳转到注册页面"
                if(that.data.btn_disabled){
                  wx.redirectTo({
                    url'../webview/webregist?openid=' + that.data.openid
                  })
                }else{
                  wx.showToast({
                    title"请勾选相关条款",
                    icon'none'
                  })
                }
                
              }
            }
            app.globalData.imageId = res.data.imageId;
            app.globalData.getUserInfo = res.data;
            app.globalData.existsflag = res.data.existsflag;
            // 调取单车数据
            that.postRunSportData();
            if (res.data.existsflag == 1 || that.data.skipType == "0001") {
              that.setData({
                httpUserInfo: res.data
              })
              if (that.data.httpUserInfo.username == null || that.data.httpUserInfo.username == "") {
                that.setData({
                  nickName"步道用户"
                })
              } else {
                that.setData({
                  nickName: that.data.httpUserInfo.username
                })
              }
            } else {
              app.globalData.openid = "guest";
              //未注册 弹窗注册
              that.setData({
                showRegisterModal: !that.data.showRegisterModal
              })
            }
            that.checkLocation(that)
          })
        })
      },
      failfunction (err{
        console.log('wx.login 接口调用失败,将无法正常使用开放接口等服务', err)
      }
    })
  },

相关案例查看更多