关与作者更多博客请访问云里云外开源社区

一、申请短信服务步骤

首先进入阿里云控制台,点击左侧产品与服务,找到短信服务。

第一次进入会有新手引导,这里主要介绍一下大致步骤和易错点

  1. 申请短信签名和模板

短信签名一般是企业或者组织名的简写,主要是告知收信人自己是谁。一般体现在短信的开头,用括号括住。

【Dresults】您的验证码:139267,您正进行身份验证,打死不告诉别人!

模板就是我要发送内容的模板,每条短信共有的部分,将变化的部分抽出作为变量,体现在代码中。注意,短信模板具有类型,且不同类型收费标准不同,这里就先介绍短信验证码

至于模板具体选择,可以自定义也可以使用常用模板库(完全免费的),切记模板要遵守一定的规范。

  • 验证码模板只支持验证码作为变量;变量替换值<=6位数字或字母
  • 不能发送营销/贷款/借款/中奖/抽奖类短信,不支持金融理财&房产通知类短信(验证码除外)
  • 签名/模版申请规范 https://help.aliyun.com/document_detail/55324.html

最后是申请说明,这里大家简要介绍一下此模板的应用场景或者介绍一下自己或公司,一般没什么用。提交申请后2小时左右就会收到审批通知

  1. 订购短信套餐包

这步一般不需要什么操作,因为阿里云短信收费是预先缴费,按量付费。只要阿里云账号有钱就可以,不需要订购。

  1. 系统设置

这步还是要仔细看一下,主要是安全设置,有防盗刷机制,这里不详细展开,阿里云的文档还是很详细的。

  1. 发送短信

有两种方式,分别是API发送和群发助手进行短信群发。这里介绍API发送

查看开发者指南—不同编程语言的短信服务SDK(Software Development Kit 软件开发工具包)—JAVA SDK DEMO

按照图示箭头一次选择,这里取消只看必填参数,后面如果需要扩展再自行选择(必填参数中没有验证码参数)

这里的三个参数介绍一下,一开始是默认不填参数的,右侧的代码中也没有对于的参数,我们手动填写后,代码中才会出现参数。还有代码中的内容除了我们自己填写的,其他都不要修改,下面这个不是时间,是版本号,修改了就会出错,其他也一样。

request.setSysVersion("2017-05-25");
  1. AccessKey ID和AccessKey Secret设置

鼠标放到用户头像处,点击下拉选项AccessKey管理,进入页面后,创建AccessKey。输入手机验证码后,就创建成功了。注意****这是唯一一次保存键和密码的时间,保存到本地上,以后就不可查看了,只能删除重建。

AccessKey ID和AccessKey Secret相当于是阿里云账号的一个子账号,起到验证作用,可以用这个账号来调用阿里云API服务。

第一个参数,PhoneNumber手机号,第二个SignName签名名称(必须审核通过的才行);第三个TemplateCode短信模板ID(是模板管理的模板CODE);第四个是短信验证码模板变量参数(这里用json格式{“code”:“123456”},注意要用小写。验证码的值后面代码中用随机数替代,code按照自己模板中的写,一般是code)

最后可以尝试发起调用,这里测试不需要花钱。可以真实发送短信。

二、代码集成(java-SpringBoot)

