通过阿里云来创建自己产品的验证码

目录

通过阿里云来创建自己产品的验证码

前言:

一:注册阿里云账号

二:开通阿里云短信服务

三:测试类文件的编写

四:测试

后续:动态验证码的生成



前言:

短信验证码是现在日常生活中很常见的事务,但相信很多人都只是接受过验证码,并不知道验证码的生成过程,也不知道如何自己创建一个验证码。在这片博客中,我会简单介绍如何通过阿里云来创建一个验证码短信。

一:注册阿里云账号

这个步骤很简单,登录阿里云官网:https://www.aliyun.com/ 。有账号的话直接登录,没有的话注册一下。

二:开通阿里云短信服务

在将鼠标移到阿里云首页目录栏的"产品分类"中,这时会弹出许多阿里云产品,我们选择“云通信”类别下的 “短信服务”。如下图:

1.第一次进入阿里云短信服务时需要开通一下,还会要求你使用支付宝(立即认证成功,前提:你的支付宝进行过人脸认证了)或提交人脸认证(两天内认证成功)进行实名认证。实名认证后界面如下,我们选择管理控制台,点击进入。如下图

2.进入控制台后,我们还需要申请一个“签名”和“模版”,点击左菜单栏中的“国内消息”,显示界面如下,再点击添加签名。

3.进入签名申请界面如下,由于我申请过一个个人签名,所以现在显示的是通用签名的申请模版,因为个人签名只能申请一次。如果是个人签名申请的话,只会有下图中黑框中的内容,黄框的内容不会要求填写。

填写时注意事项:

3. 1 ,输入1是签名名称,也就是你的签名叫什么 ,为了能通过申请,尽量写的像某个项目名称一点,比如:“CRM,youngshop”之类的,尽量也不要填写中文,因为可能会申请失败,我周围人就有过相关经验,申请了几次都没通过。

3.2.适应场景,个人签名的话就选择验证码,如果你是企业需要使用,可以选择通用,不过需要提供企业名称和相关文件。

3.3申请说明中也尽量不要写什么老师要求,什么玩玩试试之类的,可以直接写“短信验证”或者一些正经点的原因。

填写好相关信息后点解“确定”,然后等待阿里云审核通过就好了,这时你的“签名管理”下回有一个审核状态为“审核中”的签名。

4.模版申请:模版就是收到的短信的内容,比如“您的验证码为:“1234”””什么的。

4.1点击“模版”,再点击添加模版。

4.2模版申请界面如下,需要选择模版类型,填写模版名称,模版内容,申请说明。

模版内容就是收到的短信内容,这里我们只是进行测试,所以模版内容是写死的,不像日常收到的验证码是动态的。当然进行后续的项目开发中我们可以在“常用模版库”里选择自己需要的模版。模版库如下图:

模版预览如下:

点击“提交”,同样,在模版管理下也会生成一个状态为:“审核中”的模版。等待模版通过。

PS:在提交申请后可能会收到来自阿里云的电话,阿里云工作人员会询问你的申请原因,用途等。这时我们可以说公司要开发项目,后续可能会使用到阿里云的其他产品服务之类的,这样可以增加通过率。

5.AccessKEY 的获取

在等待“签名”和“模版”审核的时候我们可以去获取AccessKEY(简称AK)。

点击左菜单栏的概览,滑动页面找到AccessKEY按钮,点击,如下图:

点击后进入如下界面,点击“创建AccessKEY”,等待收取阿里云手机验证码。填写验证码后

验证成功后就添加了一个AK,可以保存到本地,这样以后用到就不用再访问阿里云了。

到此,阿里云短信服务申请基本完成。

三:测试类文件的编写

1.在Ecilpse中新建javaweb项目,新建一个名叫“SMSsend”java类,然后点击阿里云控制台中的左边菜单栏最后一个选项“帮助文档”。如下图(左)。然后会跳转到帮助文档界面,在帮助文档界面左边菜单栏找到开发指南中的java的API文档,然后在帮助文档中找到编写样例程序,将样例程序代码粘贴到创建的“SMSsend”类中。

修改一下类名,这时代码会报错,点击一看是无法解析。这是因为我们没有导入阿里云SDK相关的.jar文件。下载下面链接中的jar文件,链接如下:

