发送手机短信验证码

  • 前言
    • 一. 准备工作
    • 二. 配置
    • 三. 实战代码(仅仅是后台代码,前端传入手机号)
    • 总结

前言

  1. 在网站和移动应用中利用短信验证码进行信息确认是最常用的验证手段。随着短信验证码的技术更新,短信验证码的应用程序也非常多样,如交易确认、授权绑定、登录保护等。 本文用在微信小程序手机号登录
  2. 短信验证码对注册用户的管理更加方便,用户通过手机注册网站平台,手机号码+短信验证码的登录方式,操作非常简单,比起输入密码,用户可能更喜欢短信验证登录。短信验证码保证了用户注册时的质量与数量,它可以更好的校验用户真实身份,可以避免恶意注册,令企业更好的进行用户管理,减少运营维护的工作量。

一. 准备工作

  1. 没有阿里云账号先注册阿里云账户
  2. 短信功能是要收费的,所以乖乖充值吧!
  3. 完成短信签名和短信模板的申请(需要一点时间)
  4. 创建access key(后面需要使用)

二. 配置

  1. 依赖
     <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.4.6</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-ecs</artifactId><version>4.17.6</version></dependency>
  1. 配置阿里云短信(这里***是自己要配的,来源于阿里云短信服务)
aliyun:accessKey: ***accessSecret: ***sms:domain: ***SignName: ***TemplateCode: ***
  1. java中引入
 @Value("${aliyun.accessKey}")private String accessKey;@Value("${aliyun.accessSecret}")private String accessSecret;@Value("${aliyun.sms.domain}")private String domain;@Value("${aliyun.sms.SignName}")private String signName;@Value("${aliyun.sms.TemplateCode}")private String templateCode;@Value("${water.charge.maintenanceCode}")private String maintenanceCode;

三. 实战代码(仅仅是后台代码,前端传入手机号)

  1. Controller
 @Autowiredprivate CustomerAppLoginService customerAppLoginService;@ApiOperation("发送手机短信")@GetMapping("phone/send_code")public JsonData phoneSendCode(@RequestParam("phone") String phone) {return customerAppLoginService.phoneSendCode(phone);}
  1. service
@Overridepublic JsonData phoneSendCode(String phone) {// 手机号三重校验JsonData jsonData = tripleCheck(phone);if (jsonData.getCode() != 0) {return jsonData;}// 自定义验证码String vCode = RevenueUtil.getVCode();DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKey, accessSecret);IAcsClient client = new DefaultAcsClient(profile);// 组装请求CommonRequest request = buildRequest(phone, vCode);try {CommonResponse response = client.getCommonResponse(request);JSONObject smsRes = JSONObject.parseObject(response.getData());String ok = "OK";String code = "Code";if (smsRes.get(code).equals(CODE_ERROR)) {return JsonData.buildResult(BizCodeEnum.REVENUE_MSG_SEND_NUM_OUT);}if (ok.equals(smsRes.get(code))) {log.info("send sms success: " + vCode);// 放入缓存,登录时校验,过期时间2分钟redisTemplate.opsForValue().set(phone, vCode, 120, TimeUnit.SECONDS);} else {log.error("send sms failed: " + smsRes.get("Message"));return JsonData.buildResult(BizCodeEnum.REVENUE_MSG_SEND_FAIL);}} catch (Exception e) {return JsonData.buildResult(BizCodeEnum.REVENUE_MSG_SEND_FAIL);}return JsonData.buildSuccess();}
  1. 用到的方法
    a. 校验手机号
  /*** 手机号正则*/private static final Pattern PHONE_PATTERN = Pattern.compile("^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])\\d{8}$");/*** 手机号格式校验** @return*/public static Boolean validatePhone(String phone) {if (null == phone || "".equals(phone)) {return false;}Matcher m = PHONE_PATTERN.matcher(phone);return m.matches();}
b. 组装请求
/*** 构建 CommonRequest** @param phone* @param vCode* @return*/private CommonRequest buildRequest(String phone, String vCode) {CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);request.setSysDomain(domain);request.setSysVersion("2017-05-25");request.setSysAction("SendSms");request.putQueryParameter("RegionId", "cn-hangzhou");request.putQueryParameter("PhoneNumbers", phone);request.putQueryParameter("SignName", signName);request.putQueryParameter("TemplateCode", templateCode);request.putQueryParameter("TemplateParam", "{\"code\":" + vCode + "}");return request;}
  1. 附加
    代码中使用到Redis存储,用于控制验证码两分钟失效
// 放入缓存,登录时校验,过期时间2分钟
redisTemplate.opsForValue().set(phone, vCode, 120, TimeUnit.SECONDS);

总结

