使用 HBuilderX 开发 uni-app 项目通过以下步骤实现微信小程序中获取用户头像、昵称、授权登录以及用户手机号

在使用 HBuilderX 开发 uni-app 项目时,可以通过以下步骤实现微信小程序中获取用户头像、昵称、授权登录以及用户手机号。

1. 配置微信小程序的权限

在微信小程序后台中,确保已经启用了相关的功能模块,如:

  • 登录(wx.login
  • 用户信息(getUserProfile
  • 获取手机号(wx.getPhoneNumber

同时在 app.json 中配置授权弹窗的提示:

{
  "permission": {
    "scope.userInfo": {
      "desc": "用于完善会员资料"
    },
    "scope.userLocation": {
      "desc": "用于显示您的位置信息"
    }
  }
}

2. 授权获取用户头像、昵称

从微信小程序 2.10.4 版本开始,推荐使用 wx.getUserProfile 获取用户信息。

示例代码

methods: {
  getUserProfile() {
    wx.getUserProfile({
      desc: '用于完善会员资料', // 授权提示内容
      success: (res) => {
        console.log('用户信息:', res.userInfo);
        // 处理用户信息
        this.userInfo = res.userInfo;
      },
      fail: (err) => {
        console.log('用户拒绝授权:', err);
      }
    });
  }
}

注意

wx.getUserProfile 不会自动缓存用户信息,每次调用都需要用户确认。

3. 登录获取用户唯一标识(OpenID)

利用 wx.login 方法获取登录凭证 code,并通过后台接口换取 openidsession_key

示例代码

methods: {
  login() {
    wx.login({
      success: (res) => {
        if (res.code) {
          console.log('登录成功,code:', res.code);
          // 调用后台接口,将 code 发送到服务端获取 openid 和 session_key
          uni.request({
            url: 'https://yourserver.com/api/login',
            method: 'POST',
            data: {
              code: res.code
            },
            success: (res) => {
              console.log('服务器返回:', res.data);
            }
          });
        } else {
          console.log('登录失败:', res.errMsg);
        }
      }
    });
  }
}

4. 获取用户手机号

通过微信小程序的 button 组件的 open-type="getPhoneNumber" 属性,获取用户手机号。

WXML 部分

<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">获取手机号</button>

JS 部分

methods: {
  getPhoneNumber(e) {
    if (e.detail.errMsg === 'getPhoneNumber:ok') {
      console.log('用户手机号加密数据:', e.detail.encryptedData);
      console.log('iv:', e.detail.iv);
      // 将加密数据和 iv 发送到后台解密
      uni.request({
        url: 'https://yourserver.com/api/decryptPhoneNumber',
        method: 'POST',
        data: {
          encryptedData: e.detail.encryptedData,
          iv: e.detail.iv,
          sessionKey: this.sessionKey // 从登录接口获取的 session_key
        },
        success: (res) => {
          console.log('解密后的手机号:', res.data.phoneNumber);
        }
      });
    } else {
      console.log('用户拒绝授权:', e.detail.errMsg);
    }
  }
}

5. 完整代码示例

结合以上方法,以下是一个整合用户头像、昵称、授权登录和获取手机号的完整示例。

WXML

<view class="container">
  <button @tap="getUserProfile">获取用户信息</button>
  <button @tap="login">登录</button>
  <button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">获取手机号</button>
</view>

JS

export default {
  data() {
    return {
      userInfo: null,
      sessionKey: '' // 登录后从后台获取
    };
  },
  methods: {
    getUserProfile() {
      wx.getUserProfile({
        desc: '用于完善会员资料',
        success: (res) => {
          this.userInfo = res.userInfo;
          console.log('用户信息:', res.userInfo);
        },
        fail: (err) => {
          console.log('用户拒绝授权:', err);
        }
      });
    },
    login() {
      wx.login({
        success: (res) => {
          if (res.code) {
            console.log('登录成功,code:', res.code);
            // 调用后台接口换取 sessionKey 和 openid
            uni.request({
              url: 'https://yourserver.com/api/login',
              method: 'POST',
              data: { code: res.code },
              success: (res) => {
                this.sessionKey = res.data.sessionKey;
                console.log('服务器返回:', res.data);
              }
            });
          } else {
            console.log('登录失败:', res.errMsg);
          }
        }
      });
    },
    getPhoneNumber(e) {
      if (e.detail.errMsg === 'getPhoneNumber:ok') {
        console.log('加密手机号数据:', e.detail.encryptedData);
        uni.request({
          url: 'https://yourserver.com/api/decryptPhoneNumber',
          method: 'POST',
          data: {
            encryptedData: e.detail.encryptedData,
            iv: e.detail.iv,
            sessionKey: this.sessionKey
          },
          success: (res) => {
            console.log('解密后的手机号:', res.data.phoneNumber);
          }
        });
      } else {
        console.log('用户拒绝授权:', e.detail.errMsg);
      }
    }
  }
};

6. 服务端解密逻辑

服务端需使用微信官方提供的解密算法,利用 session_keyencryptedDataiv 解密用户数据。常见的服务端语言都有对应的 SDK 或示例。

这样即可完成微信小程序中获取用户头像、昵称、授权登录及手机号的功能实现。

发布者:myrgd,转载请注明出处:https://www.object-c.cn/5169

Like (0)
Previous 2024年12月9日 下午10:51
Next 2024年12月15日 下午8:07

相关推荐

  • 解决登录Google账号,手机上Google账号无法验证问题?

    遇到 Google账号无法验证 的问题时,通常是因为以下几个原因之一: 以下是一些解决方法: 1. 检查手机网络和信号确保手机信号和网络连接稳定,有时验证码可能由于网络问题无法及时收到。如果你使用的是 短信验证,确保手机信号良好,短信接收正常。如果使用的是 Google 提供的 Google Authenticator 应用,确保应用正常工作,并且时间同步(…

    2024年11月28日
    00
  • 微信小程序RequestTask.onChunkReceived 监听分块数据接收事件接口

    在微信小程序中,RequestTask.onChunkReceived 是用于监听分块数据接收事件的接口。此功能适用于需要逐步接收大数据(例如流媒体、文件分块等)的场景,可以显著提升大文件传输的性能和用户体验。 以下是详细介绍和使用方法: 1. 功能说明用途:监听通过 wx.request 或 wx.downloadFile 发起的请求过程中,每次接收到的数…

    2024年11月28日
    00
  • 在开发 Angular 项目时,使用 RangeSlider 控件时的常见问题

    在开发 Angular 项目时,使用 RangeSlider 控件时,可能会遇到一些常见的问题。以下是一些问题及其解决方案:1. 滑块值不更新问题描述:当用户拖动滑块时,滑块的值不会实时更新,或者显示的值不正确。解决方案:确保绑定的模型是双向绑定,使用 ngModel 或者监听 input 事件来确保滑块值能实时更新。例如: 确保你已经导入了 FormsMo…

    2024年11月27日
    00
  • pywebview 页面请求数据总是报错:TypeError: Cannot read properties of undefined (reading ‘api’)

    pywebview 中的 TypeError: Cannot read properties of undefined (reading ‘api’) 错误通常意味着 JavaScript 代码试图访问一个未定义的对象或属性(如 api)。这种问题通常出现在 Python 与前端 JavaScript 交互时,可能是由于以下原因:可能的原因及解决方法:Jav…

    2024年11月27日
    00
  • 微信小程序中,通过Node.js连接本地 MySQL 实现数据的增删改查

    在微信小程序中,通过Node.js连接本地 MySQL 实现数据的增删改查的过程,可以分为以下几个步骤: 1. 准备工作 必要工具: 2. 搭建 Node.js 后端服务 安装依赖 在 Node.js 项目中,使用 npm init 初始化项目,并安装以下依赖: express: 用于搭建 Web 服务。 mysql: 用于连接和操作 MySQL 数据库。 …

    2024年12月9日
    00
  • Web实时通信和 @microsoft/signalr 微软开发的一款基于 SignalR 的实时通信库

    Web实时通信和 @microsoft/signalr@microsoft/signalr 是微软开发的一款基于 SignalR 的实时通信库,专为 Web 应用提供强大的实时通信功能。SignalR 的主要特点包括支持双向通信、自动选择传输协议(WebSockets、Server-Sent Events 或 Long Polling)以及简化的服务器与客户…

    2024年12月1日
    00
  • 在 WPF 中使用 Vlc.DotNet 和 LibVLCSharp.WPF 两种库来进行 VLC 的二次开发

    在 WPF 中使用 Vlc.DotNet 和 LibVLCSharp.WPF 两种库来进行 VLC 的二次开发,可以实现丰富的视频播放功能,比如播放本地视频、流媒体、控制播放、获取视频信息等功能。以下是对两者的介绍及开发步骤。 一、Vlc.DotNet 和 LibVLCSharp 的对比 特性 Vlc.DotNet LibVLCSharp.WPF 开发活跃度…

    2024年12月3日
    00
  • 如何使用uni-app-qrcode插件生成二维码?

    以下是使用uni-app-qrcode插件生成二维码的详细步骤: 安装插件 或者使用yarn进行安装: 引入插件 使用插件生成二维码 上述代码中,首先定义了要编码到二维码中的内容content和生成二维码的配置选项options,然后通过this.$refs.qrcodeCanvas获取页面中的canvas元素,最后调用QRCode.make方法生成二维码。…

    2024年12月22日
    00
  • 搭建一个基于 Node.js 和 MySQL 的微信小程序

    搭建一个基于 Node.js 和 MySQL 的微信小程序后台可以帮助你管理数据、处理请求、存储用户信息等。下面是如何从头开始搭建一个基本的微信小程序后台系统的详细步骤。 1. 环境准备 确保你已经安装以下开发工具: 2. 创建 Node.js 项目 首先,创建一个新的 Node.js 项目: 2. 安装必要的依赖包: 使用以下命令安装这些依赖: 配置 My…

    2024年11月24日
    00
  • python反爬-图像验证码与滑块验证码的跳过反selenium检测,动态ip等问题

    针对反爬措施,Python可以使用以下策略来跳过图像验证码与滑块验证码、反检测Selenium,以及通过动态IP规避限制。这是一个分步说明: 1. 图像验证码的跳过与破解1.1 图像验证码处理对于简单的图像验证码,可以使用 OCR 技术直接识别验证码内容。常用库包括:Tesseract-OCR: 一款开源 OCR 工具。Pytesseract: Tesser…

    2024年11月28日
    00
  • 在Spring Boot中,利用AOP(Aspect-Oriented Programming)实现操作日志记录。

    在Spring Boot中,利用AOP(Aspect-Oriented Programming)结合自定义注解,可以优雅地实现操作日志记录。这种方式不仅解耦了业务逻辑与日志记录功能,还能让代码更简洁、可维护性更高。 以下是实现步骤: 1. 项目依赖 在Spring Boot项目中,确保以下依赖已存在(默认spring-boot-starter-aop随spr…

    2024年11月23日
    00
  • 微信小程序获取图片网页链接转换为 base64 ,wx.arrayBufferToBase64(binary) 提示已弃用的处理方法

    微信小程序中 wx.arrayBufferToBase64 提示已弃用的问题,可以通过其他方式实现将图片网页链接转换为 Base64 文件。以下是几种替代方法和完整的实现方案。 1. 问题分析wx.arrayBufferToBase64 在较新版本的小程序中可能会提示已弃用,建议开发者使用 JavaScript 原生方式处理。如果目标是将网络图片转换为 Ba…

    2024年11月28日
    00
  • Python 的 json模块序列化数据从文件里读取出来或存入文件

    Python 的 json 模块用于处理 JSON 格式的数据,可以将 JSON 数据与 Python 数据结构之间相互转换。以下是具体用法,包括从文件读取 JSON 数据以及将数据写入文件: 1. 将 JSON 数据从文件中读取到 Python 数据结构 代码示例: 解析过程: 2. 将 Python 数据结构写入到文件中(序列化为 JSON) 代码示例:…

    2024年11月26日
    00
  • 在 Vue3 和 uniapp 的 H5 环境中使用 QRCode.toDataURL() 生成二维码时无法显示的问题

    1. 图片格式或生成的 DataURL 处理问题QRCode.toDataURL() 方法通常会生成一个 Base64 编码的 PNG 图片。某些 Android 浏览器或 WebView 可能对 Base64 编码的图片支持不好,或者由于资源限制无法正常解析。解决方法:尝试通过生成二维码的图片 URL 直接展示而非使用 Base64 编码。可以通过将二维码…

    2024年11月27日
    00
  • 实现微信支付提现api接口教程

    微信支付的提现功能,通常是通过调用 企业付款到零钱 API 或 企业付款到银行卡 API 来实现的。以下是如何使用微信支付提现 API 的详细教程,包括其前置条件、接口调用以及注意事项。 1. 准备工作 1.1. 开通微信支付商户号 1.2. 配置证书 将这些文件保存在你的服务器上,用于发起 HTTPS 请求。 1.3. 获取 API 密钥 2. 企业付款到…

    2024年11月24日
    00

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信