链接:https://pan.baidu.com/s/1-9ena-74HZKh4AzGo36rcQ
    提取码:o4km

将下载的4个jar文件移到项目目录“Webcontent”中“WEB-INF”文件夹下的“lib”文件夹,并在"SMSsend'内中导入jar包,如下:

为了方便查看测试结果,再代码中也添加一个后台输出提示,如下:

代码中需要自己填写的部分:

1.你的AccessKey:

2:你的短信签名和模版编号以及用于接受测试短信的手机号:

完整代码如下:


import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;/*** Created on 20/9/22.* 短信API产品的DEMO程序,工程中包含了一个SmsDemo类,直接通过* 执行main函数即可体验短信产品API功能(只需要将AK替换成开通了云通信-短信产品功能的AK即可)* 工程依赖了2个jar包(存放在工程的libs目录下)* 1:aliyun-java-sdk-core.jar* 2:aliyun-java-sdk-dysmsapi.jar** 备注:Demo工程编码采用UTF-8* 国际短信发送请勿参照此DEMO*/
public class SMSsend {//产品名称:云通信短信API产品,开发者无需替换static final String product = "Dysmsapi";//产品域名,开发者无需替换static final String domain = "dysmsapi.aliyuncs.com";// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)static final String accessKeyId = "你自己的AK码";static final String accessKeySecret = "你的AccessKey Secret";public static SendSmsResponse sendSms() throws ClientException {//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号request.setPhoneNumbers("待接收短信的手机号");//必填:短信签名-可在短信控制台中找到request.setSignName("你的签名名称");//必填:短信模板-可在短信控制台中找到request.setTemplateCode("你的模版名称");//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");//选填-上行短信扩展码(无特殊需求用户请忽略此字段)//request.setSmsUpExtendCode("90997");//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者request.setOutId("yourOutId");//hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);return sendSmsResponse;}public static void main(String[] args) throws ClientException {SendSmsResponse sendSms = sendSms();if(sendSms.getCode().equals("OK")) {System.out.println("短信发送成功...."+sendSms.getCode());}else {System.out.println("短信发送失败...."+sendSms.getCode());}}}

还有就是记得充钱,充钱充钱,一个短信4分多钱,充一块钱可以发20几条,充钱窗口如下:

四:测试

