对接阿里云的短信接口发送手机验证码

article/2025/8/27 8:58:20

最近做的项目涉及到对接阿里云的短信接口实现用户注册时发送验证码,我们在一个网站进行注册时要用到手机号获取验证码,这是很常见的操作。本篇博客记录如何对接阿里云的短信接口用手机号获取验证码,步骤如下:

1、对接阿里云短信接口的准备工作

上图的流程中,需要我们开发来弄的就是最后两步,其他的不用管,让上级去弄,调用接口要用到的配置性的东西,也向上级要就好了,当然可能你的上级不会直接给你,因为他根本不知道你需要哪些东西,那就向他要阿里云的账号,自己登陆进去找,接口文档如下:

https://help.aliyun.com/document_detail/55284.html

调用接口需要哪些东西,文档里都有,然后去对应的地方找到就好了,其中“短信服务控制台”由此进:

2、对接阿里云短信接口相关逻辑以及代码

准备工作做好后,我们就可以正式对接接口了,思路如下:用户在页面填完手机号点击“获取验证码”后,调用controller,在这个controller里首先判断该号码是否已注册过,如果没注册过则随机生成一个验证码,存到Redis里(key为手机号,value为验证码),并将生成的验证码作为阿里短信模板的参数,然后根据阿里短信接口的返回值判断短信是否发送成功;用户提交注册信息后先根据手机号去Redis取验证码,判断用户输入的验证码是否正确,再做后面的逻辑

需导入的pom依赖:

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.1.0</version>
</dependency>

controller层代码:

    /*** 发送短信的接口* @author LiJun* @Date 2019/10/25* @Time 11:17* @param request* @return com.ue.core.util.JsonRespData*/@RequestMapping(value = "sendSms",method = RequestMethod.POST)@ResponseBody@ApiOperation(value = "发送短信的接口",response = JsonRespData.class)@ApiImplicitParam(name = "phone",value = "手机号",required = true,paramType = "query")public JsonRespData sendSms(HttpServletRequest request){return agentEnlistService.sendSms(request);}

