首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >获取用户授权的手机号【微信小程序】

获取用户授权的手机号【微信小程序】

作者头像
很酷的站长
发布于 2023-01-08 03:40:14
发布于 2023-01-08 03:40:14
4.3K00
代码可运行
举报
运行总次数:0
代码可运行
1. 前言

特别注意:个人号小程序无法使用

目前该接口针对非个人开发者,且完成了认证的小程序开放(不包含海外主体)

微信开发文档: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

2. 获取用户授权手机号 button 组件

定义按钮组件,用于调起授权手机号弹窗

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">获取手机号</button>

bindgetphonenumber 事件回调

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
methods: {
// 获取用户授权的手机号
getPhoneNumber: e => {
if (e.detail.errMsg === 'getPhoneNumber:ok') {
wx.request({
url: 'http://tp6.cy/',
method: 'POST',
data: {
iv: e.detail.iv,
encryptedData: e.detail.encryptedData,
},
success: res => {
console.log(res)
}
})
} else {
wx.showToast({
title: '拒绝授权',
})
}
},
}

将以下数据传给后端,后台可通过解密数据得到手机号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
"encryptedData": "PIxZLRab9M9EQha6Od5WA5NT...",
"iv": "CVN4qd7zUe6+vz9wuAvReQ=="
}
3. 使用 EasyWechat 4.x 消息解密获取手机号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
composer require overtrue/wechat:~4.0

消息解密文档: https://easywechat.com/docs/4.x/mini-program/decrypt

一、获取小程序相关功能所属实例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$app = Factory::miniProgram($config);

https://easywechat.com/docs/4.x/mini-program/index

二、进行消息解密时最好使用 try catch 捕获可能出现的异常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
try {
    // 消息解密
    // $session 根据 wx.login 的临时登录凭证 code 换取的 session_key
    // $iv, $encryptedData 在 bindgetphonenumber 事件回调中获取
    $decryptedData = $app->encryptor->decryptData($session, $iv, $encryptedData);
} catch (\Throwable $th) {
    // 解密失败
    // 当使用的$session已过期时,解密会抛出异常,
    // 此时错误信息:The given payload is invalid.
    echo $th->getMessage();
}
// 手机号为空代表解密失败 fault 是自定义的抛出异常的函数
empty($decryptedData['phoneNumber']) && fault('解密失败');
// 解密成功后的操作
// ...

三、解密成功 $decryptedData 的值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "phoneNumber": "15037846666",
    "purePhoneNumber": "15037846666",
    "countryCode": "86",
    "watermark": {
        "timestamp": 1622695392,
        "appid": "wxb80ec74221f8a9ff"
    }
}
4. 在 EasyWechat 4.x 使用新接口获取手机号

从基础库 2.21.2 开始,对获取手机号的接口进行了安全升级,bindgetphonenumber 事件回调方法中的 e.detail 中增加了一个 code 属性。新版本接口不再需要提前调用 wx.login 进行登录(调用 wx.login 是为了获取 session_key)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "code": "dbad746bbaf51214f081e133668cc5a5ebbb9a526ad9e7b503e337a59c60414c",
    "encryptedData": "PIxZLRab9M9EQha6Od5WA5NT...",
    "iv": "CVN4qd7zUe6+vz9wuAvReQ=="
}

前端开发者只需要将上面的 code 传递给接口,后端开发者就能获取到手机号,因为这个接口是新版的,EasyWechat4.x 还没有更新,所以需要自己手动调用新版接口,代码示例如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 获取用户授权手机号
 * @param string $code
 */
function getPhoneNumber(string $code)
{
    $app = Factory::miniProgram($config);
    $access_token = $app->access_token->getToken()['access_token'];
    $url = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=' . $access_token;
    // 使用 curl 发送网络请求
    $result = https_request($url, json_encode(['code' => $code]));
    $array  = json_decode($res, true);
    if (isset($array['errcode']) && $array['errcode'] == 0) {
        // 获取成功
        // 手机号: $array['phone_info']['phoneNumber']
    } else {
        // 获取失败
    }
}
/**
 * http请求
 * @param string $url  请求的地址
 * @param string $data 请求参数
 */
