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

相关推荐

  • 在 WPF 中使用 Vlc.DotNet 和 LibVLCSharp.WPF 两种库来进行 VLC 的二次开发

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

    2024年12月3日
    00
  • 微信小程序错误提示 does not have a method “onShareTimeline”

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

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

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

    2024年11月23日
    00
  • uni-app 中的一个 API,uni.getLocation用于获取用户的地理位置信息

    uni.getLocation 是 uni-app 中的一个 API,用于获取用户的地理位置信息。它可以通过 GPS 或网络方式获取当前位置,并提供包括经纬度、速度、精度等信息。这个 API 在移动端(如安卓、iOS)和 H5 平台上均可使用。基本语法 参数说明type(可选):指定位置的坐标类型。支持 ‘wgs84’ 和 ‘gcj02’,默认值为 ‘wgs…

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

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

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

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

    2024年12月2日
    00
  • 微信小程序配置onShareTimeline分享到朋友圈的问题

    在微信小程序中使用 onShareTimeline 来实现分享到朋友圈的功能时,可能会遇到开发者工具中的功能灰色不可用或真机调试时无法分享的问题。下面是一些可能的原因和解决方法: 1. 检查小程序的分享功能是否已经启用 确保你在小程序的 app.json 或者页面的 json 配置文件中正确配置了分享功能。 在 app.json 或页面的 json 文件中添…

    2024年11月24日
    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
  • 如何使用uni-app-qrcode插件生成二维码?

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

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

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

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

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

    2024年11月23日
    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
  • 在微信公众号开发中获取 access_token 调用微信服务器端接口

    在微信公众号开发中,获取 access_token 是调用微信服务器端接口的第一步。access_token 是接口调用的凭据,可以通过微信公众号的接口调用。 以下是获取 access_token 的步骤和代码示例: 1. 获取 Access Token 的接口 调用微信服务器接口获取 access_token: 接口地址: 返回示例: access_tok…

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

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

    2024年11月28日
    00

发表回复

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

联系我们

在线咨询: QQ交谈

邮件:723923060@qq.com

关注微信