public class MessageUtil {//产品名称:云通信短信API产品,开发者无需替换static final String product = "Dysmsapi";//产品域名,开发者无需替换static final String domain = "dysmsapi.aliyuncs.com";static final String accessKeyId = "填自己的";static final String accessKeySecret = "填自己的";@Autowiredprivate RedisRepository redisRepository;public MessageDto getSsm(String number) {if (number.equals("") || number == null) {throw new SysException("没有填写手机号");}System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);try {DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);} catch (ClientException e1) {e1.printStackTrace();}IAcsClient acsClient = new DefaultAcsClient(profile);//随机生成六位验证码int code = (int) ((Math.random() * 9 + 1) * 100000);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号request.setPhoneNumbers(number);//必填:短信签名-可在短信控制台中找到,你在签名管理里的内容request.setSignName("填自己的");//必填:短信模板-可在短信控制台中找到,你模板管理里的模板编号request.setTemplateCode("填自己的");//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam("{\"code\":\"" + code + "\"}");//选填-上行短信扩展码(无特殊需求用户请忽略此字段)//request.setSmsUpExtendCode("90997");//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者//request.setOutId("yourOutId");//hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = null;try {sendSmsResponse = acsClient.getAcsResponse(request);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}//获取发送状态MessageDto messageDto = new MessageDto(code, sendSmsResponse.getCode());//保存手机验证码至redis中,大家没有用的话可以保存在mysql数据库中redisRepository.saveMessageCode(number, String.valueOf(code));log.info(number + ":  发送了一条验证码");return messageDto;}}

三、验证码应用

这里介绍我对验证码的理解,验证码一般是用在登录或注册处的,为的就是防止机器暴力调用接口,造成资源的浪费。

具体流程是,先按下发送验证码的按钮,这时手机会收到短信。下一步就是我们最初的目的,或是登录或是注册,选项中有一项为输入验证码。输入后,后台会校验手机号和验证码是否对应。所以在发送验证码后,后台要将手机号和验证码的键值对保存起来。保存的地方可以是mysql,也可以是redis。

如果是redis,本身就具备了键值对的对应关系,只需要保存就好。

如果是Mysql,需要我们建表,并加上两列,分别是手机号和验证码。

这里介绍一下redis的代码部分

RedisUtil为工具类,直接接触redis

public class RedisUtil {public static boolean exists(StringRedisTemplate redisTemplate, String key) {return redisTemplate.hasKey(key);}public static<T> void set (StringRedisTemplate redisTemplate, String key, T  value) {redisTemplate.opsForValue().set(key, JsonUtil.toJson(value));}public static<T> T get (StringRedisTemplate redisTemplate, String key, Class<T> clazz) {String value = redisTemplate.opsForValue().get(key);if (null != value) {return JsonUtil.toObject(value, clazz);}return null;}public static void del(StringRedisTemplate redisTemplate, String key) {redisTemplate.delete(key);}
}

这个RedisRepository的实现类

里面有一处代码需要注意,RedisKeyTemplate.T_VERIFICATION_CODE,这个在最后的代码块中能发现,是给redis空间命名。相信聪明的大家肯定可以明白的。

RedisUtil.set(redisTemplate, RedisKeyUtil.buildKey(RedisKeyTemplate.T_VERIFICATION_CODE, phone), messageCode);
@Component
public class RedisRepositoryImpl implements RedisRepository {@Autowiredprivate StringRedisTemplate redisTemplate;/*** 保存手机号和验证码的键值对<phone, messageCode>** @param phone* @param messageCode 验证码*/@Overridepublic void saveMessageCode(String phone, String messageCode) {RedisUtil.set(redisTemplate, RedisKeyUtil.buildKey(RedisKeyTemplate.T_VERIFICATION_CODE, phone), messageCode);}@Overridepublic String selectMessageCodeByPhone(String phone) {return RedisUtil.<String>get(redisTemplate, RedisKeyUtil.buildKey(RedisKeyTemplate.T_VERIFICATION_CODE, phone), String.class);}
}
public interface RedisRepository {/*** 保存手机号和验证码的键值对<phone, messageCode>* @param phone* @param messageCode 验证码*/void saveMessageCode(String phone, String messageCode);/*** 根据key:手机号 查询验证码* @param phone* @return*/String selectMessageCodeByPhone(String phone);
}
public class RedisKeyTemplate {/***记录验证码信息* 键:Verification_Code:verificationCode* 值:{ verificationCode, phoneNumber }*/public final static String T_VERIFICATION_CODE = "Verification:%s";
}

新版阿里云发送短信验证码详解相关推荐

  1. 使用阿里云发送短信验证码

    目录 一.用户注册登录流程 二.使用阿里云发送短信验证码 ⭐生成密钥 ⭐将密钥配置到项目中 ⚪新建properties文件并填入相应信息 ⚪pom配置 ​⚪ 测试代码 ⚪添加签名 ​⚪添加短信发送的模 ...

