Java对接阿里云短信模块

发布时间 2023-12-01 17:32:57作者: 曾曾曾zzq

1.去阿里云申请短信签名,申请签名需要网站域名,注意申请,下来的就是签名主体
2.申请签名模板拿到签名模板CODE

3.RAM开通账号,并且权限要去找到那个短信服务的权限,配置给用户,可以拿到key和sercet

4.开始java代码
public static final String product = "Dysmsapi";
// 产品域名,开发者无需替换
public static final String domain = "dysmsapi.aliyuncs.com";
public static final String accessKeyId = "xxxxxxxxxxxxxx";
public static final String accessKeySecret = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
@Resource
private RedisTemplate<String, Object> redisTemplate;
@Value("${smsVerificationFlag}")
private boolean smsVerificationFlag;
public AjaxResult sendSms(String mobile, Integer check, String platform) throws Exception {
if (null == check) {
check = 0;
}
if (1 == check) {
SysUser customerManager = sysUserService.selectUserByLoginName(mobile);
if (null == customerManager) {
return AjaxResult.error("登录用户不存在");
}
}
// 非正式环境短信验证固定为123456
if (!smsVerificationFlag) {
redisTemplate.boundHashOps("sms" + mobile).put(mobile, "123456");
// 设置五分钟过期时间
redisTemplate.expire("sms" + mobile, 1800, TimeUnit.SECONDS);
return AjaxResult.success("短信发送成功");
}
String randomString = RandomUtils.getRandomString(6, RandomUtils.NUMBERCHAR);
mobile = Strings.trimLeft(mobile, "+");
mobile = Strings.trimLeft(mobile, "86");
//设置超时时间-可自行调整
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");

    //初始化ascClient,暂时不支持多region(请勿修改)
    IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId,
            accessKeySecret);
    DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
    IAcsClient acsClient = new DefaultAcsClient(profile);
    //组装请求对象
    SendSmsRequest request = new SendSmsRequest();
    //使用post提交
    //必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式;发送国际/港澳台消息时,接收号码格式为国际区号+号码,如“85200000000”
    request.setPhoneNumbers(mobile);
    //必填:短信签名-可在短信控制台中找到
    request.setSignName("无敌ZZQ");
    //必填:短信模板-可在短信控制台中找到,发送国际/港澳台消息时,请使用国际/港澳台短信模版
    request.setTemplateCode("SMS_000000000");
    //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
    //友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
    request.setTemplateParam("{\"code\":\"" + randomString + "\"}");
    //请求失败这里会抛ClientException异常
    SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
    log.info("短信接口返回的数据----------------");
    log.info("Code=" + sendSmsResponse.getCode() + "Message=" + sendSmsResponse.getMessage() + "RequestId=" + sendSmsResponse.getRequestId() + "BizId=" + sendSmsResponse.getBizId());
    if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) {
        redisTemplate.boundHashOps("sms" + mobile).put(mobile, randomString);
        // 设置五分钟过期时间
        redisTemplate.expire("sms" + mobile, 1800, TimeUnit.SECONDS);
        return AjaxResult.success("短信发送成功");
    } else {
        // 发送失败
        return AjaxResult.error("短信发送失败");
    }
}