java简单实用的阿里云短信验证码后端API案例
发布日期:2022-02-24 01:06:49
浏览次数:9
分类:技术文章
本文共 4274 字,大约阅读时间需要 14 分钟。
本人刚做java不久,入职一家小微企业,让我写个短信验证码的API,然后网上搜了搜,好多案例都很复杂,其实没那么麻烦,我后来用的官方文档的Demo写的。
访问密钥AccessKey(AK)相当于登录密码,只是使用场景不同。AccessKey用于程序方式调用短信服务API,而登录密码用于登录控制台。
AccessKey包括AccessKeyId和AccessKeySecret。 AccessKeyId用于标识用户。 AccessKeySecret是用来验证用户的密钥。AccessKeySecret必须保密 (AccessKeyId和AccessKeySecret,如果公司已经申请好了就直接拿来用,在下面的工具类中写死即可)
发送短信的工具类:
import com.aliyuncs.CommonRequest;import com.aliyuncs.CommonResponse;import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.exceptions.ServerException;import com.aliyuncs.http.MethodType;import com.aliyuncs.profile.DefaultProfile;/** * 发送短信的工具类 */public class SMSUtils { /** * 发送短信 * @param templateCode 短信模板code(已注册通过审核的code) * @param phoneNumbers 前端传来的手机号 * @param param 模板变量值(这里就是随机生成的验证码) * @throws ClientException */ public static void sendShortMessage(String templateCode,String phoneNumbers,String param) throws ClientException{ DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "AccessKeyId的值", "AccessKeySecret的值"); IAcsClient client = new DefaultAcsClient(profile); // 创建API请求并设置参数 CommonRequest request = new CommonRequest(); request.setMethod(MethodType.POST); request.setDomain("dysmsapi.aliyuncs.com"); request.setVersion("2017-05-25"); request.setAction("SendBatchSms"); request.putQueryParameter("RegionId", "cn-hangzhou"); request.putQueryParameter("PhoneNumberJson", "[\""+phoneNumbers+"\"]"); //短信签名 必须是已添加并通过审核的短信签名(去找自己组的技术老大要) request.putQueryParameter("SignNameJson", "[\"飞象物流\"]"); //短信模板CODE(去找自己组的技术老大要) request.putQueryParameter("TemplateCode", templateCode); //短信模板变量(验证码) request.putQueryParameter("TemplateParamJson", "[{\"code\":\""+param+"\"}]"); try { CommonResponse response = client.getCommonResponse(request); System.out.println("输出的是:"+response.getData()); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } }}
控制层:
import com.aliyuncs.exceptions.ClientException;@RestController@RequestMapping("/api/auth")public class AuthenticationController { /** * 发送短信验证码 * @param phone 前端传来的用户手机号 * @return * @throws ClientException */ @PostMapping("/sendCode") public String sendCode(@RequestParam String phone) throws ClientException { if(phone.length() == 11){ //别人的一个得到6位数验证码的工具类,你们可以自己写个随机数 String code = CodeUtil.generateVerifyCode(6); //发送短信的方法;SMS_181300443是我当时项目的短信模板CODE你们写自己的 SMSUtils.sendShortMessage("SMS_181300443",phone,code); /* 这里可以处理验证码 比如讲验证码放入到Redis中 */ return "短信发送成功"; } return "手机号不正确"; }}
生成随机数工具类:
package io.sage.utils;import java.util.Random;/** * @Description: 生成6位的随机数工具类 * @Author: liu * @Date: 2019/12/30/19:45 */public class CodeUtil { //使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符 public static final String VERIFY_CODES = "1234567890"; /** * 使用系统默认字符源生成验证码 * @param verifySize 验证码长度 * @return */ public static String generateVerifyCode(int verifySize){ return generateVerifyCode(verifySize, VERIFY_CODES); } /** * 使用指定源生成验证码 * @param verifySize 验证码长度 * @param sources 验证码字符源 * @return */ public static String generateVerifyCode(int verifySize, String sources){ if(sources == null || sources.length() == 0){ sources = VERIFY_CODES; } int codesLen = sources.length(); Random rand = new Random(System.currentTimeMillis()); StringBuilder verifyCode = new StringBuilder(verifySize); for(int i = 0; i < verifySize; i++){ verifyCode.append(sources.charAt(rand.nextInt(codesLen-1))); } return verifyCode.toString(); }}
pom.xml引入:
com.aliyun aliyun-java-sdk-core 4.0.6 com.aliyun aliyun-java-sdk-dysmsapi 1.1.0
新人首发,欢迎各位指点!!!哈哈
转载地址:https://blog.csdn.net/weixin_45877686/article/details/103869900 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年03月30日 20时50分09秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MyEclipse2014配置Tomcat开发JavaWeb程序JSP以及Servlet
2019-04-27
asp.net中显示DataGrid控件列序号的几种方法
2019-04-27
Asp.net中DataGrid控件的自定义分页
2019-04-27
为DataGrid的自带分页添加首页、尾页及状态功能
2019-04-27
在asp.net中为Web用户控件添加属性和事件
2019-04-27
datagrid的正反双向排序
2019-04-27
在分页状态下删除纪录的问题
2019-04-27
使用DataGrid动态绑定DropDownList
2019-04-27
DataGrid删除确认及Item颜色交替
2019-04-27
如何在DataGrid里面产生滚动条而不滚动题头
2019-04-27
datagrid分页问题(前后跳页)《控件版》
2019-04-27
DataGrid基于Access的快速分页法
2019-04-27
DataGrid连接Access的快速分页法(1)——需求与现状
2019-04-27
DataGrid连接Access的快速分页法(2)——SQL语句的选用(升序与降序)
2019-04-27
DataGrid连接Access的快速分页法——动态生成SQL语句
2019-04-27
显示DataGrid序号的一个适用的方法
2019-04-27
asp.net中DataGrid性能测试
2019-04-27
把Excel文件中的数据读入到DataGrid中
2019-04-27
使用c#+(datagrid控件)编辑xml文件
2019-04-27
如何创建一个用弹出窗口来查看详细信息的超链接列
2019-04-27