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


    前言

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

    1. 手机号+验证码

    2. 账号+密码

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

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

    官方资料

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

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

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

    系统时序交互图

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

    后端实现

    引入依赖

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

    依赖如下:


      com.aliyun
      dypnsapi20170525
      1.0.6

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

    工具类(直接使用)

    1. @Slf4j
    2. public class AliPhoneUtils {
    3. //阿里云基础信息
    4. private static final String KEY = "你的key";
    5. private static final String KEY_SECRET = "你的keySecret";
    6. //读取超时时间
    7. private static final int READ_TIME_OUT = 1000 * 10;
    8. //连接超时时间,防止系统卡死
    9. private static final int CONNECT_TIME_OUT = 1000 * 10;
    10. //成功标记
    11. private static final String SUCCESS = "OK";
    12. //只初始化一次即可
    13. private static Client client = null;
    14. static {
    15. try {
    16. initClient();
    17. } catch (Exception e) {
    18. log.error("初始化AliPhoneUtils->client失败");
    19. }
    20. }
    21. //初始化客户端
    22. private static void initClient() throws Exception{
    23. Config config = new Config();
    24. config.setAccessKeyId(KEY);
    25. config.setAccessKeySecret(KEY_SECRET);
    26. config.setReadTimeout(READ_TIME_OUT);
    27. config.setConnectTimeout(CONNECT_TIME_OUT);
    28. client = new Client(config);
    29. }
    30. //构建请求对象
    31. private static GetMobileRequest buildMobileRequest(String token) {
    32. GetMobileRequest mobileRequest = new GetMobileRequest();
    33. mobileRequest.setAccessToken(token);
    34. //可要可不要,应该是随机数之类的,但是不传也没影响,可能其他接口能用上这个值吧
    35. // mobileRequest.setOutId("");
    36. return mobileRequest;
    37. }
    38. public static AliPhoneResult getPhone(String token){
    39. GetMobileRequest mobileRequest = buildMobileRequest(token);
    40. AliPhoneResult aliPhoneResult = new AliPhoneResult();
    41. log.info("getPhone 参数:{}", JsonUtils.Object2Json(mobileRequest));
    42. try {
    43. GetMobileResponse mobileResponse = client.getMobile(mobileRequest);
    44. GetMobileResponseBody body = mobileResponse.getBody();
    45. GetMobileResponseBody.GetMobileResponseBodyGetMobileResultDTO mobileResultDTO = body.getMobileResultDTO;
    46. //成功逻辑
    47. if(Objects.equals(body.getCode(), SUCCESS) && mobileResultDTO != null) {
    48. aliPhoneResult.setSuccess(true);
    49. aliPhoneResult.setMobile(mobileResponse.getBody().getMobileResultDTO.getMobile());
    50. } else {
    51. //失败逻辑,可以根据文档确定具体是啥错
    52. //https://help.aliyun.com/zh/pnvs/developer-reference/api-return-code?spm=a2c4g.11186623.0.0.54c837fb7QGUJL
    53. aliPhoneResult.setErrorMsg(body.getMessage());
    54. }
    55. log.info("getPhone 返回参数:{}", JsonUtils.Object2Json(mobileResponse));
    56. log.info("getPhone 返回body参数:{}", JsonUtils.Object2Json(body));
    57. } catch (Exception e) {
    58. log.error("getPhone,异常", e);
    59. aliPhoneResult.setErrorMsg("请求阿里云失败");
    60. }
    61. return aliPhoneResult;
    62. }
    63. public static void main(String[] args) {
    64. String token = "token";
    65. System.out.println(getPhone(token));
    66. }
    67. }

    关联类

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

    核心参数及获取

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

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

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

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

    com.aliyun.teaopenapi.models.Config

    后续

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

    总结

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

  • 相关阅读:
    python 异常机制
    【图像二值化】基于matlab C4.5决策树图像二值化【含Matlab源码 2225期】
    LuatOS-SOC接口文档(air780E)-- fonts - 字体库
    Supervisor进程管理
    Windows安装Linux双系统教程
    07-JVM内存逃逸分析与实践
    【YOLOv8系列】(四)YOLOv8使用自己的数据集进行模型训练,成就感满满
    redisson序列化采坑那些事儿
    脚手架构建VUE项目
    c语言分层理解(c语言结构体(下))
  • 原文地址:https://blog.csdn.net/zxc_user/article/details/136508826