在Spring Boot应用中实现阿里云短信功能的整合

1.程序员必备程序网站

天梦星服务平台 (tmxkj.top)https://tmxkj.top/#/

2.导入坐标

复制代码
       <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>1.0.0</version>
        </dependency>

3.yml文件配置

复制代码
aliyun:
  sms: #阿里云发短信
    access-key-id: "********"  #角色的id
    access-key-secret: "******" #角色的密匙
    sign-name: "天梦星科技"
    template-code: "*******"

4.核心代码

复制代码
@Component
public class SmsUtil {

    @Value("${aliyun.sms.access-key-id}")
    private String accessKeyId;

    @Value("${aliyun.sms.access-key-secret}")
    private String accessKeySecret;

    @Value("${aliyun.sms.sign-name}")
    private String signName;

    @Value("${aliyun.sms.template-code}")
    private String templateCode;

    public Result sendSms(String phone, String code) throws ClientException {
        Result result = new Result();
        IAcsClient client = new DefaultAcsClient(DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret));
        CommonRequest request = new CommonRequest();
        request.setSysMethod(MethodType.POST);
        request.setSysDomain("dysmsapi.aliyuncs.com");
        request.setSysVersion("2017-05-25");
        request.setSysAction("SendSms");
        request.putQueryParameter("RegionId", "cn-hangzhou");
        request.putQueryParameter("PhoneNumbers", phone);
        request.putQueryParameter("SignName", signName);
        request.putQueryParameter("TemplateCode", templateCode);
        request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");
        CommonResponse response = client.getCommonResponse(request);
        if (JSON.parseObject(response.getData()).get("Message").equals("OK")){
        result.setCode(200);
        result.setMsg("短信发送成功");
        }else {
            result.setCode(400);
            result.setMsg(JSON.parseObject(response.getData()).get("Message"));
        }
        return result;
    }

}

public class ToolUtil {

    /**
     * 判断是否是手机号
     * @param phoneNumber
     * @return
     */
    public static boolean isPhoneNumber(String phoneNumber) {
        String regex = "^1[3-9]\\d{9}$";
        return Pattern.matches(regex, phoneNumber);
    }

 /**
     * 获取长度为 5 的随机数字
     * @return 随机数字
     *  用途短信验证码
     */
    public static String getSmsRandomNumber() {
        char[] nonceChars = new char[5];  //指定长度为6位/自己可以要求设置
        for (int index = 0; index < nonceChars.length; ++index) {
            nonceChars[index] = SYMBOLS2.charAt(RANDOM.nextInt(SYMBOLS2.length()));
        }
        return new String(nonceChars);
    }
}

5.调用测试

复制代码
    /**
     * 发送短信验证嘛
     */
    @GetMapping("/sendMessage")
    public Result sendMessage(@RequestParam("phone") String phone){
        Result result = new Result();
        String code = getSmsRandomNumber(); // 生成随机验证码
        try {
            if(isPhoneNumber(phone)){
                //redisDao.vSet(code,code,imaileEpxtime);
                result = smsUtil.sendSms(phone, code);
            }else {
                result.setCode(400);
                result.setMsg("手机号格式错误!");
            }
        } catch (ClientException e) {
            e.fillInStackTrace();
            result.setCode(500);
            result.setMsg(e.getErrMsg());
        }
        return result;
    }

6.成功示例

相关推荐
qq_4232339014 分钟前
如何用FastAPI构建高性能的现代API
jvm·数据库·python
凯子坚持 c19 分钟前
Qt常用控件指南(8)
开发语言·数据库·qt
春生野草36 分钟前
Redis
数据库·redis·缓存
weixin_499771551 小时前
Python上下文管理器(with语句)的原理与实践
jvm·数据库·python
weixin_452159551 小时前
高级爬虫技巧:处理JavaScript渲染(Selenium)
jvm·数据库·python
策知道1 小时前
依托政府工作报告准备省考【经验贴】
大数据·数据库·人工智能·搜索引擎·政务
Z...........1 小时前
MYSQL进阶查询
数据库·mysql
m0_740043732 小时前
【无标题】
java·spring boot·spring·spring cloud·微服务
Tansmjs2 小时前
使用Python自动收发邮件
jvm·数据库·python
重整旗鼓~2 小时前
1.外卖项目介绍
spring boot