代码基本上都注释了详细的作用,不再多做解释

配置文件 application.yml

ali:# 阿里云短信sms:accessKeyId:  #AccessKey IDaccessKeySecret:  #AccessKey SecrettemplateCode: SMS_154950909 #模板(默认)signName: 阿里云短信测试 #签名(默认)domain: dysmsapi.aliyuncs.com #短信产品域名(默认)version: 2017-05-25 #版本(默认)regionId: default #地区(默认)

配置文件的实体类 包含全部get set方法 类上方加注解

//从Spring3.0,@Configuration用于定义配置类,会被扫描,用于构建Bean定义,初始化spring容器
@Configuration
//prefix绑定属性(与yml中的属性绑定)
@ConfigurationProperties(prefix = "ali.sms")
public class AliYunConfig {...}

.AliYunService.java

import com.alibaba.fastjson.JSON;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.teaopenapi.models.Config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import java.util.HashMap;
import java.util.Map;
//@component 把普通pojo实例化到spring容器中
@Component
public class AliYunService {//Logger初始化日志对象,方便输出的时候,可以打印出日志信息所属的类private static final Logger logger= LoggerFactory.getLogger(AliYunService.class);//@Autowired 自动注入//在使用@Autowired时,首先在容器中查询对应类型的bean//如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据//如果查询的结果不止一个,那么@Autowired会根据名称来查找。//如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false@Autowiredprivate AliYunConfig aliYunConfig;//定义方法调用阿里云短信接口 sendSms发短信public String sendSms(String phone,String code){//配置短信发送相关属性Config config = new Config();config.setAccessKeyId(aliYunConfig.getAccessKeyId());config.setAccessKeySecret(aliYunConfig.getAccessKeySecret());//访问的域名config.endpoint = "dysmsapi.aliyuncs.com";//创建客户端(SDK客户端初始化)Client client=null;try {client = new Client(config);} catch (Exception e) {e.printStackTrace();}//组装请求对象SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号,支持逗号分割批量调用request.setPhoneNumbers(phone);//必填:短信签名request.setSignName(aliYunConfig.getSignName());//必填:短信模板request.setTemplateCode(aliYunConfig.getTemplateCode());//封装验证码Map<String,String> map=new HashMap<>();map.put("code",code);//模板中的变量替换JSON串request.setTemplateParam(JSON.toJSONString(map));//发送短信//返回数据:Code请求状态码 Message状态码描述 Bizld回执ID Requestld请求IDSendSmsResponse response=null;try {response = client.sendSms(request);logger.info("发送短信之后返回结果:{}",response.getBody().getMessage());} catch (Exception e) {e.printStackTrace();}return response.getBody().getMessage();}
}

UmsSmsServiceImpl.java

上级目录service中写接口

import包 根据代码情况调整

import cn.pet.constant.Constants;
import cn.pet.service.UmsSmsService;
import cn.pet.service.thirdparty.aliyun.sms.AliYunService;
import cn.pet.service.thirdparty.redis.RedisService;
import cn.pet.utils.MathUtils;
import cn.pet.utils.UmsUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
//声明为业务层,纳入spring管理
@Service
//声明式事务管理
@Transactional
public class UmsSmsServiceImpl implements UmsSmsService {private static final Logger logger= LoggerFactory.getLogger(AliYunService.class);@Autowiredprivate AliYunService aliYunService;//@Override是伪代码,表示重写//编译器可以验证@Override下面的方法名是否是你父类中所有的,如果没有则报错@Overridepublic Boolean sendSms(String phone, Integer codeType) {//需要生成验证码(调用工具类)String code = MathUtils.random();//info输出日志信息logger.info("手机号码:{} 短信验证码为:{}",phone,code);//发送短信,返回状态码描述String result = aliYunService.sendSms(phone, code);//对比状态码描述,ALI_SMS_RESULT:"OK"if (result.equals(Constants.Sms.ALI_SMS_RESULT)){return true;}return false;}
}

UmsSmsController.java

控制器

//映射请求,指定控制器可以处理的URL请求
@RequestMapping("/api/ums/sms")
//等同于@Controller + @ResponseBody
@RestController
public class UmsSmsController {@Autowiredprivate UmsSmsService umsSmsService;@PostMapping("/sendSms")public Result sendSms(String phone,Integer codeType){//判断手机号 isEmpty判断是否为空 checkPhone正则表达式判断是否为手机号格式if (StringUtils.isEmpty(phone) | !UmsUtils.checkPhone(phone)){//FAIL_UMS_PHONE_ERROR手机号错误return ResultUtils.returnResult(ResultEnum.FAIL_UMS_PHONE_ERROR);}//验证短信类型if (!UmsUtils.checkCodeType(codeType)){//FAIL_UMS_SMS_CODE_TYPE_ERROR短信类型错误return ResultUtils.returnResult(ResultEnum.FAIL_UMS_SMS_CODE_TYPE_ERROR);}//调用service接口Boolean aBoolean = umsSmsService.sendSms(phone, codeType);if (aBoolean){//返回成功的Resultreturn ResultUtils.returnSuccess();}else {//返回失败的Resultreturn ResultUtils.returnFail();}}
}

另外代码中用到了些工具类保证代码的规范

如果不使用只需稍微改动即可,注释也写明了工具类中方法和属性的调用结果

(没搞懂怎么上传文件,先空着)

java实现获取阿里云短信验证码相关推荐

