阿里云一键登录(号码认证服务)

前言

用户登录原来的登录方式如下

1. 手机号+验证码

2. 账号+密码

运营觉得操作过于复杂, 因此想引入阿里自动登录的逻辑, 也就是号码认证服务,所以才有了这篇问文章

注: 本文只是记录Java端的实现, app端的请自行查询文档实现

官方资料

文档 : 什么是号码认证服务_号码认证服务(PNVS)-阿里云帮助中心

调试地址: GetMobile_云通信号码认证服务_API调试-阿里云OpenAPI开发者门户

错误码地址: 号码认证服务的服务端API返回码_号码认证服务(PNVS)-阿里云帮助中心

系统时序交互图

        其实并不复杂,简单说就是app获取token, 后端解析token,获取真正的手机号,但是经过阿里的加密可能会安全点咯

后端实现

引入依赖

参考来源 : 如何一键登录和本机号码校验GetMobile_号码认证服务(PNVS)-阿里云帮助中心

依赖如下:

<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>dypnsapi20170525</artifactId>
  <version>1.0.6</version>
</dependency>

但是神奇的是没有提供具体的接口文档,或者是我自己没找到

工具类(直接使用)

@Slf4j
public class AliPhoneUtils {//阿里云基础信息private static final String KEY = "你的key";private static final String KEY_SECRET = "你的keySecret";//读取超时时间private static final int READ_TIME_OUT = 1000 * 10;//连接超时时间,防止系统卡死private static final int CONNECT_TIME_OUT = 1000 * 10;//成功标记private static final String SUCCESS = "OK";//只初始化一次即可private static Client client = null;static {try {initClient();} catch (Exception e) {log.error("初始化AliPhoneUtils->client失败");}}//初始化客户端private static void initClient() throws Exception{Config config = new Config();config.setAccessKeyId(KEY);config.setAccessKeySecret(KEY_SECRET);config.setReadTimeout(READ_TIME_OUT);config.setConnectTimeout(CONNECT_TIME_OUT);client = new Client(config);}//构建请求对象private static GetMobileRequest buildMobileRequest(String token) {GetMobileRequest mobileRequest = new GetMobileRequest();mobileRequest.setAccessToken(token);//可要可不要,应该是随机数之类的,但是不传也没影响,可能其他接口能用上这个值吧
//        mobileRequest.setOutId("");return mobileRequest;}public static AliPhoneResult getPhone(String token){GetMobileRequest mobileRequest = buildMobileRequest(token);AliPhoneResult aliPhoneResult = new AliPhoneResult();log.info("getPhone 参数:{}", JsonUtils.Object2Json(mobileRequest));try {GetMobileResponse mobileResponse = client.getMobile(mobileRequest);GetMobileResponseBody body = mobileResponse.getBody();GetMobileResponseBody.GetMobileResponseBodyGetMobileResultDTO mobileResultDTO = body.getMobileResultDTO;//成功逻辑if(Objects.equals(body.getCode(), SUCCESS) && mobileResultDTO != null) {aliPhoneResult.setSuccess(true);aliPhoneResult.setMobile(mobileResponse.getBody().getMobileResultDTO.getMobile());} else {//失败逻辑,可以根据文档确定具体是啥错//https://help.aliyun.com/zh/pnvs/developer-reference/api-return-code?spm=a2c4g.11186623.0.0.54c837fb7QGUJLaliPhoneResult.setErrorMsg(body.getMessage());}log.info("getPhone 返回参数:{}", JsonUtils.Object2Json(mobileResponse));log.info("getPhone 返回body参数:{}", JsonUtils.Object2Json(body));} catch (Exception e) {log.error("getPhone,异常", e);aliPhoneResult.setErrorMsg("请求阿里云失败");}return aliPhoneResult;}public static void main(String[] args) {String token = "token";System.out.println(getPhone(token));}
}

关联类

@Data
public class AliPhoneResult implements Serializable {private static final long serialVersionUID = 1L;//是否发送成功private boolean isSuccess;//错误消息private String errorMsg;//成功时返回的手机号private String mobile;
}

核心参数及获取

AccessKeyId、AccessKeySecret :   就是你账号信息(登录阿里云那个账号) (必须)

READ_TIME_OUT:  读取超时,不要因为阿里云影响你系统,单位为毫秒 (非必须)

CONNECT_TIME_OUT:  连接超时,不要因为阿里云影响你系统,单位毫秒(非必须)

其他的就没啥了,直接看代码,也可以查看以下类能配置的信息

com.aliyun.teaopenapi.models.Config

