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

相关推荐

  • 解决 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
  • python反爬-图像验证码与滑块验证码的跳过反selenium检测,动态ip等问题

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

    2024年11月28日
    00
  • 理解 HTML、HTML5 和 “H5” 区别的重要性

    HTML & HTML5 & H5 的区别在构建现代网页时,理解 HTML、HTML5 和 “H5” 的区别是非常重要的。以下是它们的概念和主要区别: 1. HTML(超文本标记语言)定义HTML 是 HyperText Markup Language 的缩写,即超文本标记语言,用于定义网页内容的结构和含义。特性提供基…

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

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

    2024年11月24日
    00
  • 微信小程序Map地图使用详细教程,获取小程序定位,绑定地图点击事件

    在微信小程序中,地图功能可以通过 Map 组件来实现,结合定位和点击事件,可以实现丰富的地图交互功能。下面将详细讲解如何使用 Map 组件,包括获取小程序定位、绑定地图点击事件等功能。 1. 在小程序中使用 Map 地图 (1) 引入 Map 组件 在小程序页面的 .wxml 文件中,使用 <map> 组件来嵌入地图。该组件支持显示地图、定位、缩…

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

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

    2024年12月9日
    00
  • 在使用 uni-app 开发小程序或移动端应用时 title image失效问题

    在使用 uni-app 开发小程序或移动端应用时,若发现 分享的标题(title) 和 图片(image) 配置无效,可能是由于配置错误、平台限制或代码逻辑问题。以下是排查和解决问题的详细指南: 1. 确保正确使用分享 API onShareAppMessage(自定义转发) 确保在 pages 的页面代码中正确使用了 onShareAppMessage 方…

    2024年11月25日
    00
  • 在 Android 中 Matrix 实现图像的缩放和裁剪将 Glide 图像从 fitCenter 转换为 centerCrop

    在 Android 中,Matrix 可以用来实现图像的缩放和裁剪逻辑。要将 Glide 图像从 fitCenter 转换为 centerCrop,需要通过 Matrix 计算变换逻辑。以下是使用 Kotlin 实现的方法:实现步骤计算目标变换矩阵:根据目标宽高比,判断是否需要横向或纵向裁剪。设置 Matrix:使用 Matrix 执行缩放和平移操作。应用到…

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

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

    2024年11月26日
    00
  • 安卓用微信作为第三方登录,登录授权界面调用

    在 Android 应用中实现微信第三方登录,可以通过调用微信提供的开放平台 SDK 来完成。以下是实现微信登录授权界面的完整步骤: 1. 准备工作 注册微信开放平台应用 下载微信 SDK 2. 项目配置 引入微信 SDK 将 SDK 文件添加到项目的 libs 和 jniLibs 目录下: 在 build.gradle 中添加依赖: 配置权限 在 Andr…

    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
  • 在微信服务号中,通过设置自动回复,可以在新用户关注时引导其进入小程序

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

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

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

    2024年11月28日
    00
  • 安装 Laravel 11 + Filament 详细教程

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

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

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

    2024年11月28日
    00

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信