阿里云SMS(java版本)

1. 阿里云新增签名和模版,过程需要审核

短信服务 (aliyun.com)icon-default.png?t=N7T8https://dysms.console.aliyun.com/domestic/text

2.以下代码,直接使用

<dependency>
   <groupId>com.aliyun.oss</groupId>
   <artifactId>aliyun-sdk-oss</artifactId>
   <version>3.15.1</version>
</dependency>
package com.sms.config;

import com.alibaba.fastjson.JSON;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 * 阿里云通信
 */
public class SmsConfig {

    private static final Logger LOGGER = LoggerFactory.getLogger(SmsConfig.class);

    /**
     * 验证码短信
     * 您的验证码为:${code},请勿泄露于他人!
     */
    public static final String code_msg_verify_code = "*********";
    
    // 使用到Algerian字体,系统里没有的话需要安装字体,字体只显示大写,去掉了1,0,i,o几个容易混淆的字符
    public static final String VERIFY_CODES = "123456789ABCDEFGHJKLMNPQRSTUVWXYZ";

    // 验证码数字字符源
    public static final String NUM_VERIFY_CODES = "1234567890";

    /**
     * 发送短信
     */
    public static SendSmsResponse sendSms(SendSmsRequest req, String accessKeyId, String accessKeySecret, String signName) {
        try {
            System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
            System.setProperty("sun.net.client.defaultReadTimeout", "10000");
            // 初始化acsClient,暂不支持region化
            IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
            IAcsClient acsClient = new DefaultAcsClient(profile);
            // 组装请求对象-具体描述见控制台-文档部分内容
            SendSmsRequest request = new SendSmsRequest();
            // 必填:待发送手机号
            request.setPhoneNumbers(req.getPhoneNumbers());
            // 必填:短信签名-可在短信控制台中找到
            request.setSignName(signName);
            // 必填:短信模板-可在短信控制台中找到
            request.setTemplateCode(req.getTemplateCode());
            // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
            request.setTemplateParam(req.getTemplateParam());
            //hint 此处可能会抛出异常,注意catch
            SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
            if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
                return sendSmsResponse;
            } else {
                LOGGER.error("调用阿里云通信发送短信失败{}", sendSmsResponse.getMessage());
                //throw new ClientException(sendSmsResponse.getCode(), sendSmsResponse.getMessage());
            }
        } catch (Exception e) {
            LOGGER.error("发送短信验证码异常 {}", e.getMessage());
            //throw new CustomException("发送短信验证码异常");
        }
        return null;
    }

    public static void main(String[] args) {
        String numVerifyCode = generateNumVerifyCode(6);
        Map<String, String> templateParam = new HashMap<>();
        templateParam.put("code", numVerifyCode);
        SendSmsRequest req = new SendSmsRequest();
        // 必填:短信签名-可在短信控制台中找到
        req.setTemplateCode(SmsConfig.code_msg_verify_code);
        req.setTemplateParam(JSON.toJSONString(templateParam));
        // 手机号码
        req.setPhoneNumbers("*********");
        // 发送
        SendSmsResponse sendSmsResponse = sendSms(req, "***", "*****", "******");
        System.out.println(JSON.toJSONString(sendSmsResponse));
    }

    public static String generateNumVerifyCode(int verifySize) {
        return generateVerifyCode(verifySize, NUM_VERIFY_CODES);
    }

    /**
     * 使用指定源生成验证码
     * @param verifySize 验证码长度
     * @param sources    验证码字符源
     */
    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();
    }
}
注意:
(1)accessKeyId和accessKeySecret从阿里云账号AccessKey获取

(2)signName 获取方式

(3)code_msg_verify_code 获取方式

要实现Spring Boot整合阿里云短信服务,可以按照以下步骤进行操作: 1. 首先,在启动类上添加相关注解和配置。根据引用中的代码,可以在启动类上加上注解`@EnableSwagger2`、`@ComponentScan`和`@SpringBootApplication`。同时,可以使用`@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)`来取消数据源的自动配置。 2. 接下来,需要引入阿里云短信服务的相关依赖。可以在项目的`pom.xml`文件中添加以下依赖: ```xml <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.2.2</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.0.0</version> </dependency> ``` 3. 然后,需要在阿里云短信服务中创建一个短信模板,并获得对应的Access Key ID和Access Key Secret。这些信息将用于对接阿里云短信服务。 4. 在项目的配置文件中,可以配置阿里云短信服务的相关信息。可以在`application.properties`或`application.yml`文件中添加以下配置: ```yaml aliyun.sms.accessKeyId=your-access-key-id aliyun.sms.accessKeySecret=your-access-key-secret aliyun.sms.regionId=cn-hangzhou aliyun.sms.signName=your-sign-name aliyun.sms.templateCode=your-template-code ``` 其中,`your-access-key-id`和`your-access-key-secret`是在阿里云短信服务中***,根据实际情况进行设置;`your-sign-name`是短信签名的名称,需要根据实际情况进行设置;`your-template-code`是短信模板的编码,需要根据实际情况进行设置。 5. 接下来,可以在项目中创建一个短信发送的工具类。可以创建一个`SmsUtil`类,其中包含发送短信的方法。在方法中,可以使用阿里云短信服务提供的SDK来发送短信。可以参考阿里云的官方文档和示例代码来编写发送短信的逻辑。 6. 最后,在需要发送短信的地方调用`SmsUtil`类中的发送短信方法即可实现发送短信的功能。 综上所述,以上是使用Spring Boot整合阿里云短信服务的一般步骤。具体实现过程可以参考引用中的文章,该文章详细介绍了整合阿里云短信服务的每一步过程,并且将验证码存放到Redis中并设置过期时间,以保证实现发短信的功能。同时,引用中的项目简介也提供了一些有关Spring Boot的其他整合开发工具和配置的信息,可以参考其中的内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SpringBoot整合阿里云短信服务详细过程(保证初学者也能实现)](https://blog.csdn.net/weixin_47316183/article/details/124909807)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [springboot-demo:基于SpringBoot 2.x整合各种常用开发工具,包括但不限于Redis,MyBatisPlus,RocketMQ,...](https://download.csdn.net/download/weixin_42127754/18369068)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值