后续

        后面无非就是拿着手机号去进行注册或者登录,这里每个人业务可能不太一样,就没写了

总结

        这个功能其实并不复杂,只要理解了流程就能搞明白。所以建议大家有空还是可以多画画流程图的。不用想着啥,就当是为了自己,你画一遍下来自然就知道要干啥了

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

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

相关文章

【数据分享】2000-2022年全国1km分辨率的逐日PM10栅格数据

空气质量数据是在我们日常研究中经常使用的数据&#xff01;之前我们给大家分享了2000-2022年全国范围逐日的PM2.5栅格数据和2013-2022年全国范围逐日SO2栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;。 本次我们给大家带来的是2000-2022年全国范围的逐日的PM10栅…

Vue:自动按需导入element-plus图标

自动导入使用 unplugin-icons 和 unplugin-auto-import 从 iconify 中自动导入任何图标集。 完整vite.config.js参考模板 https://download.csdn.net/download/ruancexiaoming/88928539 导入element-plus图标 命令行安装unplugin-icons pnpm i -D unplugin-icons//没有安装自…

保姆级讲解字符串函数(上篇)

目录 字符分类函数 导图 函数介绍 1.getchar 2. isupper 和 islower 字符转换函数&#xff1a;&#xff08;toupper , tolower&#xff09; 与 putchar 字符串函数 导图 string函数的使用和模拟实现 string的使用 求字符串长度 字符串的比较 string函数的模拟实现…

四桥臂三相逆变器动态电压恢复器(DVR)MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 简介 四桥臂三相逆变器 电路 的一般形式如图 1&#xff0c;为 便于分析 &#xff0c;将其等效成图所示的电路 。以直流母线电压Ud的 1&#xff0f;2处为参考点 &#xff0c;逆变器三相和零线相 输 出可等效成…

【FFmpeg】ffmpeg 命令行参数 ⑤ ( 使用 ffmpeg 命令提取 音视频 数据 | 保留封装格式 | 保留编码格式 | 重新编码 )

文章目录 一、使用 ffmpeg 命令提取 音视频 数据1、提取音频数据 - 保留封装格式2、提取视频数据 - 保留封装格式3、提取视频数据 - 保留编码格式4、提取视频数据 - 重新编码5、提取音频数据 - 保留编码格式6、提取音频数据 - 重新编码 一、使用 ffmpeg 命令提取 音视频 数据 1…

全网最最最详细centos7如何安装docker教程

在CentOS 7上安装Docker主要包括以下步骤&#xff1a; 1. 卸载旧版本的Docker 首先&#xff0c;需要确保系统上没有安装旧版本的Docker。可以通过以下命令来卸载它们&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-late…

【已解决】无法删除自己上传在CSDN的资源怎么办?(2024亲测可用)

文章目录 1. 前情提要2. 实测过程3. 解决方案 1. 前情提要 我在 CSDN 上发布了一个免费资源&#xff0c;近几天却有粉丝反馈这个免费资源现在要开 VIP 才能下载&#xff0c;于是我想删除这个资源重新上传&#xff0c;但系统提示我没有权限&#xff0c;被下载过的资源无法删除&…

java-ssm-jsp-基于ssm的宠物领养系统的设计与实现

java-ssm-jsp-基于ssm的宠物领养系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

AI给开发经验3-5年的程序员的一些建议

Q: 你是一名CTO&#xff0c;请你给开发经验3-5年的程序员一些职业和生活方面的建议&#xff0c;1500字。 A: 作为一名有着丰富经验的CTO&#xff0c;我深知程序员在职业道路上的成长并非一帆风顺。针对开发经验在3-5年的程序员&#xff0c;我想从职业和生活两个方面&#xff0…

HCIA-HarmonyOS设备开发认证V2.0-习题2

目录 习题一习题二坚持就有收获 习题一 # 判断题## 1.PWM占空比指的是低电平时间占周期时间的百分比。(错误)正确(True)错误(False)解题&#xff1a; - PWM占空比指的是高电平时间占周期时间的百分比## 2.UART是通用异步收发传输器&#xff0c;是通用串行数据总线&#xff0c;…

excel 动态列导出

excel动态列&#xff0c;只好用poi来写了&#xff0c;也并不复杂&#xff0c;一样就这个件事情抽像为几步&#xff0c;就是套路了&#xff0c;开发效率就上去了。 1 准备空模板 导出操作与excel模板的导出一样&#xff0c;可以参考excel导出标准化 2 自定义SheetWriteHandler …

苍穹外卖-day01

苍穹外卖-day01 目录 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库环境…