  2. 使用阿里云发送短信验证码(JAVA实现)

    文章目录 准备工作 完成阿里云认证 生成秘钥 申请签名和模板 编写代码 需要引入的JAR包依赖 代码 充钱 准备工作 我们首先登陆阿里云 https://www.aliyun.com 完成阿里云认证 ...

  3. 调用阿里云发送短信验证码的工具类

    /*** @Description 阿里云短信发送工具类* @Author 曰业而安*/ public class SendSmsUtil { //phone 手机号 //param 验证码 注意这里 ...

  4. 阿里云发送短信验证码失败

    报错: 把require_once  '/api_sdk/vendor/autoload.php'; 改为 require_once  __DIR__ .'/api_sdk/vendor/autolo ...

  5. 【Springboot】| 阿里云发送短信验证码,你会了吗?

  6. java 阿里云 发送短信功能实现

    1. 注册短信平台(以阿里云为例) 常用短信服务平台:阿里云.华为云.腾讯云.京东.梦网.乐信等 2. 注册成功后,开通短信服务 3. 设置短信签名.短信模板.AccessKey AccessKey ...

  7. 【阿里云短信服务SMS】使用阿里云发送短信

    使用阿里云发送短信 前期准备工作 1.添加签名 2.添加短信模板 3.创建子用户,得到密钥:AccessKeyId和 AccessKeySecret 4.给子用户添加权限 5.收集好之前步骤中的4个关 ...

  8. Java阿里云发送短信

    文章目录 前言 准备工作 短信服务API介绍 阿里云api发送短信 传送门 前言 短信服务,是阿里云为客户提供的一种通信服务的能力. 准备工作 需要申请一个阿里云账号 开通短信服务 添加签名和模板(需 ...

  9. 腾讯云发送短信验证码服务

    腾讯云发送短信验证码服务 1.注册腾讯云的账号 在腾讯云的官网:https://cloud.tencent.com/注册一个腾讯云的账号,就是日常的注册流程(这里就不贴图了),不过要实名认证啥的,认证 ...

最新文章

  1. 浅析C语言之uint8_t / uint16_t / uint32_t /uint64_t
  2. python需要php吗-做网站用php还是python
  3. 【linux系统】maven安装
  4. 获取namespace
  5. mysql8.0新用户无法连接_mysql 8.0.16 Linux新建用户无法登录
  6. mysql游标的用法及作用_Mysql 游标的用法及其作用
  7. 一个轻量级分布式RPC框架--NettyRpc
  8. pytorch nn.Module.zero_grad
  9. 帆软finereport决策系统自定义登录界面
  10. LeetCode c语言解题思路+答案代码+多种解法+关键注释 GitHub持续更新
  11. oc实时渲染的图如何导出_最新C4D渲染器全家桶随便用,不仅有OC+阿诺德,还有两款哦...
  12. Sqlmap命令讲解
  13. Eplan教程——如何使用项目检查功能
  14. 分布式事务解决方案:7种常见解决方案汇总
  15. 【机器学习】琴生不等式(Jensen's inequality)
  16. 年记 2018,新年快乐
  17. 产品手记专注0基础转行产品经理平台
  18. ROS中执行roslaunch后,显示功能包不存在的解决方法
  19. 设置esxi主机时间
  20. 雨听 | 解除在微信公众平台中绑定的微信号

热门文章

  1. 字符串转化为艺术字图片
  2. 祖孙询问(LCA+倍增思想)
  3. 在线办公与离线办公的异同
  4. 电脑风扇声音大怎么办?最全解决方法分享!
  5. 专业且优秀的配音软件,确定不进来看看?
  6. python 并发之 多线程处理IO操作
  7. 飞利浦css5530+g评测,5款入门级电动牙刷评测:飞利浦第三,第一颜值实力兼具...
  8. 售前技术工程师的成长(转)
  9. android子系统,Android图形子系统详解
  10. 使用JMeter作为MQTT客户端