在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.成功示例

相关推荐
计算机毕设定制辅导-无忧学长5 分钟前
基于Spring Boot的玄幻小说个性化推荐平台设计与实现
java·vue.js·spring boot·后端·mysql·推荐算法
Harry Lei20 分钟前
长期记忆系统的设计与实现
spring boot·postgresql·embedding
半摆烂日常29 分钟前
自建WMS和买成品:三年成本对比
大数据·服务器·数据库·python·深度学习·低代码·numpy
风123456789~37 分钟前
【架构专栏】第6章 数据库设计基础知识 1/4
数据库·架构
Nturmoils40 分钟前
异构数据同步不只追延迟:用 KFS 守住不停机迁移的每一笔账
数据库
星星落进兜里1 小时前
Redis 内存缓存,面试补充
数据库·redis·面试
棣廷2 小时前
初识MySQL——DQL数据查询语言详解
数据库·mysql
大模型码小白2 小时前
ChatGPT 的回答也能被结构化抓取?AI Bot Scraper 对比测评
服务器·开发语言·数据库·人工智能·spring·chatgpt
天涯柳絮2 小时前
SQL注入
数据库·sql·网络安全
API快乐传递者2 小时前
淘宝海外商品详情接口实战指南:从全球开放平台到跨境铺货的全链路方案
java·前端·数据库