uni-app微信小程序获取手机号授权登录(复制即用,js完成敏感数据对称解密,无需走服务端处理)

目录

一、示例

二、具体实现说明


一、示例

  • 获取到的手机号

二、具体实现说明

属性说明
属性名说明生效时机
@getphonenumber获取用户手机号回调open-type="getPhoneNumber"
  •  按钮写法
<template><view class="login"><view class="content"><button class="button_wx" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"><u-icon name="weixin-fill" color="#FFFFFF" size="50"></u-icon><text class="button_text">授 权 登 录</text></button></view></view>
</template>
接口说明
接口说明
wx.login()获取登录凭证(code),通过凭证进而换取用户登录态信息
auth.code2Session登录凭证校验
参数说明
参数说明
code用户登录凭证(有效期五分钟),只能消费一次
WXBizDataCrypt.js用于对称解密微信接口返回的敏感数据(底部标红处有下载地址
appid微信公众号平台申请的AppID(小程序ID)
secret微信公众号平台申请的AppSecret(小程序密钥)
js_code登录时获取的 code
grant_type授权类型(只需填写 authorization_code)
返回值说明
返回值说明
openid用户唯一标识
session_key会话密钥
unionid用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回,详见 UnionID 机制说明
errcode错误码
errmsg错误信息
encryptedData包括敏感数据在内的完整用户信息的加密数据
iv加密算法的初始向量,详见 用户数据的签名验证和加解密
errcode的合法值
说明
-1系统繁忙,此时请开发者稍候再试
0请求成功
40029code 无效
45011频率限制,每个用户每分钟100次
40226高风险等级用户,小程序登录拦截 。风险等级详见用户安全解方案
  • 解密算法js下载

        下载地址:WXBizDataCrypt.js 

  •  具体实现(代码复制即用)
<script>import WXBizDataCrypt from "@/utils/WXBizDataCrypt.js";//必要解密jslet that;export default {data() {return {appid: '填写你自己的appid',//必要secret: '填写你自己的secret',//必要code: '',//临时登录凭证};},mounted() {that = this;that.isLogin();that.getWxCode();},methods: {isLogin() {try {const phoneNumber = uni.getStorageSync('phoneNumber');if (phoneNumber) {//自动登录// 业务登录方法}} catch (e) {// error}},// 获取临时登录凭证getWxCode() {wx.login({success: res => {console.log('获取用户临时登录凭证code:', res.code);that.code = res.code;}})},// 获取手机号的回调函数getPhoneNumber(e) {const {errMsg,encryptedData,iv} = e.detail;if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {console.log('用户拒绝授权=>');} else {console.log('用户同意授权=>', errMsg);console.log('用户手机号加密数据:', e.detail.encryptedData);console.log('加密算法的初始向量:', iv);console.log('开始校验登录凭证code=>');//登录凭证校验,返回用户唯一标识、会话密钥uni.request({url: 'https://api.weixin.qq.com/sns/jscode2session',//微信登录凭证校验接口data: {appid: that.appid,secret: that.secret,js_code: that.code,grant_type: 'authorization_code'},success(sessionRes) {console.log('登录凭证code校验成功=>');const {openid,session_key} = sessionRes.data;console.log('用户唯一标识:', openid);console.log('会话密钥:', session_key);console.log('开始解密用户手机号=>');var pc = new WXBizDataCrypt(that.appid, session_key);//解密用户数据var data = pc.decryptData(encryptedData, iv);if (data) {console.log('用户手机号解密成功: ', data.phoneNumber);uni.setStorageSync("phoneNumber", data.phoneNumber);// 业务登录方法// that.startLogin(data.phoneNumber);}}});}},}}
</script><style lang="scss" scoped>.login {min-height: 100vh;}.content {margin-top: 500rpx;}.button_wx {background-color: #07c160;display: flex;justify-content: center;align-items: center;color: #FFFFFF;font-size: 30rpx;width: 601rpx;height: 100rpx;border-radius: 2.5rem;}.button_text {font-size: 20px;margin-left: 0.5em;}
</style>


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/456210.html

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

相关文章

敏捷开发中的用户故事

用户故事 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址drawon.cn或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功能&#xff0c;并实现了云端存储&#xff0c…

Unity3d Cinemachine篇(完)— TargetGroup

文章目录 前言使用TargetGroup追随多个模型1. 创建二个游戏物体2. 创建TargetGroup相机3. 设置相机4. 完成 前言 上一期我们简单的使用了ClearShot相机&#xff0c;这次我们来使用一下TargetGroup 使用TargetGroup追随多个模型 1. 创建二个游戏物体 2. 创建TargetGroup相机 3…

无锁CAS--备份,有问题

一、引言 锁是解决并发问题的万能钥匙&#xff0c;可是并发问题只有锁能解决吗&#xff1f;当然不是&#xff0c;CAS也可以解决并发问题 二、什么是CAS 比较并交换(compare and swap&#xff0c;CAS)&#xff0c;是原子操作的一种&#xff0c;可用于在多线程编程中实现不被打…

活锁方案与自旋锁

问题 如何设置获取互斥量时的等待时间&#xff1f; 如果等待超时&#xff0c;如何避免死锁&#xff1f; 避免死锁 -- 设置等待超时 解决方案&#xff1a; 1、尝试获取第 1 个互斥量&#xff1a; 若成功&#xff0c;则转 2 执行&#xff1b;若失败&#xff0c;则等待&#x…

部署tomcat

1 idea打包完&#xff0c;找到target目录下的网站 我的叫做 test.webSYS 2 linux 安装 tomcat 后 修改conf下的server.xml中的Connector的port <Connector port"9001" protocol"HTTP/1.1"connectionTimeout"20000"redirectPort"8443…

深度学习缝模块怎么描述创新点?(附写作模板+涨点论文)

深度学习缝了别的模块怎么描述创新点、怎么讲故事写成一篇优质论文&#xff1f; 简单框架&#xff1a;描述自己这个领域&#xff0c;该领域出现了什么问题&#xff0c;你用了什么方法解决&#xff0c;你的方法有了多大的性能提升。 其中&#xff0c;重点讲清楚这两点&#xf…

关于node.js奇数版本不稳定 将11.x.x升级至16.x.x不成功的一系列问题(一)

据说vue2用16稳定一些 vue3用18好一点&#xff08;但之前我vue3用的16.18.1也可以&#xff09; 为维护之前的老项目 先搞定node版本切换 下载nvm node版本管理工具 https://github.com/coreybutler/nvm-windows/releases 用这个nvm-setup.zip安装包 安之前最好先将之前的nod…

问题:下列关于海关统计项目的表述,正确的有:A.进出境货物的统计重量和数量应以报关单位申报的重量和数 #笔记#职场发展#媒体

问题&#xff1a;下列关于海关统计项目的表述&#xff0c;正确的有&#xff1a;A&#xff0e;进出境货物的统计重量和数量应以报关单位申报的重量和数 下列关于海关统计项目的表述&#xff0c;正确的有&#xff1a; A&#xff0e;进出境货物的统计重量和数量应以报关单位申报的…

护眼台灯对眼睛有伤害吗?推荐适合考研使用的台灯

随着科技的进步&#xff0c;台灯的外观和造型都在不断发展&#xff0c;逐渐台灯的功能也多元化&#xff0c;各式各样的台灯都有&#xff0c;其中最受广大家长、学生党、办公族喜爱的就是护眼台灯。不过也有些小伙伴问&#xff0c;护眼台灯对眼睛有伤害吗&#xff1f; 其实正确的…

Linux虚拟文件系统(VFS)

虚拟地址空间通常是与进程密切相关的概念&#xff0c;而不是文件系统。虚拟地址空间是为了提供进程对内存的抽象和隔离而设计的。 文件系统不使用页表&#xff0c;直接使用物理地址。 虚拟文件系统是linux内核的一个核心子系统。、 虚拟文件系统的目的&#xff1a;通过一个抽…

2024年2月CCF-全国精英算法大赛题目

第一次参加这种比赛&#xff0c;虽然是c类赛事&#xff0c;但是是ccf主办的&#xff0c;难度还是有点的&#xff0c;主要是前面签到题主要是思想&#xff0c;后面的题目难度太高&#xff0c;身为力扣只刷了一百多道题目的我解决不了&#xff0c;这几道我只做了B,C题,E题超时了&…

Linux 命令基础

Shell概述 Linux操作系统的Shell作为操作系统的外壳&#xff0c;为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。 Shell是用户和Linux内核之间的接口程序&#xff0c;如果把硬件想象成一个球体的中心&#xff0c;内核围绕在硬件的外层管理着…