企业网站开发文档,二维码付款跳转网页制作教程,建筑设计招标网站,泉州网站建设设计前言 用户登录原来的登录方式如下 1. 手机号验证码 2. 账号密码 运营觉得操作过于复杂, 因此想引入阿里自动登录的逻辑, 也就是号码认证服务,所以才有了这篇问文章 注: 本文只是记录Java端的实现, app端的请自行查询文档实现 官方资料 文档 : 什么是号码认证服务_号码认证服务(…前言 用户登录原来的登录方式如下 1. 手机号验证码 2. 账号密码 运营觉得操作过于复杂, 因此想引入阿里自动登录的逻辑, 也就是号码认证服务,所以才有了这篇问文章 注: 本文只是记录Java端的实现, app端的请自行查询文档实现 官方资料 文档 : 什么是号码认证服务_号码认证服务(PNVS)-阿里云帮助中心 调试地址: GetMobile_云通信号码认证服务_API调试-阿里云OpenAPI开发者门户 错误码地址: 号码认证服务的服务端API返回码_号码认证服务(PNVS)-阿里云帮助中心 系统时序交互图 其实并不复杂,简单说就是app获取token, 后端解析token,获取真正的手机号,但是经过阿里的加密可能会安全点咯
后端实现
引入依赖 参考来源 : 如何一键登录和本机号码校验GetMobile_号码认证服务(PNVS)-阿里云帮助中心 依赖如下: dependency groupIdcom.aliyun/groupId artifactIddypnsapi20170525/artifactId version1.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?spma2c4g.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 后续 后面无非就是拿着手机号去进行注册或者登录这里每个人业务可能不太一样就没写了 总结 这个功能其实并不复杂只要理解了流程就能搞明白。所以建议大家有空还是可以多画画流程图的。不用想着啥就当是为了自己你画一遍下来自然就知道要干啥了