 前面条件都准备完成后,在ecilpse中运行SMSsend.java,这时要以java程序运行,而不是在服务器上运行。如下

测试结果,后台会输出短信发送结果,同时手机也会收到一条自定义的静态验证码,如下:

后续:动态验证码的生成

前面实现了静态验证码的发送,但实际情况中,用户收到的验证短信大多是动态的,随机的。所以我们要在该节实现6位验证码的动态生成。

前面提到的阿里云的短信模板是选择阿里提供的常用验证码,在模板中验证码的的变量为${code},我们必须保证该变量在模板内容中存在,然后我们再在本地的Java文件中随机生成6位验证码。

这里我采用了Random()函数,调用random()函数,生成0~1之间的小数,再乘以9000000后加上1000000就得到一个1000000~1000000区间的6位数,这也是最常用的6位随机数生成方式。代码如下:

long rand = (long)(Math.random()*900000+100000);String code = String.valueOf(rand);

然后再在request.setTemplateParam中将原来静态的数字改为code。

完整的代码如下:


import java.util.Scanner;import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;/*** Created on 17/6/7.* 短信API产品的DEMO程序,工程中包含了一个SmsDemo类,直接通过* 执行main函数即可体验短信产品API功能(只需要将AK替换成开通了云通信-短信产品功能的AK即可)* 工程依赖了2个jar包(存放在工程的libs目录下)* 1:aliyun-java-sdk-core.jar* 2:aliyun-java-sdk-dysmsapi.jar** 备注:Demo工程编码采用UTF-8* 国际短信发送请勿参照此DEMO*/
public class SMSsend {//产品名称:云通信短信API产品,开发者无需替换static final String product = "Dysmsapi";//产品域名,开发者无需替换static final String domain = "dysmsapi.aliyuncs.com";// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)static final String accessKeyId = "LTAI4Fzmwjd2PqKr4TGeKwq3";static final String accessKeySecret = "YpC8PAuc7VWLAryjXAwS7ZIuY04fHa";public static SendSmsResponse sendSms() throws ClientException {long rand = (long)(Math.random()*900000+100000);String code = String.valueOf(rand);@SuppressWarnings("resource")Scanner date = new Scanner(System.in);System.out.println("请输入姓名");String username = date.next();//System.out.println("请输入手机号");//String phoneNumber  = date.next();  //可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象-具体描述见控制台-文档部分内容SendSmsRequest request = new SendSmsRequest();//必填:待发送手机号request.setPhoneNumbers("待接收的手机号");//必填:短信签名-可在短信控制台中找到request.setSignName("你的签名");//必填:短信模板-可在短信控制台中找到request.setTemplateCode("你的模板码");//String username ="chencheng";//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为request.setTemplateParam("{\"name\":\""+username+"\", \"code\":\""+code+"\"}");//选填-上行短信扩展码(无特殊需求用户请忽略此字段)//request.setSmsUpExtendCode("90997");//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者request.setOutId("yourOutId");//hint 此处可能会抛出异常,注意catchSendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);return sendSmsResponse;}public static void main(String[] args) throws ClientException {SendSmsResponse sendSms = sendSms();if(sendSms.getCode().equals("OK")) {System.out.println("短信发送成功...."+sendSms.getCode());}else {System.out.println("短信发送失败...."+sendSms.getCode());}}/*public static QuerySendDetailsResponse querySendDetails(String bizId) throws ClientException {//可自助调整超时时间System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暂不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//组装请求对象QuerySendDetailsRequest request = new QuerySendDetailsRequest();//必填-号码request.setPhoneNumber("15000000000");//可选-流水号request.setBizId(bizId);//必填-发送日期 支持30天内记录查询,格式yyyyMMddSimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");request.setSendDate(ft.format(new Date()));//必填-页大小request.setPageSize(10L);//必填-当前页码从1开始计数request.setCurrentPage(1L);//hint 此处可能会抛出异常,注意catchQuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);return querySendDetailsResponse;}public static void main(String[] args) throws ClientException, InterruptedException {//发短信SendSmsResponse response = sendSms();System.out.println("短信接口返回的数据----------------");System.out.println("Code=" + response.getCode());System.out.println("Message=" + response.getMessage());System.out.println("RequestId=" + response.getRequestId());System.out.println("BizId=" + response.getBizId());Thread.sleep(3000L);//查明细if(response.getCode() != null && response.getCode().equals("OK")) {QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId());System.out.println("短信明细查询接口返回数据----------------");System.out.println("Code=" + querySendDetailsResponse.getCode());System.out.println("Message=" + querySendDetailsResponse.getMessage());int i = 0;for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs()){System.out.println("SmsSendDetailDTO["+i+"]:");System.out.println("Content=" + smsSendDetailDTO.getContent());System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode());System.out.println("OutId=" + smsSendDetailDTO.getOutId());System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum());System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate());System.out.println("SendDate=" + smsSendDetailDTO.getSendDate());System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus());System.out.println("Template=" + smsSendDetailDTO.getTemplateCode());}System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount());System.out.println("RequestId=" + querySendDetailsResponse.getRequestId());}}*/
}

这样就实现了6位验证码的生成,后调用${code}就能实现短信验证登录功能了。验证码效果图如下:

如何通过阿里云短信服务来发送验证码短信(超详细)相关推荐

  1. 使用腾讯云短信服务实现Spring Boot短信发送

    发送短信 01 注册微信公众号 02 注册腾讯云账号 03 创建签名和模板 第一步 创建签名 第二部 创建模板 04 发送短信 01 注册微信公众号 在百度搜索微信公众平台,并在进入官网后注册.在账号 ...

  2. 首批唯一!阿里云视频直播服务获信通院首批唯一认证

    简介:阿里云视频直播服务 7 月 28 日,由中国信息通信研究院主办的 2021 可信云大会上,阿里云凭借在视频直播 "云 - 边 - 端" 的产品技术优势,以最高标准通过了可信云 ...

  3. 秒懂云通信:如何用阿里云语音通知服务(小白指南)