接口逻辑并不复杂,主要能看得懂接口文档和相关配置就行
有哪里有问题欢迎指正
下一篇:【微信小程序 - 工作实战分享】2.微信小程序相关信息获取并且登录

【微信小程序 - 工作实战分享】1.微信小程序发送手机短信验证码(阿里云)相关推荐

  1. 商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战

    商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战 文章目录 商用短链平台_第8章_ 账号微服务注册模块+短信验证码+阿里云OSS开发实战 第八章 账号微服务注册模块+短信验 ...

  2. 海量数据大课学习笔记(8)-账号微服务注册模块+短信验证码+阿里云OSS开发实战-小滴课堂

    文章目录 前言 第1集 账号微服务注册功能和流程介绍 第2集 第三方短信验证码平台接入申请操作指引 第3集 账号微服务短信验证码发送工具类封装实战 第4集 账号微服务短信验证码发送工具类单元测试 前言 ...

  3. thinkphp+小程序手机短信验证码(防止恶意调用短信接口)

    thinkphp+小程序手机短信验证码 前言 一.短信轰炸是什么? 二.小程序准备 1.wxml 2.wxss 3.js(使用小程序定时器限制) 三.后台接口(ThinkPHP) 前言 一.短信轰炸是 ...

  4. 利用java实现的一个发送手机短信的小例子

    今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webservi ...

  5. java 发送短信例子_利用java实现的一个发送手机短信的小例子

    今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webservi ...

  6. Flask项目实战——6—(前台用户模型、前台登录注册、图形验证码、手机短信验证码、添加表单验证短信验证码请求)

    1.前台用户模型 前台用户模型定义 创建前台模型文件 apps/front/models.py # -*- encoding: utf-8 -*- """ @File : ...

  7. [小黄书后台]手机短信验证码

    上一章我们实现了将图片上传到又拍云上的功能.今天我们会实现手机验证码的功能. 我们现在到处都会碰到手机验证码的验证方式,比如在注册的时候,通过输入手机号码,获取一个验证码,然后输入完成注册. 1. 螺 ...

  8. 计算机控制手机短信的接收代码,计算机发送手机短信的C++程序

    手机短信已经成为当今的流行时尚,但怎样在计算机之间体验短信的方便与快捷呢?其实我们利用Windows 2000提供的信使服务就可以自制一个短信发送程序,令笔者最为得意的是它几乎可以穿越各种网络防火墙, ...

  9. 微信小程序实现手机短信验证码功能

    我选择的短信平台是榛子云短信,具体可看文档http://smsow.zhenzikj.com/doc/sdk.html 准备工作 下载zhenzisms.js文件并导入到所使用的js文件中 有个自己的 ...

最新文章

  1. Tungsten Fabric SDN — 操作实践 — Virtual Networks L2/L3 互联
  2. Spring Boot中使用PostgreSQL数据库
  3. 网络编程学习笔记(辅助数据)
  4. phpcms开启、关闭在线编辑模板的方法
  5. 构造函数不能为虚函数
  6. 远控免杀专题9 --- Avet免杀
  7. Anaconda如何重新在开始菜单显示
  8. poi 不自动计算 设置单元格公式_Java POI:如何读取Excel单元格的值而不是计算公式?...
  9. nginx程序访问linux任意目录,通过nginx访问linux目录
  10. spring的前后台数据传输。
  11. phpMyAdmin创建数据库无权限解决方案
  12. 存储卡修复软件测试自学,扩容内存卡用mydisktest失效,教你怎么用USBoot恢复出真实容量...
  13. 工业相机镜头选型教程
  14. 阿里优酷视频分类方法???咋理解啊?
  15. 税收和成本计算器php,企业税收计算器的使用方便吗?
  16. xp系统显示无打印机服务器,XP共享打印机时提示“工作站服务没有启动”的原因和解决方案...
  17. 快排优化代码__2018.07.26
  18. 智能手机拍照及视频DXO mark排名
  19. 解决android studio编译的速度慢,安装apk过慢的问题
  20. 线性判别分析LDA(linear discriminant analysis)与二次判别分析QDA(quadratic discriminant analysis)

热门文章

  1. 如何选择retina和univeral?
  2. 个人征信牌照发放在即 业内:大数据并不便宜
  3. 微博feed流nlp
  4. 编译《自制编程语言 基于c语言》 郑钢 书中代码 idea
  5. pnpm 构建 Monorepo workspace项目
  6. 如何更改Eclipse的workspace路径
  7. 什么是LPWAN,面临的要求和挑战是什么?
  8. 计算机课程主题研究报告,[计算机]课题开题研究报告.ppt
  9. 简约毕业答辩汇报PPT模版下载分享
  10. Listary Pro调用everything 实现当前路径快速搜索