  1. 使用阿里云短信验证码API发送短信验证码(配置,获取短信验证码,注册,登录,密码重置)

    获取阿里云短信验证码需要的配置信息. 如果是新用户,可以免费领取3个月,老用户的话就只能购买了,但是也不贵. 申请短信签名 申请短信模板 编写发送短信验证码的工具类 代码中我已经进行了详细的注释,也写 ...

  2. 【阿里云短信验证码】麻瓜教程~~~从注册---申请---代码---执行

    阿里云短信验证码 当然啦,学习任何东西第一步就是去注册当前网站的账号. 阿里云的官网:https://www.aliyun.com/?utm_content=se_1008364713 ◆[1.先注册 ...

  3. [风一样的创作]二次封装阿里云短信 验证码 发送短信 查询短信 编辑短信

    1.首先要注册阿里云,购买阿里云短信服务,拿到AccessKey ID和AccessKey Secret 链接: https://usercenter.console.aliyun.com/#/man ...

  4. nodejs实现阿里云短信验证码

    nodejs实现阿里云短信验证码 事先准备 1.开通阿里云短信服务 2.获取 AccessKey 代码编写 事先准备 1.开通阿里云短信服务 1⃣️登陆阿里云,然后进入到 https://dysms. ...

  5. 阿里云短信验证码实战

    一.创建阿里云短信权限用户 1.登陆阿里云之后我们点击头像,接着点击AccessKey: 2.选择开始使用子用户 : 3.我们先要创建一个用户组: 4.依次点击新建的用户组--授权管理,给用户组授权, ...

  6. springboot 使用shiro集成阿里云短信验证码

    目录 1.阿里云短信验证码服务 2.发送短信验证码 3.shiro配置多个realm 4.验证短信验证码 5.一些修改思路 引言:短信验证码是通过发送验证码到手机的一种有效的验证码系统,主要用于验证用 ...

  7. C# ASP.NET MVC 阿里云短信验证码Demo

    相信大家在开发过程中又很多使用到验证码验证的功能,今天将验证码的验证整理一下写了一个Demo 通过本篇后你能学习到: 阿里云短信服务 Drapper连接SQL Server进行增改操作 JS前端倒计时 ...

  8. 阿里云短信验证码(发送短信验证码)

    注意:在需在阿里云短信服务处申请accessKeyId,accessKeySecret,还有短信名头,短信模板填入下方空处 首先创建一个随机生成二维码的工具类CodeUtils public clas ...

  9. Java SpringBoot集成阿里云短信与邮件服务

    1.pom.xml导入jar包 <!--阿里云短信 --><dependency><groupId>com.aliyun</groupId><ar ...

  10. 阿里云短信验证码的坑.....

    阿里云短信的坑 博主在集成阿里云短信的时候发生了此问题: 明明生成6位数字的验证码结果,通过阿里云短信发送出来有时只有5位. 解决办法也很简单我就直接贴代码,说原因了. 原因是: 问题原因:因为我返回 ...

最新文章

  1. PyQt5+eric6之旅(四) - 信号与槽的绑定
  2. 联发科有没有高端处理器_OPPO Reno5系列发布:联发科的高端梦实现了?
  3. php星期_高手指点PHP星期几获取方法
  4. vue 分模块打包 脚手架_vue-cli分模块独立打包
  5. Alarm Clocks Everywhere
  6. PHP命名空间学习笔记
  7. Linux TCP/IP中L4L3的实现框架:udp send部分
  8. linux依赖包在哪个目录,命令-Linux cmd在jar中搜索类文件,而与jar路径无关
  9. Training and investigating Residual Nets 自己分析
  10. 强化学习的数学基础4---Q-Learning进阶
  11. 计算机毕业设计中用java/php/net/pythont物流配送中心管理系统设计
  12. 2018.11.27 元器件选型(2)- 连接器
  13. hdu 4539 郑厂长系列故事——排兵布阵
  14. 九款Web服务器性能压力测试工具
  15. css 纯颜色叠加,CSS颜色叠加
  16. 磁盘空间的三种分配方式
  17. 服务器ubuntu系统调节亮度,Ubuntu系统下调节屏幕亮度的两种Linux命令
  18. 不接受反驳,性能最强,功能最强的Java日志框架
  19. texi2dvi - 打印 Texinfo 文档
  20. linux如何做动态壁纸实验报告,Ubuntu制作动态壁纸

热门文章

  1. PHP的消息队列详解
  2. C4认证Java基础Excel练习题
  3. php 485通讯协议 编程,485通讯协议程序怎么写(51单片机的485通信程序案例)
  4. mongodb的基本使用_万金油_新浪博客
  5. Linux 下使用rinetd工具实现端口转发
  6. 排序算法和查找算法的英文名
  7. 机器视觉入门资料大全
  8. 蒙牛新品来了,小明纯牛奶透明袋
  9. 计算机二级办公软件高级应用有什么用,考计算机二级办公软件高级应用技术证书有什么用途...
  10. OSEK间接网络管理(NM)