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

news2024/10/7 2:18:30

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.coloradmin.cn/o/1411936.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

What is Rust? Why Rust?

why Rust&#xff1f; 目前&#xff0c;Rust 变得越来越流行。然而&#xff0c;仍然有很多人&#xff08;和公司&#xff01;&#xff09;误解了 Rust 的主张价值是什么&#xff0c;甚至误解了它是什么。在本文中&#xff0c;我们将讨论 Rust 是什么以及为什么它是一种可以增强…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团&#xff08;证券代码&#xff1a;0022…

A JSONArray text must start with at 1

A JSONArray text must start with at 1 [character 2 line 1] 起因&#xff1a;String数组转 JSON 后端调用出错 JSONUtil.toList(xx.getTags(), String.class) 数据库对象entity转包装类 方法 &#xff0c;其中数据库字段tags是String类型&#xff0c;在包装类中想转换为 J…

【idea】idea中编译内存不足(java: java.lang.0ut0fMemoryError: Java heap space)的解决方法

问题 在编译一个较大的idea项目时候&#xff0c;有时候会显示内存不足&#xff0c;导致项目编译失败 原因 编译项目时实际也是启动了jvm进行的&#xff0c;所以需要分配对应的内存大小。 这个大小在idea中有一个默认的配置&#xff0c;大小是700M。 对于一个大型的项目这个大…

大数据Doris(五十九):SQL函数之字符串函数(三)

文章目录 SQL函数之字符串函数(三) 一、​​​​​​​NULL_OR_EMPTY (VARCHAR str)

Redis 高可用之集群

1、简介 在之前的文章里&#xff0c;通过主从复制和哨兵机制实现Redis 高可用架构&#xff0c;但是由于架构比较复杂&#xff0c;难以维护&#xff0c;引入集群架构模式&#xff0c;一个集群可以有多个 master &#xff0c;一个master 可以有多个slave&#xff0c;集群支持故障…

Unity制作右键菜单(自适应分辨率)

一、需求 右键触发打开菜单&#xff0c;左键在内部可选择选项&#xff0c;左键单击菜单范围外关闭。难点在于屏幕坐标系&#xff0c;鼠标位置&#xff0c;UI位置之间的关系。 二、理论 前置知识&#xff1a; unity中&#xff0c;用RectTransform对象的position.x和position.y表…

nginx详细资料

nginx简介 1、nginx产生 Nginx同Apache一样都是Web服务器。基于REST架构风格&#xff0c;以统一资源描述符(Uniform Resources Identifier ) URI或者统一资源定位符&#xff08;Uniform Resources Locator&#xff09;URL作为沟通一句&#xff0c;通过HTTP协议提供各种网络服务…

Vue自定义成功弹窗H5实现类似于小程序的效果

效果图: <div class="father"><div class="success-box" v-if="isSuccess"><img src="../../assets/insure/success-logo.png" alt=""><span>{{ successTitle }}</span></div> </d…

单片机之keil软件环境搭建

简介 Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案&#xff0c;通过一个集成开发环境&#xff08;μVision&#xff09;将这些部分组合在一起。     目前软件对中文的支持不友好&#xff0c;不建议安装网上的一些汉化包…

14.java集合

文章目录 概念Collection 接口概念示例 Iterator 迭代器基本操作&#xff1a;并发修改异常增强循环遍历数组&#xff1a;遍历集合&#xff1a;遍历字符串&#xff1a;限制 list接口ListIteratorArrayList创建 ArrayList&#xff1a;添加元素&#xff1a;获取元素&#xff1a;修…

瑞丽杂志引领潮流,VOSS眼镜概念店开启奢华新纪元

近日&#xff0c;由《瑞丽》杂志社举办的2023第4届瑞丽轻奢品牌大赛&#xff0c;以“轻奢•悦藏”为主题的大赛已圆满结束&#xff0c;VOSS眼镜荣获&#xff1a;2023瑞丽轻奢品牌大赛「轻奢时尚风格奖」&#xff0c;作为眼镜行业唯一获此奖项的品牌&#xff0c;VOSS眼镜对此表示…

仓储管理系统——软件工程报告(详细设计)④

详细设计 一、系统功能模块的划分 根据系统的功能性需求&#xff0c;本文将部队仓库管理系统分为以下六大模块&#xff1a;系统管理模 块、基础数据模块、出入库管理模块、库存管理模块、仓库信息管理模块、作业管理模 块&#xff0c;每个模块内部又分为很多小功能模块&#…

java数据结构与算法刷题-----LeetCode769. 最多能完成排序的块

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 这道题可以理解为&#xff0c;只能保证块内有序的情况下&#xf…

力扣 | 141. 环形链表

快慢指针的使用&#xff01; import java.util.HashSet; import java.util.Set;public class _141_linked_list_cycle {// 哈希查找// 时间复杂度&#xff1a;O(n)// 空间复杂度&#xff1a;O(n)public boolean hasCycle1(ListNode head) {Set<ListNode> set new HashSe…

2-SAT问题相关理论和算法

前言 SAT 问题简介 SAT是可满足性、适定性(Satisfiability)问题的简称。一般形式为k-适定性问题或k-可满足性问题&#xff0c;简称 k-SAT。 何为布尔可满足性问题&#xff1f;给定一条真值表达式&#xff0c;包含逻辑变量、逻辑与、逻辑或以及非运算符&#xff0c;如&#x…

uniapp app更新

uniapp app更新 这个版本要随之增加&#xff0c;不然刚更新时直接用app, 新包增加的那些页面跳转会有问题&#xff0c;不能跳新的页面 //app更新检测 updataApp(){const that this;uni.showLoading({title:加载中...})plus.runtime.getProperty(plus.runtime.appid, functio…

JS进阶-高阶技巧

深浅拷贝 首先浅拷贝和深拷贝只针对引用类型 • 浅拷贝 开发中我们经常需要复制一个对象。如果直接用赋值会有下面问题&#xff1a; 这好比有同学来pink老师这里拷视频&#xff0c;竟然用的是剪切…气人不 浅拷贝&#xff1a;拷贝的是地址 1. 拷贝对象&#xff1a;Object…

塑料透光率测定仪评估塑料质量

塑料透光率是指光线通过塑料材料的能力&#xff0c;是评估塑料质量的重要指标之一。透光率越高&#xff0c;塑料的质量通常越好。为了确保生产出的塑料制品具有良好的透光性&#xff0c;对塑料透光率的检测非常重要。 一、塑料透光率检测方法 塑料透光率检测通常采用两种方法…

苹果Find My市场需求火爆,伦茨科技ST17H6x芯片助力客户量产

苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、AirPods、Apple Watch&#xff0c;如今的Find My已经不单单可以查找苹果的设备&#xff0c;随着第三方设备的加入&#xff0c;将丰富Find My Network的版图。产…