如何通过阿里云短信服务来发送验证码短信(超详细) 您所在的位置:网站首页 云短信网站源码是什么 如何通过阿里云短信服务来发送验证码短信(超详细)

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

2024-06-18 12:37| 来源: 网络整理| 查看: 265

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

目录

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

前言:

         一:注册阿里云账号

二:开通阿里云短信服务

三:测试类文件的编写

四:测试

后续:动态验证码的生成

 

前言:

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

一:注册阿里云账号

 这个步骤很简单,登录阿里云官网: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 此处可能会抛出异常,注意catch SendSmsResponse 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 此处可能会抛出异常,注意catch SendSmsResponse 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天内记录查询,格式yyyyMMdd SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd"); request.setSendDate(ft.format(new Date())); //必填-页大小 request.setPageSize(10L); //必填-当前页码从1开始计数 request.setCurrentPage(1L); //hint 此处可能会抛出异常,注意catch QuerySendDetailsResponse 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}就能实现短信验证登录功能了。验证码效果图如下:



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有