首页 > 编程语言 >Java对接阿里云短信模块

Java对接阿里云短信模块

时间:2023-12-01 17:35:37浏览次数:81  
标签:短信 String mobile request sendSmsResponse 模块 Java redisTemplate

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("短信发送失败");
    }
}

标签:短信,String,mobile,request,sendSmsResponse,模块,Java,redisTemplate
From: https://www.cnblogs.com/zzqcupidzhq/p/17870464.html

相关文章

  • 日志模块——loguru的使用
    安装pipinstallloguru1、输出日志fromloguruimportloggerlogger.debug("这是一条debug日志")终端执行后出现带颜色的日志:  2、输出到文件fromloguruimportloggerlogger.add("file_{time}.log")logger.debug("这是一条debug日志")logger.info("这是一条......
  • Java继承与多态:实现代码复用与扩展的利器
    一、概述在Java编程语言中,继承和多态是两个非常重要的概念,它们是实现代码复用、扩展性和灵活性的关键。本文将详细介绍Java继承和多态的概念、实现方法以及注意事项,帮助您更好地理解和应用这两种技术。二、Java继承继承的概念Java继承是面向对象编程中的一个基本概念,它允许我们基于......
  • java使用http工具类调用第三方接口
    java使用http工具类调用第三方接口一、所需maven依赖:<!--json依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version>......
  • 复习:Java基础-泛型方法
    泛型大家都很熟悉了泛型方法呢可能很多小伙伴都有混淆,今天来稍微复习一下泛型方法(普通方法)publicclassTest<T>{publicTf(Tc){//注意声明,使此方法成为泛型方法returnc;}}泛型方法(静态方法)这么写编译就通过不了错误写法publicclassTe......
  • android开发aar包或者jar包出现类重复问题Caused by: java.lang.RuntimeException: Du
    如果是仓库依赖的方式直接使用exclude语句移除相同的依赖库即可,如下:implementation("org.java-websocket:Java-WebSocket:1.5.2"){excludegroup:'org.slf4j',module:'slf4j-api'//exclude掉websocket库依赖的slf4j库}但是如果是aar包或者jar包里面的类重复呢?这个......
  • 高通4G全网通模块MSM8909 (ARM Cortex-A7架构),arm核心板
    高通4G全网通模块MSM8909(ARMCortex-A7架构),arm核心板-ARM技术论坛-电子技术论坛-广受欢迎的专业电子论坛!https://bbs.elecfans.com/jishu_1461523_1_1.html 核心板特性A7架构4核(4*1.1GHz(A7))产品尺寸小,便于客户集成,减少产品体积;支持4GLTE超高速上网,单板兼容移动......
  • 选择正确的DC电源模块的重要性
    选择正确的DC电源模块的重要性选择正确的BOSHIDADC电源模块非常重要,因为: 1.保障设备安全:电源模块的选择直接影响到设备的稳定性和可靠性。选择错误的电源模块可能会导致设备损坏甚至危及人身安全。2.提高设备性能:选择适合的电源模块可以提高设备的效率和性能,保证设备正常......
  • Java--java.lang.String有个 indexOf()方法,但是要注意它是区分大小写的
    首先这个indexOf(Stringstr)方法的作用:如果要检索的字符串值没有出现,则该方法返回-1。1.如果要处理的字符串对大小写不敏感,可以将该字符串统一转成大写或者小写,然后再indexOf。例如处理:User-Agent:Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,like......
  • 在Unity中模块化管理自定义功能和资源
    之前在做Unity项目时,有时会遇到多个项目共用同一部分代码或资源的情况。而当被共用的部分需要更新的时候,手动复制替换非常麻烦,并且可能会有遗漏。对于这个问题,一个很好的解决办法是将可复用的文件打包为自定义包(CustomPackage),使用git等版本控制工具来管理每个包的内容。什么是Pa......
  • JavaScript面试题
    列举常用的字符串方法indexOf(要查找的字符,开始索引)查找某个字符串第一次出现的位置lastIndexOf(要查找的字符,开始索引)查找某个子字符串最后一次出现的位置replace(被替换的内容,要替换的内容)替换好的字符串substr(从哪个索引开始,截取多少个)返回截取到的内容subst......