service层相关逻辑:

    /*** 发送短信的接口* @author LiJun* @Date 2019/10/25* @Time 11:16* @param request* @return com.ue.core.util.JsonRespData*/public JsonRespData sendSms(HttpServletRequest request){try {String phone = request.getParameter("phone");//填写的手机号if (StringUtils.isBlank(phone)){return JsonRespData.fail(REQUEST_206,"号码不能为空");}if (BeanUtil.isNotBlank(userDao.getUserByPhone(phone))){return JsonRespData.fail(REQUEST_206,"该号码已被注册");}String state = AliSms.sendSms(phone);//调用短信接口log.info("调用短信接口后的返回值:" + state);if ("OK".equals(state)) {return JsonRespData.success(REQUEST_SUCCESS,"短信发送成功");}else if ("isv.BUSINESS_LIMIT_CONTROL".equals(state)) {return JsonRespData.fail(REQUEST_206,"短信发送过于频繁,请稍后再试");}else {return JsonRespData.fail(REQUEST_206,"短信发送失败,请稍后重试");}}catch (Exception e){log.error("调用短信接口出现异常:" + e);return JsonRespData.fail(INTERNAL_SERVER_ERROR,"服务器出现异常");}}

AliSms.java代码:

package com.ue.core.util;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.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.ue.core.common.Constant;
import redis.clients.jedis.Jedis;/*** 调用短信接口* @author LiJun* @Date 2019年10月25日* @Time 10:43*/
public class AliSms {public static String sendSms(String phone) throws ClientException {//设置超时时间-可自行调整System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化ascClient需要的几个参数final String product = "Dysmsapi";//短信API产品名称(短信产品名固定,无需修改)final String domain = "dysmsapi.aliyuncs.com";//短信API产品域名(接口地址固定,无需修改)//替换成你的AKfinal String accessKeyId = Constant.ACCESSKEYID;//你的accessKeyIdfinal String accessKeySecret = Constant.ACCESSKEYSECRET;//你的accessKeySecret//初始化ascClient,暂时不支持多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();//使用post提交request.setMethod(MethodType.POST);//必填:待发送手机号request.setPhoneNumbers(phone);//必填:短信签名-可在短信控制台中找到request.setSignName(Constant.SIGNNAME);//必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版request.setTemplateCode(Constant.TEMPLATECODE);//随机产生一个6位数的验证码String random = (int)((Math.random() * 9 + 1) * 100000) + "";//将生成的6位随机数存入Redis里(规则:key=手机号,value=验证码),5分钟内有效Jedis jedis = JedisUtil.getJedisConn();jedis.set(phone,random);jedis.expire(phone, 300);//可选:模板中的变量替换JSON串request.setTemplateParam(Constant.TEMPLATEPARAM.replace("${param}",random));//请求失败这里会抛ClientException异常SendSmsResponse sendSmsResponse = null;try {sendSmsResponse = acsClient.getAcsResponse(request);} catch (Exception e) {return "FAIL";}finally {if (jedis != null){jedis.close();}}return sendSmsResponse.getCode();}
}

其中我短信模板中的变量替换JSON串如下:

3、感受与总结

其实对接别人的接口并不难,重要的是要看懂人家的文档,别产生畏难情绪


http://chatgpt.dhexx.cn/article/IY1YBuCP.shtml

相关文章

用Python模拟识别图片验证码并发送手机验证码

1、导语 大家好&#xff0c;好久不见。又到每日分享Python小技能的时候了。最近因为疫情影响&#xff0c;所以更新内容比较慢…今天周一&#xff0c;就来更新一波&#xff0c;心血来潮&#xff0c;是时候上线经营了。其实也没想到有啥好分享的&#xff0c;不如分享一些干货给大…

springboot发送短信验证码

学习目标&#xff1a; 阿里云短信服务 准备工作&#xff1a; 注册阿里云账户开通短信服务申请签名和模板拿到AccessKey 大概说一下测试和申请流程&#xff0c;输入https://www.aliyun.com/进入官网&#xff0c;然后注册账号&#xff0c;直接在搜索框输入短信服务就能找到&…

SpringBoot 通过阿里云的短信功能 实现发送手机验证码

我们在项目中经常遇到 需要通过手机号发送验证码实现登录注册等功能。 这里讲一下&#xff0c;Springboot项目中如果通过阿里云的短信功能&#xff0c; 实现发送手机验证码并验证 一、准备工作 1、购买阿里云的短信服务 https://free.aliyun.com/product/cloudcommunication-…

使用node实现向手机发送验证码

步骤一&#xff1a;安装node.js Node官方网站https://nodejs.org/en/ 下载node.js 安装好之后输入 node -v 能够显示版本号表示安装成功了 步骤二&#xff1a;注册并登陆聚合科技&#xff0c;申请短信API服务 我们来到聚合科技的官网中https://www.juhe.cn/ &#xff0c;注册…

项目接入腾讯云短信服务SMS实现向用户发送手机验证码

1、自述 早在18年的时候&#xff0c;我就在项目中使用过阿里云的短信服务&#xff0c;现在我上阿里云短信控制台看&#xff0c;还能看到当时创建的短信签名&#xff0c;如下图所示。 出于某种原因&#xff0c;我现在想重新申请一个新的签名&#xff0c;却审批失败了&#xf…

SpringBoot+vue 使用阿里云的短信功能发送手机验证码

前言&#xff1a; 小编后端用的是Springboot 前端用的是vue ,小编主要是写后台&#xff0c;前端页面比较简陋&#xff0c;后期还要调优&#xff0c;写的不对处还望多多包涵。 环境&#xff1a; 需要先准备好阿里云的账号和一些必要的参数。详情见我的另一篇博客。 https://blo…

腾讯云短信服务实现 Java 发送手机验证码(SpringBoot+Redis 实现)

文章目录 腾讯云短信服务实现 Java 发送手机验证码&#xff08;SpringBootRedis 实现&#xff09;1、打开腾讯云短信服务2、创建短信签名3、创建短信正文模板4、等待全部审核完毕即可5、发送短信6、短信业务实战&#xff08;SpringBootRedis&#xff09;&#xff08;1&#xff…

Spring boot 发送手机验证码

由于阿里云现在的短信签名无法通过申请&#xff0c;所以我这里选择了中国网建SMS短信平台&#xff08;手机号注册即用&#xff0c;有免费赠送的几条短信测试&#xff09; demo代码地址&#xff1a;https://github.com/mer97/springboot-sendmessage Spring boot 实现发送手机验…

Java实现发送手机验证码,发送短信

要发送短信&#xff0c;我们需要第三方提供的短信接口&#xff0c;这里我使用阿里云的短信服务。 首先进入阿里云的官网&#xff0c;然后注册。登陆之后选择云通信——》短信服务 然后点击免费开通。 开通后进入控制中心&#xff0c;选择右上方的支持与服务&#xff0c;选择帮…

Java实现手机发送短信验证码

发送短信验证码首先要在互亿无线短信平台去开通短信服务,地址"ihuyi.com" 一定要留好自己申请的API ID,API key和模板参数说明:代码示例: pom导包 <!-- 短信 --> <dependency><groupId>dom4j</groupId><artifactId>dom4…

SSM发送手机验证码——以网建SMS为例

整理一下从大二开始写的东东 后台源码链接&#xff1a; 点我自取 到网建申请一个帐号&#xff0c;好像可以免费用10条短信 设置用户名、密钥&#xff0c;在发送的时候需要携带该信息 前端代码简化后如下&#xff0c;提交表单我用的是ajax&#xff0c;如果直接提交表单记得name…

Java实现发送手机验证码

向手机发送验证码在用户注册等等业务中会用到&#xff0c;下面我来介绍如何用Java实现向手机发送验证码。 笔者此处使用的是阿里云的短信服务&#xff0c;首先需要登录阿里云官方网站&#xff0c;找到并开通短信服务&#xff0c;然后需要申请短信签名和模版&#xff0c; 短信签…

java 实现发送手机验证码的功能 (超详细)

我这里使用的旦米&#xff08;http://www.danmi.com/&#xff09;你们用阿里的就去看看其他博客 1.首先注册一个旦米的账号,第一次注册会免费的送你10元。足够你去测试用&#xff0c;不用担心自己去充钱。 2.注册好了登录进去&#xff0c;必须要公司认证&#xff0c;认证通过之…

java实现发送手机验证码功能

1. 进入秒嘀科技&#xff08;http://www.miaodiyun.com/&#xff09;&#xff0c;注册一个账号 2. 注册好之后&#xff0c;点击 用户中心 -> 账户管理&#xff0c;就会进入如下界面 &#xff08;顺便提一下&#xff0c;新注册的用户&#xff0c;平台会免费赠送你10元&#…

vue使用element发送手机验证码倒计时

发送验证码倒计时 html <el-form class"form" :model"form" labeal-position"left"> <el-form-item label"姓名"><el-input v-model"form.Name" placeholder"请输入姓名"></el-input>…

C# WinForm 使用SMS接口发送手机验证码+图形验证码+IP限制

文章目录 前言功能实现一、功能界面二、创建图形验证码类三、创建存储IP地址的数据库表四、创建手机验证码类五、在Form1中调用以上两个类中的函数&#xff0c;实现功能 前言 1.发送手机验证码用的是网建的SMS接口&#xff08;http://sms.webchinese.cn/&#xff09;   2.手机…

uniapp | 发送手机验证码 button组件

一、功能和效果展示 1.组件功能 uniapp &#xff08;1&#xff09;按钮初始显示“发送”&#xff0c;点击按钮后按钮显示倒计时60s&#xff1b; &#xff08;2&#xff09;倒计时60s期间点击按钮&#xff0c;不会重置计时器&#xff1b; &#xff08;3&#xff09;倒计时60s结…

发送手机验证码

手机验证码不能自己生成&#xff0c;需要由第三方来完成发送。本文选择网易云作为第三方来发送验证码。 首先&#xff0c;我们要注册网易云账号&#xff0c;完成登陆。选择“产品与服务”选项中的“通信与视频”&#xff0c;点击创建应用&#xff0c;完成后&#xff0c;下方有…

java发送手机验证码实现

正文 今天来用java实现手机验证码的发送。 短信平台有很多&#xff0c;中国网建提供的SMS短信通&#xff0c;注册免费5条短信&#xff0c;3条彩信&#xff0c; http://sms.webchinese.cn/ 但是刚才试了&#xff0c;第一次用官方提供的demo发送成功&#xff0c;然后整合到自…

Excel 字符串拼接

例子&#xff1a;“exec sp_addextendedproperty N’MS_Description’, N’”&B1&“‘, N’SCHEMA’, N’dbo’,N’table’, N’”&A1&“” &#xff1a;公式 “ abc ” &#xff1a; “”中间为任意字符/字符串 & A1 &&#xff1a;&&中间为拼…