微信小程序登录获取手机号教程(超详细)

news/2024/7/20 3:46:07 标签: 微信小程序, 小程序

1. 背景介绍:

在我们开发小程序>微信小程序时,登录时,需要获取用户手机号作为唯一标识,下面我介绍一下获取手机号的教程。

本篇文章介绍后端获取方法:

前端工作

后端工作







前端

  1. 新建Page页面,在xxx.wxml中加入下方代码
<!--index.wxml-->
<navigation-bar title="Weixin" back="{{false}}" color="black" background="#FFF"></navigation-bar>
<scroll-view class="scrollarea" scroll-y type="list">
  <view class="container">
    <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>
    <view>{{phone}}</view>
</view>
</scroll-view>

css:

/**index.wxss**/
page {
  height: 100vh;
  display: flex;
  flex-direction: column;
}
.scrollarea {
  flex: 1;
  overflow-y: hidden;
}

说明:

上方按钮组件,用于获取用户的手机号码信息。在按钮上设置了open-type属性为"getPhoneNumber",表示点击按钮时会获取用户的手机号码。同时,使用bindgetphonenumber属性绑定了一个名为getPhoneNumber的事件,当用户点击按钮并成功获取到手机号码时,会触发这个事件

  1. 我们在xxx.js编写以下代码
Page({
  data: {
    phone:0
  },
  getPhoneNumber: function (e) {
    var that = this
    // 一定是getPhoneNumber里面的code
    const code = e.detail.code
    wx.login({
      success: res => {
        if (res.code) {
          wx.getUserInfo({
            success: res1 => {
              wx.request({
                url: 'https://你的后端接口/getPhoneNumber',
                method: 'POST',
                data: {
                  code: code,
                  encryptedData: res1.encryptedData,
                  iv: res1.iv
                },
                success: res => {
                  that.setData({
                    phone: res.data.phoneNumber
                  })
                }
              })
            }
          })
        } else {
          console.log('获取失败!' + res.errMsg)
        }
      }
    })
  }
})

说明

代码中首先定义了一个data属性,其中phone初始值为0。

然后定义了一个getPhoneNumber函数,该函数会在用户点击授权获取手机号按钮时触发。

函数中首先获取到用户点击授权按钮后返回的code,然后调用wx.login接口获取用户的登录凭证。

接着调用wx.getUserInfo接口获取用户的基本信息,其中包括加密后的手机号数据encryptedData和偏移向量iv。

最后通过wx.request发起一个POST请求,将code、encryptedData和iv作为参数传递给后端接口,后端进行解密操作,并返回用户的手机号。

成功获取手机号后,将手机号设置到data属性中的phone字段中,用于在页面中显示用户的手机号码。

后端

后端我们拿c#去实现,其他语言实现方式都一样,可供参考。

private readonly string AppId = "xxx";
private readonly string AppSecret = "xxxxxxxxxxxxxx";

/// <summary>
/// 返回微信用户手机号
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
[HttpPost("getPhoneNumber")]
[AllowAnonymous]
public async Task<IActionResult> GetPhoneNumber([FromBody] JObject data)
{
    try
    {
        string code = data["code"].ToString();
        var phoneNumber = getuserphonenumber(code).Result;

        return Ok(new { phoneNumber });
    }
    catch (Exception ex)
    {
        // Handle error
        return StatusCode(500, ex.Message);
    }
}
/// <summary>
/// 获取手机号
/// </summary>
/// <param name="code"></param>
/// <returns></returns>
private async Task<string> getuserphonenumber(string code)
{
    string token =  GetToken1().Result;
    string url = $"https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token="+ token;
    JObject a = new JObject();
    a.Add("code", code);
    using (HttpClient client = new HttpClient())
    {
        var response = await client.PostAsync(url, new StringContent(a.ToString()));
        var content = await response.Content.ReadAsStringAsync();

        // 解析JSON字符串
        JObject jsonObject = JObject.Parse(content);

        // 获取phoneNumber字段的值
        string phoneNumber = jsonObject.SelectToken("phone_info.phoneNumber").ToString();

        return phoneNumber;
    }
}
/// <summary>
/// 调用api获取access_token
/// </summary>
/// <returns></returns>
private async Task<string> GetToken1()
{
    string url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={AppId}&secret={AppSecret}";

    using (HttpClient client = new HttpClient())
    {
        var response = await client.GetAsync(url);
        var content = await response.Content.ReadAsStringAsync();

        dynamic result = JObject.Parse(content);
        string sessionKey = result.access_token;

        return sessionKey;
    }
}

