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

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里面的codeconst code = e.detail.codewx.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 errorreturn 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.mzph.cn/news/647738.shtml

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

相关文章

Shell脚本④循环语句for、while、until

目录 一.for 1. 九九乘法表 2.求1到10奇数和 3.累计加到100 &#xff08;1&#xff09;方法一 &#xff08;2&#xff09;方法2 二.while 1.猜价格小游戏 2.累加到100的方法三 三.until循环 1.累加到100方法四 四.嵌套循环 五.循环语句中break、exit和continue 1…

Leetcode:二分搜索树层次遍历

题目&#xff1a; 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例&#xff1a; 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;[[3],[9,…

使用阿里云的oss对象存储服务实现图片上传(前端vue后端java详解)

一&#xff1a;前期准备&#xff1a; 1.1&#xff1a;注册阿里云账号&#xff0c;开启对象存储oss功能&#xff0c;创建一个bucket&#xff08;百度教程多的是&#xff0c;跟着创建一个就行&#xff0c;创建时注意存储类型是标准存储&#xff0c;读写权限是公共读&#xff09;…

《吐血整理》高级系列教程-吃透Fiddler抓包教程(24)-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇

1.简介 在开发或者测试的过程中&#xff0c;由于项目环境比较多&#xff0c;往往需要来来回回地反复切换&#xff0c;那么如何优雅地切换呢&#xff1f;宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考。 2.实际工作场景 2.1问题场景 &#xff08;1&#xff09;已发布线上…

YOLOv8改进 | Conv篇 | 利用DualConv二次创新C2f提出一种轻量化结构(轻量化创新)

一、本文介绍 本文给大家带来的改进机制是利用DualConv改进C2f提出一种轻量化的C2f,DualConv是一种创新的卷积网络结构,旨在构建轻量级的深度神经网络。它通过结合33和11的卷积核处理相同的输入特征映射通道,优化了信息处理和特征提取。DualConv利用组卷积技术高效排列卷积…

JavaScript基础之输入输出与变量常量详解

输入和输出 输出和输入也可理解为人和计算机的交互&#xff0c;用户通过键盘、鼠标等向计算机输入信息&#xff0c;计算机处理后再展示结果给用户&#xff0c;这便是一次输入和输出的过程。 举例说明&#xff1a;如按键盘上的方向键&#xff0c;向上/下键可以滚动页面&#x…

unity 装饰器模式(实例详解)

文章目录 简介1. **组件装饰器&#xff08;Component Decorators&#xff09;**:2. **游戏对象特效装饰器&#xff08;GameObject Effects Decorator&#xff09;**:3. **输入处理装饰器&#xff08;Input Handling Decorators&#xff09;**:4. **性能优化装饰器&#xff08;P…

70从零开始学Java之Collection与Collections有什么区别?

作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 截止到现在,壹哥已经把Java里的List、Set和Map这三大集合都给大家讲解完毕了,不知道各位掌握了多少呢?如果你对之前的内容还没有熟练掌握,可以把壹哥前…

day32WEB 攻防-通用漏洞文件上传二次渲染.htaccess变异免杀

本章节知识点&#xff1a; 1 、文件上传 - 二次渲染 2 、文件上传 - 简单免杀变异 3 、文件上传 -.htaccess 妙用 4 、文件上传 -PHP 语言特性 前置知识&#xff1a; 后门代码需要用特定格式后缀解析&#xff0c;不能以图片后缀解析脚本后门代码 ( 解析漏洞除外 ) 如&…

codeforces 1200分

文章目录 1.[B. Same Parity Summands](https://codeforces.com/contest/1352/problem/B)2.[C. Challenging Cliffs](https://codeforces.com/problemset/problem/1537/C)3.[B. Sorted Adjacent Differences](https://codeforces.com/contest/1339/problem/B)4.[C1. k-LCM (eas…

应急响应-windows-日志分析

日志概述 在windows系统中&#xff0c;日志文件包括&#xff1a;系统日志、安全性日志及应用程序日志&#xff0c;对于应急响应工程师来说这三类日志需要熟练掌握&#xff0c;其位置如下。 在windows 2000专业版/windows XP/Windows Server 200&#xff08;注意日志文件的后缀…

swagger2 和 knife4j 整合

swagger整合knife4j 导入依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.2</version></dependency>引入配置 我们自己写一个配置类也好,我这里写…

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

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

JavaScript 学习笔记(JS进阶 Day2)

「写在前面」 本文为 b 站黑马程序员 pink 老师 JavaScript 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。推荐先按顺序阅读往期内容&#xff1a; 1. JavaScript 学习笔记&#xff08;Day1&#xff09; 2. JavaSc…

【前端开发】Font Awesome 一个基于CSS和LESS的免费图标库工具包,下载与使用教程!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

MATLAB知识点:min : 求最小值 和 max:求最大值

​讲解视频&#xff1a;可以在bilibili搜索《MATLAB教程新手入门篇——数学建模清风主讲》。​ MATLAB教程新手入门篇&#xff08;数学建模清风主讲&#xff0c;适合零基础同学观看&#xff09;_哔哩哔哩_bilibili 节选自第3章 3.4.1节 min : 求最小值&#xff08;minimum va…

小迪安全23WEB 攻防-Python 考点CTF 与 CMS-SSTI 模版注入PYC 反编译

#知识点&#xff1a; 1、PYC 文件反编译 2、Python-Web-SSTI 3、SSTI 模版注入利用分析 各语言的SSIT漏洞情况&#xff1a; SSIT漏洞过程&#xff1a; https://xz.aliyun.com/t/12181?page1&time__1311n4fxni0Qnr0%3DD%2FD0Dx2BmDkfDCDgmrYgBxYwD&alichlgrefhtt…

链表--226. 翻转二叉树/medium 理解度A

226. 翻转二叉树 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&…

windows?linux?如何使用JMeter

windows?linux?如何使用JMeter 安装JMeter的步骤以GUI模式启动JMeter如何在非GUI模式下运行JMeter在linux中使用JMeter 安装JMeter的步骤 JMeter 是一个纯 Java应用程序&#xff0c;应该在任何具有兼容Java实现的系统上正确运行。 安装 JMeter 的步骤 步骤1&#xff09;安…

小迪安全21WEB 攻防-JavaWeb 项目JWT 身份攻击组件安全访问控制

#知识点&#xff1a; 1、JavaWeb 常见安全及代码逻辑 2、目录遍历&身份验证&逻辑&JWT 3、访问控制&安全组件&越权&三方组件 Java&#xff1a;大部分都是第三方插件出现漏洞 webgoat的搭建&#xff1a;——java靶场 JDK版本要求&#xff1a;11.0…