阿里云发送短信Java代码

配置阿里云短信控制台

网址:短信服务 (aliyun.com)

签名模版

这三个都要审核,申请玩之后每个每行都有详情,我们只需要关注最后两个

AccessKey和AccessSecret

点进去点开始使用子账户进去创建,以下模版名称随便填访问方式都点上,其他的你们随意

创建好之后下载文件或者直接复制AccessKey和AccessSecret

然后添加权限,搜索短信就会看到这两个添加上去

开始写代码

添加依赖

   <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.6.0</version>
            <scope>compile</scope>
    </dependency>

Yaml文件配置

aliyun:
  sms:
    accessKeyId: AccessKey
    accessKeySecret: AccessSecret
    signName: 签名名称
    templateCode: 模板CODE

发送短信工具类



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.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class SmsUtils {
    @Value("${aliyun.sms.accessKeyId}")
    private String accessKeyId;

    @Value("${aliyun.sms.accessKeySecret}")
    private String accessKeySecret;

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

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


    public  SendSmsResponse sendSms(String phoneNumbers, String code) throws ClientException {
        // 初始化acsClient,暂不支持region化
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        IAcsClient acsClient = new DefaultAcsClient(profile);
        // 创建SendSmsRequest对象,每个字段与控制台中SMS Document的内容对应,具体可参考SMS API文档
        SendSmsRequest request = new SendSmsRequest();
        // 必填:待发送手机号
        request.setPhoneNumbers(phoneNumbers);
        // 必填:短信签名-可在短信控制台中找到
        request.setSignName(signName);
        // 必填:短信模板-可在短信控制台中找到
        request.setTemplateCode(templateCode);
        // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
        request.setTemplateParam("{\"code\":\"" + code + "\"}");
        // 发起请求,调用sendSms方法发送短信
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
        return sendSmsResponse;
    }

    /**
     * 生成验证码
     * @return
     */
    public static String generateVerificationCode() {
        // 这里实现验证码生成逻辑,比如生成一个6位数的验证码
        return String.valueOf((int) ((Math.random() * 900000) + 100000));
    }
}

Service层


import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;

@Service
@Slf4j
public class SmsServiceImpl implements SmsService { 
@Resource
    private SmsUtils smsUtils;
   /**
     * 发送验证码
     * @param phone 手机号
     * @return
     */
    @Override
    public ResultData getPhoneLogin(String phone) {
        //判断手机号是否为空
        if(EmptyUtils.isNotEmpty(phone)){
            //使用正则表达式判断手机号是否正确
            if(phone.length() == 11){
                //获得6位随机数
                String s = SmsUtils.generateVerificationCode();
                SendSmsResponse sendSmsResponse = null;
                try {
                    //发送手机短信
                    sendSmsResponse = smsUtils.sendSms(phone, s);
                    //ok代表发送成功
                    if(sendSmsResponse.getCode().equals("OK") || sendSmsResponse.getCode().equals("ok")
                    && sendSmsResponse.getMessage().equals("Ok") || sendSmsResponse.getMessage().equals("ok")
                    ){
                        //在缓存中存储并设置15分钟过期
                        long time =  60*15;
                        redisUtil.setStr(Constants.USERPHONE+phone,s,time);
                        //成功返回1
                        return ResultData.success(1);
                    }
                } catch (ClientException e) {
                        //失败给出的提示 系统异常
                    return ResultData.fail(ReturnCodeEnum.RC500.getCode(), ReturnCodeEnum.RC500.getMessage());
                }
            }
            //失败给出的提示手机格式不正确
            return ResultData.fail(ReturnCodeEnum.PHONEFORMAT.getCode(), ReturnCodeEnum.PHONEFORMAT.getMessage());
        }
       //手机号不能为空提示
        return ResultData.fail(ReturnCodeEnum.PHONEFORMAT.getCode(), ReturnCodeEnum.PHONEFORMAT.getMessage());
    }}

controller层

@Slf4j
@RestController
@RequestMapping("/pet/user/consumer")
public class UserController { 
@Resource
    private SmsService SmsService;
    /**
     * 发送验证码
     * @param phone
     * @return
     */
    @PostMapping("/getPhoneLogin")
    public ResultData getPhoneLogin(@RequestParam(value = "phone") String phone){
        return userService.getPhoneLogin(phone);
    }
}

以上只是发送单个手机号的代码,到此结束

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用阿里云发送短信,你需要进行以下步骤: 1. 注册阿里云账号,并开通短信服务。 2. 创建短信模板,并审核通过。 3. 获取 AccessKeyId 和 AccessKeySecret。 4. 导入阿里云 SDK。 5. 编写发送短信Java 代码。 以下是一个简单的 Java 代码示例,可以用于发送短信: ```java import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sms.model.v20160927.SendSmsRequest; import com.aliyuncs.sms.model.v20160927.SendSmsResponse; public class AliyunSms { public static void main(String[] args) { String accessKeyId = "your_accessKeyId"; String accessKeySecret = "your_accessKeySecret"; // 设置超时时间和 regionId IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", "Sms", "sms.aliyuncs.com"); // 构造请求 SendSmsRequest request = new SendSmsRequest(); request.setPhoneNumbers("手机号码"); request.setSignName("短信签名"); request.setTemplateCode("短信模板ID"); request.setTemplateParam("{\"code\":\"12345\"}"); // 发送请求 IAcsClient client = new DefaultAcsClient(profile); try { SendSmsResponse response = client.getAcsResponse(request); System.out.println("短信发送成功!"); } catch (ServerException e) { e.printStackTrace(); System.out.println("短信发送失败!"); } catch (ClientException e) { e.printStackTrace(); System.out.println("短信发送失败!"); } } } ``` 其中,需要将 `your_accessKeyId` 和 `your_accessKeySecret` 替换为你自己的 AccessKeyId 和 AccessKeySecret,同时将 `手机号码`、`短信签名` 和 `短信模板ID` 替换为你自己创建的短信模板相关信息。`{\"code\":\"12345\"}` 是短信模板中需要替换的内容,可以根据实际情况进行修改。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值