说明

我们后端方法GetPhoneNumber里面的code用于调用下方获取手机号接口:

https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token= 点我查看怎么获取access_token

请求参包括codeaccess_token调用此接口

官方地址: 点我查看接口文档








获取access_token接口如下:

说明

需要小程序的两个参数:AppId和AppSecret,后端代码中可以看到

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={AppId}&secret={AppSecret}

官方文档: 点我查看接口文档




运行效果演示:

在这里插入图片描述


http://www.niftyadmin.cn/n/5345992.html

相关文章

【Unity3D日常开发】Unity3D中UGUI的Text、Dropdown输入特殊符号

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 在开发中会遇到需要显示特殊符号的情况&#xff0c;比如上标、…

使用宝塔面板部署Node.js+Mysql服务和Vue3-Admin项目到云服务器上

准备工作 一台云服务器&#xff0c;可以先用免费试用一个月的服务器进行练手&#xff1b;我这里选择的是腾讯云的轻量云服务器&#xff1b; 1、在云服务器上安装宝塔面板 宝塔面板官网地址&#xff1a;https://www.kancloud.cn/chudong/bt2017/424209 1.1 安装Xshell脚本工…

【心得】java反序列化漏洞利用启蒙个人笔记

目录 前置基础概念 java的反序列化利用概念baby题 例题1 例题2 java反序列化启蒙小结&#xff1a; URLDNS链 一句话总结&#xff1a; 简单分析&#xff1a; 利用点&#xff1a; 示例&#xff1a; 前置基础概念 序列化 类实例->字节流 反序列化 字节流->类实…

js实现填涂画板

文章目录 1实现效果2 实现代码 凑个数&#xff0c;存粹是好玩儿&#xff0c;哈哈... 1实现效果 最上方一栏&#xff1a; 左侧是颜色按钮&#xff0c;点击选中颜色&#xff0c; 中间是功能按钮&#xff0c;重置颜色、清空画板、回退、涂改液&#xff08;填涂色置为白色&#xff…

认识数学建模

文章目录 1 什么是数学建模2 数学建模的比赛形式3 参加数学建模的好处4 数学建模的流程5 数学建模成员分工6 数学建模常用软件7 数学建模竞赛7.1 美国大学生数学建模竞赛7.2 MathorCup高校数学建模挑战赛7.3 华中杯大学生数学建模挑战赛7.4 认证杯数学建模网络挑战赛7.5 华东杯…

C语言实现插入排序算法(附带源代码)

插入排序 插入排序&#xff08;英语&#xff1a;Insertion Sort&#xff09;是一种简单直观的排序算法。它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常…

[go] 原型模式

原型模式 原型模式是一种创建型设计模式&#xff0c; 使你能够复制已有对象&#xff0c; 而又无需使代码依赖它们所属的类。 模型说明 原型&#xff08;Prototype&#xff09;接口将对克隆方法进行声明。在绝大多数情况下&#xff0c;其中只会有一个名为clone克隆的方法。具…

AWS CI/CD之Vuejs(pnpm版)

问题 最近需要在AWS国际版上面部署一下前端web的CI/CD。之前介绍过在CodeBuild中使用yarn进行前端构建的文章&#xff0c;这次我们在CodeBuild中使用pnpm方式进行构建&#xff0c;同时把结合CodePipeline形成前端的CI/CD工作流。 1.创建前端部署s3桶 设置桶名称&#xff1a;…