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

相关推荐

  • 在 React Native 0.72.5 中使用 Hermes 引擎时JavaScript 的 Function.prototype.toString() 转成字符串

    在 React Native 0.72.5 中,使用 Hermes 引擎时,JavaScript 的 Function.prototype.toString() 方法的行为可能与其他 JavaScript 引擎(如 V8 或 JavaScriptCore)有所不同。这种差异源于 Hermes 的设计,旨在提升性能和减少内存开销。 问题描述 在 Hermes …

    2024年12月7日
    00
  • 在微信服务号中,通过设置自动回复,可以在新用户关注时引导其进入小程序

    在微信服务号中,通过设置自动回复,可以在新用户关注时引导其进入小程序。以下是实现的方法和建议: 1. 使用文本自动回复引导在服务号后台设置关注自动回复,可以通过一段欢迎语并附带小程序链接,引导用户点击进入。示例文案: 小程序链接格式: 设置路径:进入 微信公众平台 > 自动回复 > 关注后自动回复,添加以上文案。 2. 使用卡片自动回复引导你可以直接在自动回…

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

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

    2024年12月3日
    00
  • 微信小程序的 RequestTask.onChunkReceived 接口接收二进制数据流

    微信小程序的 RequestTask.onChunkReceived 接口允许接收分块的二进制数据流(如视频或音频流),但在小程序环境中,由于不支持 TextDecoder,处理这些数据时需要采用其他方法。 解析数据流的方案 模拟 TextDecoder 功能 如果需要将 ArrayBuffer 转换为字符串(如 UTF-8 编码),可以通过自定义方法模拟 …

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

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

    2024年11月28日
    00
  • 2024年最新的 Node.js 安装与环境配置教程

    以下是2024年最新的 Node.js 安装与环境配置教程,适用于 Windows、macOS 和 Linux 系统。 一、什么是 Node.js? Node.js 是一个基于 V8 引擎的 JavaScript 运行环境,主要用于开发服务端应用程序。它的特点是异步事件驱动和非阻塞 I/O,适合高性能应用。 二、Node.js 安装 1. 下载 Node.j…

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

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

    2024年11月24日
    00
  • 使用 Flutter 实现酷炫的粒子动画,可以通过 Shader 来提升效果

    使用 Flutter 实现酷炫的粒子动画,可以通过 Shader 来提升效果。这种方法结合 Flutter 的强大绘图功能和 GLSL 的灵活性,可以创造出高性能且自定义程度极高的视觉效果。以下是实现的基本步骤和核心代码: 核心思想使用 Flutter 的 CustomPainter 绘制粒子。通过 FragmentProgram (GLSL Shader)…

    2024年12月2日
    00
  • 微信小程序开发中使用 Tailwind CSS 提高开发效率和代码的可维护性

    Tailwind CSS 是一个利用原子化 CSS 类来构建用户界面的框架,在微信小程序开发中使用 Tailwind CSS 可以提高开发效率和代码的可维护性。以下是在微信小程序中使用 Tailwind CSS 进行原子 CSS 开发的具体步骤: 安装 Tailwind CSS 配置 Tailwind CSS 引入样式:在微信小程序的全局样式文件app.wx…

    2024年12月15日
    00
  • 如何用pbootcmsAPI接口开发微信小程序UNIAPP

    使用 PbootCMS 的 API 接口结合 UniApp 开发微信小程序,可以实现高效的内容管理和展示。以下是一个完整的开发流程,包括 API 接口设置、小程序功能设计和开发细节。 1. 准备工作1.1 配置 PbootCMS API 接口PbootCMS 提供 API 功能,需在后台开启并配置:登录 PbootCMS 后台管理。前往 系统管理 -> AP…

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

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

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

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

    2024年11月28日
    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
  • 安装 Laravel 11 + Filament 详细教程

    安装Laravel 11之前选确保安装了Composer 管理器,接下来的步骤是通过Composer 包管理器安装完成的。 一、前提条件 二、使用 Composer 创建新的 Laravel 11 项目 三、在现有项目中添加 Laravel 11(如果是集成到现有项目) 请注意,在实际安装过程中,可能会遇到各种问题,如权限问题(在 Linux 下,如果没有足…

    2025年1月18日
    00
  • Flutter 在 PC 端多窗口支持方面的进展备受关注的功能,已在 Ubuntu/Canonical 展示

    Flutter 在 PC 端多窗口支持方面的进展是一个备受关注的功能,它的目标是进一步提升 Flutter 的跨平台能力。最近,Flutter 团队与 Canonical 合作,在 Ubuntu 平台上展示了多窗口功能的新成果。这一进展对开发者和终端用户来说都有重要意义,以下是相关细节分析: 展示细节多窗口功能亮相Flutter 的多窗口支持在 Ubuntu…

    2024年12月2日
    00

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信