提示:文章如有错误的地方请指出,以免误人子弟!
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
阿里云短信控制台配置
- accessKey管理
- 推荐使用子账户
- 创建子用户
- 设置权限
- 正常流程是得先 申请签名和模板,但是现在规则改了,个人申请得有部署的系统地址才行,所以个人测试的话还是用 阿里给的测试模板。
- 账户充值 一块钱差不多就够用了
封装工具类
- mavan依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.18</version>
</dependency>
- 代码,这边用了lombok和redis,需要的自己引入下,生成验证码的参考链接放文章最后了。
package com.hqll.fileMessage.util;
import com.alibaba.fastjson.JSONObject;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import com.aliyun.tea.TeaException;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.Common;
import com.aliyun.teautil.models.RuntimeOptions;
import com.hqll.common.util.FinalCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* @author Mr.Tigger
* @date 2022/9/12 15:15
*/
@Slf4j
@Component
public class SendCodeMessage {
@Autowired
private RedisUtil redisUtil;
/**
* description: 生成指定位数短信验证码
*
* @param count 指定位数
* @return java.lang.String
* @author Tigger
*/
private String getRandCode(int count) {
return String.valueOf((int)((Math.random()*9+1)* Math.pow(10,count-1)));
}
/**
* description: 使用AK&SK初始化账号Client
*
* @param accessKeyId accessKeyId
* @param accessKeySecret accessKeySecret
* @return com.aliyun.dysmsapi20170525.Client
* @author Tigger
*/
public static Client createClient(String accessKeyId, String accessKeySecret) throws Exception {
Config config = new Config()
// 您的 AccessKey ID
.setAccessKeyId(accessKeyId)
// 您的 AccessKey Secret
.setAccessKeySecret(accessKeySecret);
// 访问的域名
config.endpoint = "dysmsapi.aliyuncs.com";
return new Client(config);
}
/**
* description: 发送短信
*
* @param sendPhoneNumber 发送账号
* @return java.lang.String
* @author Tigger
*/
public String sendMessage(String sendPhoneNumber) throws Exception {
// 替换成自己的
String accesskeyId = "accesskeyId";
String accesskeySecret = "accesskeySecret";
Client client = SendCodeMessage.createClient(accesskeyId, accesskeySecret);
String randCode = getRandCode(6);
log.info("短信验证码-{}", randCode);
JSONObject jsonObject = new JSONObject(1);
jsonObject.put("code", randCode);
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setSignName("阿里云短信测试")
.setTemplateCode("SMS_154950909")
.setPhoneNumbers(sendPhoneNumber)
.setTemplateParam(jsonObject.toJSONString());
RuntimeOptions runtime = new RuntimeOptions();
String returnMessage = null;
try {
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, runtime);
// 获取返回体code
String code = sendSmsResponse.getBody().getCode();
// 获取返回体状态
Integer statusCode = sendSmsResponse.getStatusCode();
if (FinalCode.STATUS_MESSAGE.equals(code) && statusCode == FinalCode.STATUS_CODE) {
// 将验证码放入redis
boolean set = redisUtil.set(sendPhoneNumber + FinalCode.REDIS_ACCOUNT_SMS, randCode, FinalCode.MILLISECOND_NUMBER);
if (set) {
log.info("短信验证码缓存成功");
}
returnMessage = "验证码发送成功";
}
} catch (TeaException error) {
// 如有需要,请打印 error
log.info(Common.assertAsString(error.message));
} catch (Exception errorMsg) {
TeaException error = new TeaException(errorMsg.getMessage(), errorMsg);
// 如有需要,请打印 error
log.info(Common.assertAsString(error.message));
}
return returnMessage;
}
}
希望对你有所帮助!