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秒