使用 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

相关推荐

  • 微信小程序错误提示 does not have a method “onShareTimeline”

    当在微信小程序中尝试实现分享到朋友圈功能时,如果你在控制台遇到 does not have a method “onShareTimeline” 错误,这通常是由于以下原因之一: 1. 检查基础库版本 onShareTimeline 是在小程序基础库 2.11.3 及以上版本支持的。如果当前开发者工具的基础库版本较低,会导致方法无法找到。 解决方法: 2. …

    2024年11月26日
    00
  • 使用uni-app微信小程序生成邀请码邀请好友注册

    在 uni-app 中实现微信小程序的邀请功能,可以通过生成邀请码来邀请好友注册。这个过程通常包括生成唯一的邀请码、分享链接生成二维码,以及接收邀请并使用邀请码完成注册等步骤。下面详细介绍如何在 uni-app 中实现这个功能。 1. 设计邀请码生成规则 首先,需要设计邀请码的生成规则。一般来说,邀请码是一个随机生成的字符串或者是与用户ID相关联的字符串。为…

    2024年11月23日
    00
  • 在 Nuxt.js 应用中,webpack 的 compile 事件钩子构建过程

    在 Nuxt.js 应用中,webpack 的 compile 事件钩子通常用于在构建过程中处理或监听 Webpack 编译的状态。webpack 是 Nuxt.js 中的核心构建工具之一,而 Nuxt.js 本身是基于 Webpack 配置的,允许你通过扩展 Webpack 配置来进行自定义。要使用 webpack 的 compile 事件钩子,首先你需要…

    2024年11月29日
    00
  • 在 Jupyter Notebook 中使用 Markdown 的相关技巧

    在 Jupyter Notebook 中使用 Markdown 是一种常见的方式来撰写文档和注释,增强数据分析和报告的可读性。Markdown 在 Jupyter Notebook 中不仅支持标准的文本格式化功能,还提供了许多扩展功能,比如数学公式、表格、代码块等。以下是一些常用的 Markdown 技巧,可以帮助你提升 Jupyter Notebook 中…

    2024年11月27日
    00
  • 修复 Elementor 网站上出现的 HTTPS 400 错误请求(服务器错误)

    在修复 Elementor 网站上出现的 HTTPS 400 错误请求(服务器错误)时,您需要采取以下步骤来排查和解决问题。这类错误通常与服务器配置、插件冲突或 HTTPS 配置相关。 1. 检查 HTTPS 配置 2. 排查插件冲突 3. 检查主题兼容性 4. 调整服务器配置 URL 重写规则: 5. 清理缓存 6. 检查网络请求 7. 联系主机服务商 如…

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

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

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

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

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

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

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

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

    2024年11月28日
    00
  • 解决登录Google账号,手机上Google账号无法验证问题?

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

    2024年11月28日
    00
  • 微信支付域名回调用个人服务器域名的方法

    在使用微信支付功能时,微信支付的回调需要指定合法的 支付回调通知地址(即回调域名)。如果你想使用个人服务器的域名来作为微信支付的回调域名,需要满足以下条件并完成配置: 1. 域名要求 合法域名的要求 2. 配置个人服务器域名 步骤 1:准备域名 步骤 2:设置 HTTPS 步骤 3:配置域名解析 3. 微信支付后台配置 3. 保存配置。 4. 在代码中处理回…

    2024年11月24日
    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
  • 在Spring Boot中,利用AOP(Aspect-Oriented Programming)实现操作日志记录。

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

    2024年11月23日
    00
  • 小程序支持哪种类型的二维码 / 小程序识别GS1码

    二维码(Quick Response Code,快速响应码)是一种能够存储和传递信息的二维条形码,由黑白矩阵构成,能够在短时间内快速扫描并获取编码信息。二维码广泛应用于支付、商品追溯、信息传递等多个领域。下面是关于二维码的几个方面的详细解析,包括如何理解二维码、如何生成二维码、小程序支持的二维码类型、以及小程序如何识别 GS1 码。 1. 理解二维码 二维码…

    2024年11月23日
    00
  • 解决 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误问题

    在将 Vue 3 应用部署到 GitHub Pages 后,遇到 404 错误通常是由于 GitHub Pages 处理路由时的问题。Vue 3 使用 Vue Router 来管理前端路由,而 GitHub Pages 本身是静态托管服务,不支持处理 SPA(单页面应用)的客户端路由。因此,当你直接访问某个页面 URL(比如 https://youruser…

    2024年11月29日
    00

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信