function https_request($url, $data = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    if (!empty($data)) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
9种高性能可用高并发的技术架构
企鹅号小编
2017/12/25
2.1K0
9种高性能可用高并发的技术架构
亿级流量电商详情页系统的大型高并发与高可用缓存架构实战
本文主要讲解了如何设计、部署、优化电商网站的缓存架构,包括缓存热点数据、高并发读、高并发写、高可用、缓存预热、缓存自动降级、缓存雪崩、缓存穿透、缓存失效等方面的内容。同时,还介绍了基于storm实时热点发现+毫秒级实时热点缓存负载均衡的缓存预热解决方案和基于随机过期时间的缓存失效解决方案。
李鹏
2017/08/25
2.9K0
互联网三高架构:高并发、高性能、高可用
面向互联网的三高系统,最关注的软件质量属性是:性能、可用性、伸缩性、扩展性、安全性。
后端码匠
2021/08/19
3.1K0
java系统高并发的解决方案
一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。
MonroeCode
2018/01/09
2.2K0
高并发量网站解决方案
一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性 能的要求都很简单。随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及 面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。   大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中
wangxl
2018/03/08
1.9K0
高并发解决方案——提升高并发量服务器性能解决思路
一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单。随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。   大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这
李海彬
2018/03/23
2.1K0
架构 | 大型网站分布式高并发架构设计汇总
本文多数内容为小编精心总结,呕心沥血完成,切勿抄袭沿用。 参考文献《架构知识》、《深入理解java》 ---- 章节目录: 前言 前端架构 应用层架构 服务层架构 存储层架构 后台架构 数据采集、监控 安全架构 大型网站特点 系统的演变 大型网站架构模式 架构要素 性能优化 前端性能优化 服务器端性能优化 存储性能优化 高可用性能优化 伸缩性优化 分布式缓存 NOSQL 安全架构常见的攻击方式 加密 信息过滤 1前言 网站架构包括:前端架构+应用层架构+服务层架构+存储层架构+后台架构+数据中心机房架构+
码神联盟
2018/04/02
1.6K0
架构师眼中的高并发架构
前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案。 在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过来有着不少的血泪史,这里进行的总结,作为自己的归档记录,同时分享给大家。 服务器架构 业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。 一个可以支持高并发的服务少不了好的服
用户1263954
2018/05/30
1.5K0
性能基础之大型网站技术架构模式
本文整理自《大型网站技术架构 核心原理与案例分析》一书,这本书应该算一本很强的内功秘籍,虽然没有实战教学,但是基础理论扎实了是很重要的,书中观点明确,设计的问题域有针对性和全面性,对知识点的广度和深度都进行了拓展,包含了架构设计的方方面面。
高楼Zee
2019/07/17
4820
性能基础之大型网站技术架构模式
架构详解
所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠运行灯一系列问题与挑战。为此,在实践中提出了许多解决方案,以实现网站高性能、高可靠性、易伸缩、可扩展、安全等各种技术架构目标。
奥耶可乐冰
2024/01/10
3780
架构详解
大型网站技术架构(三)--架构模式
前言 模式:每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作。 网站架构模式:大型互联网公司在实践中提出了许多解决方案,以实现网站高性能、高可用、易伸缩、可扩展、安全等各种技术框架目标。这些解决方案又被更多网站重复使用,从而逐渐形成大型网站架构模式。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠运行灯一系列问题与挑战,为此,在实践中提出了许多解决方案,以实现网站高性能、高可靠性、易伸缩、可扩展、安全
程序员十三
2018/04/17
9510
大型网站技术架构(三)--架构模式
大型分布式网站架构技术总结:高性能+高可用+可扩展+可伸缩架构
集群:一个应用/模块/功能部署多份(如:多台物理机),通过负载均衡共同提供对外访问。
Java天坑
2018/10/15
2.8K0
大型互联网架构概述
描述:通常服务器操作系统使用 linux,应用程序使用 PHP 开发,然后部署在 Apache 上,数据库使用 Mysql,通俗称为 LAMP。汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。
李红
2019/05/29
6740
大型网站架构基础,我们需要知道这八个架构范式
今天我会跟大家分享的是,我们在做大型网站基础架构的时候,要知道的这八个架构范式,帮助大家了解大型网站架构中相对成熟且经过大量案例检验的这些技术和方案。
brookwang
2022/06/24
5570
大型网站架构基础,我们需要知道这八个架构范式
面试:第九章:分布式 、高并发、集群、负载均衡、高可用
分布式架构:把系统按照模块拆分成多个子系统,多个子系统分布在不同的网络计算机上相互协作完成业务流程,系统之间需要进行通信。
Java廖志伟
2022/09/28
7730
面试:第九章:分布式 、高并发、集群、负载均衡、高可用
三高(高并发、高性能、高可用)问题如何解?
金三银四招聘季,很多小伙伴最近都在经历着或者准备着面试。而在现在的互联网企业的大部分面试中,始终围绕着互联网的三高架构来展开。
徐建国
2021/08/03
2.9K0
《大型网站技术架构》学习笔记-01概述
李智慧老师的大型网站架构已经买了两年了,之前大体看过一次,不过还未内化为自己的本领,最近项目空闲,决定尽力掌握这部分的知识,以跟上大师的节奏。今天是儿童节,祝自己和大家心态永远年轻,即使没有年轻的身体
用户1216676
2018/01/24
1K0
架构概述之架构演化、模式与核心要素
如何打造一个高可用、高性能、易扩展、可伸缩且安全的应用系统?相信这是困扰着无数开发者的难题,在这里我们以一个网站为例,来讨论一下如何做好大型应用系统的架构设计。
架构之家
2022/07/12
3450
架构概述之架构演化、模式与核心要素
高并发的解决方案「建议收藏」
刚开始的时候应用和静态资源是保存在一起的,当并发量达到一定程度的时候就需要将静态资源保存到专门的服务器中,静态资源主要包括图片、视频、js、css和一些资源文件等,这些文件因为没有状态所以分离比较简单,直接存放到响应的服务器就可以了,一般会使用专门的域名去访问。 通过不同的域名可以让浏览器直接访问资源服务器而不需要再访问应用服务器了。架构图如下:
全栈程序员站长
2022/08/23
2.2K0
高并发的解决方案「建议收藏」
相关推荐
9种高性能可用高并发的技术架构
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档