首页 > 编程语言 >小程序登录及用户信息、手机号获取

小程序登录及用户信息、手机号获取

时间:2024-08-21 12:48:02浏览次数:6  
标签:手机号 登录 用户 获取 session login wx

小程序登录及用户信息、手机号获取

 

小程序登录流程时序

 

 

说明:

  1. 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
  2. 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key

之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

注意:

  1. 会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥
  2. 临时登录凭证 code 只能使用一次

获取用户信息

  1. 用户授权后,小程序通过 wx.getUserInfo 获取用户信息
复制代码
<!-- 如果只是展示用户头像昵称,可以使用 <open-data /> 组件 -->
<open-data type="userAvatarUrl"></open-data>
<open-data type="userNickName"></open-data>
<!-- 需要使用 button 来授权登录 -->
<button wx:if="{{canIUse}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权登录</button>
<view wx:else>请升级微信版本</view>
复制代码 复制代码
Page({
  data: {
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },
  onl oad: function() {
    // 查看是否授权
    wx.getSetting({
      success (res){
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称
          wx.getUserInfo({
            success: function(res) {
              console.log(res.userInfo)
            }
          })
        }
      }
    })
  },
  bindGetUserInfo (e) {
    console.log(e.detail.userInfo)
  }
})
复制代码

输出

{nickName: "梁涛", gender: 1, language: "zh_CN", city: "Nanjing", province: "Jiangsu", …}//头像、昵称、性别、语言、国家、省、市

 

2、个人敏感信息被加密,加密信息传给服务端,使用在登录时获取的 session_key 解密数据,解密方法可以看微信的 开放数据校验与解密文档

{
  "openId": "OPENID",
  "nickName": "NICKNAME",
  "gender": GENDER,
  "city": "CITY",
  "province": "PROVINCE",
  "country": "COUNTRY",
  "avatarUrl": "AVATARURL",
  "unionId": "UNIONID",
  "watermark": {
    "appid":"APPID",
    "timestamp":TIMESTAMP
  }
}

获取手机号

获取微信用户绑定的手机号,需先调用wx.login接口。

使用方法

需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。

注意

在回调中调用 wx.login 登录,可能会刷新登录态。此时服务器使用 code 换取的 sessionKey 不是加密时使用的 sessionKey,导致解密失败。建议开发者提前进行 login;或者在回调中先使用 checkSession 进行登录态检查,避免 login 刷新登录态。

 

//微信
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
//vue
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"></button>
getPhoneNumber (e) {
    console.log(e.detail.errMsg)
    console.log(e.detail.iv)
    console.log(e.detail.encryptedData)
  }

获取得到的开放数据为以下 json 结构:

复制代码
{
    "phoneNumber": "13580006666",
    "purePhoneNumber": "13580006666",
    "countryCode": "86",
    "watermark":
    {
        "appid":"APPID",
        "timestamp": TIMESTAMP
    }
}
复制代码   引申:检查登录态是否过期

通过 wx.login 接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用 wx.checkSession 接口检测当前用户登录态是否有效。

登录态过期后开发者可以再调用 wx.login 获取新的用户登录态。调用成功说明当前 session_key 未过期,调用失败说明 session_key 已过期。更多使用方法详见 小程序登录

复制代码
wx.checkSession({
  success () {
    //session_key 未过期,并且在本生命周期一直有效
  },
  fail () {
    // session_key 已经失效,需要重新执行登录流程
    wx.login() //重新登录
  }
})
复制代码 官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

参考文档:https://www.jianshu.com/p/3dd1f4635fc8

标签:手机号,登录,用户,获取,session,login,wx
From: https://www.cnblogs.com/Alex80/p/18371376

相关文章

  • JS获取位置、滚动条、尺寸的总结
    鼠标位置page:pageX、pageY,当前鼠标距离页面的横纵坐标client:clientX、clientY,鼠标相对于视口的坐标offset:offsetX、offsetY,鼠标相对于事件源padding-box的坐标screen:screenX、screenY,鼠标相对于屏幕x、y,等同于clientX、clientYmovement:movementX、movementY,只在鼠标......
  • java opencv 获取图中物品的倾斜角度(单个物品,如果存在多个物品,建议先将多个物品处理成
    //1、先连上opencv包System.setProperty("java.awt.headless","false");System.out.println(System.getProperty("java.library.path"));URLurl=ClassLoader.getSystemResource("lib/opencv/opencv_java4100.dll");System.load(url.g......
  • 数据可视化大屏的安全入口:高效登录与入口界面的关键设计(AxureRP原型)
    在数据可视化项目中,登录界面和入口界面起着至关重要的作用。登录界面不仅是用户访问系统的第一个接触点,更是确保系统安全性的重要防线。通过有效的身份验证机制,它能够防止未经授权的用户访问敏感数据,保护数据的完整性和隐私。此外,登录界面还承担着展示品牌形象、提升用户信任度的......
  • Java微信授权登录小程序接口
    1.微信授权登录小程序的流程是什么微信授权登录小程序的流程是一个涉及前端和后端交互的过程,主要目的是让用户能够使用微信账号快速登录小程序,避免重复输入用户名和密码。以下是该流程的详细步骤:1.1前端操作(1)触发登录:用户在小程序中点击“登录”按钮或进入需要登录的页面时,系......
  • CentOS7设置默认免密登录用户root
    CentOS7设置默认免密登录用户root步骤1、打开要更改的CentOS系统2、切换到root用户2、reboot重启系统步骤1、打开要更改的CentOS系统2、切换到root用户2、reboot重启系统......
  • LLM的API KEY获取和测试
    openaiopenai国内不能访问,只能通过第三方渠道访问,以F2API为例获取APIKEY地址:https://f2api.com/login测试APIKEY是否可用fromlangchain_openaiimportChatOpenAIllm=ChatOpenAI(openai_api_base="https://api.f2gpt.com",openai_api_key="******")res=llm.i......
  • Jumpserver 忘记admin(超级管理员)登录密码——解决方式
    1.登录失败由于各种原因导致多次尝试密码登录失败:2.解决办法2.1查看docker运行的进程[root@jumpserver01~]$dockerps2.2进入jumpserver01这个容器,进行修改账户密码[root@jumpserver01~]$dockerexec-itjumpserver01/bin/bash#如果没有按装django需执行......
  • SpringBoot Bean工具类 普通类环境中获取Bean
    通过实现BeanFactoryPostProcessor和ApplicationContextAware接口,可以在Spring容器启动时注入BeanFactory和ApplicationContext。importorg.springframework.aop.framework.AopContext;importorg.springframework.beans.BeansException;importorg.springframework.bean......
  • arcgis js 获取距离和面积
    Definesthetypeofcalculationforthegeometry.Thetypecanbeoneofthefollowing:planar: Planarmeasurementsuse2DCartesianmathematicstocalculatelength.Usethistypeifthelengthneedstobecalculatedintheinputspatialreferenceotherw......
  • 局域网中使用智能卡登录
    计算机是工作中不可缺少的工具,当计算机作为实验室的仪器主机或者公共电脑,使用智能卡登录或者员工卡登录就显得非常合适,既方便管理,而且还能随时查询登录日志。计算机智能卡登录的优势:1、插卡登录,拔卡锁屏注销或者关机。2、系统安全可靠,可以全部部署在局域网内,不连接任何外网。3、......