    简介: 手把手教你如何使用阿里云语音通知服务,超详细控制台步骤解析,快速上手!更有1650元短信体验代金券和免费试用,点击速抢:https://yqh.aliyun.com/live/cloudcom ...

  4. 2022年阿里云企业初创服务套餐特惠低至2.8折

    2022年阿里云企业初创服务套餐特惠低至2.8折 最近有很多朋友问阿里云对于初创型企业没有优惠活动?近日阿里云推出阿里云企业创服务,套餐享特惠低至2.8折,阿里云基于用户的业务场景推荐专属服务,多款域 ...

  5. 阿里云邮件群发服务API

    这周系统有礼一个新的需求,要求短信或者邮件进行群发给指定人一些消息,然后就选择了阿里云的邮件服务 <a href="https://help.aliyun.com/document_d ...

  6. 阿里云高级技术专家林立翔:基于阿里云弹性GPU服务的神龙AI加速引擎,无缝提升AI训练性能

    2023 年 3 月 23 日 14:00,NVIDIA GTC 开发者大会阿里云开发者社区观看入口正式开放,阿里云高级技术专家林立翔带来了题为<基于阿里云弹性 GPU 服务的神龙 AI 加速引 ...

  7. 阿里云域名邮件服务配置

    阿里云域名邮件服务配置 laravel 下的阿里云域名邮件服务配置 laravel 下的阿里云域名邮件服务配置 使用阿里云的邮件推送服务,域名使用的cloudflare的加速策略.**正文** 登录阿 ...

  8. 阿里云K8S容器服务的使用

    使用阿里云k8s构建服务 一. 上传镜像 二. k8s运行 三. 服务配置导入 四. 服务路由 五. 节点亲和性和污点管理 一. 上传镜像 在阿里云控制台找到"容器镜像服务",开启 ...

  9. 在阿里云Kubernetes容器服务上打造TensorFlow实验室

    简介 Jupyter notebook是强大的数据分析工具,它能够帮助快速开发并且实现机器学习代码的共享,是数据科学团队用来做数据实验和组内合作的利器,也是机器学习初学者入门这一个领域的好起点. 而T ...

最新文章

  1. [patl2-018]多项式A除以B
  2. win10 ObservableCollection 排序自动收缩问题
  3. 【Review】Review of Sprint 1 Sprint 2 planning
  4. kdj超卖_kdj超买超卖是什么意思?kdj指标里说的“超买区,超卖区”什么意思?...
  5. 诺基亚n1平板电脑刷机教程_【个人记事本】闲鱼购买平板的经历
  6. 一段按页自动滚动文字或图片的Js代码
  7. 用鼠标选择模型表面两点并连线
  8. java 管理系统登陆完毕后关闭窗口_【求助】登录窗口登录成功后隐藏窗口
  9. java 示例_最佳Java示例
  10. Bailian2870 求矩阵的加法【矩阵】
  11. 前端求职简历模板,一投即过!
  12. nextpolish安装_nanopore 分析流程
  13. SecureCRT Home End键
  14. 分享|对流层延迟、电离层延迟、重力数据下载方式
  15. linux npm全局安装路径,NPM全局路径的设置及NRM的使用
  16. 用java开发app的步骤,看看这篇文章吧!
  17. 扫描二维码启动微信打开特定页面
  18. bga焊盘怎么做_焊接焊盘和BGA设计规则
  19. 谁说程序员不懂浪漫?用Python每天自动给女朋友免费发短信
  20. Codeforces - Pencils and Boxes

热门文章

  1. 说说欧美网站的设计风格
  2. 富士通服务器 css灯亮,富士通空调通信故障
  3. WIN10开机禁用GUI引导:等待圈圈消失
  4. 在阿里云服务器上部署EL-Admin前后端分离后台管理系统
  5. 阿里云购买免费https证书并用nginx配置代理详解(2020年9月)
  6. OpenGL-第一个三角形与矩形(两个三角形)
  7. ZMP 收费自动驾驶出租车上线,日本的自动驾驶热潮要来了?
  8. Web:6 大主流 Web 框架优缺点对比之Aurelia
  9. 【首发】随身wifi编译/使用ffmpeg方法,包含openwrt和debian
  10. tensorflow Restoring from checkpoint failed