阿里短信服务集成_阿里短信发送平台

阿里短信服务集成_阿里短信发送平台阿里短信集成,配置流程,代码实现

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

技术分享交流群:1125844267,大家可以进来唠嗑闲聊

前言

目前阿里短信不支持个人申请签名和模板,所以只能使用测试版固定的签名和模板


提示:以下是本篇文章正文内容,下面案例可供参考

一、控制台配置

1、进入阿里云官网,搜索“短信服务”进行购买
在这里插入图片描述
2、配置用户组和用户,获取AccessKey ID和AccessKey Secret
在这里插入图片描述
在这里插入图片描述
我们当然可以直接使用第一个“继续使用AccessKey”来直接创建AccessKey,但是为了安全(人家也有安全提示),所以咱就听话使用第二个。点击进入后配置用户组,添加关于短信的权限,然后添加一个用户,属于短信这个用户组,这个用户就自动拥有的用户组所拥有的短信权限。
在这里插入图片描述
创建用户的时候一定要记得勾选这个,并且记下来AccessKey Secret,因为只显示一次,之后就没了。
在这里插入图片描述

二、代码实现

上边直接点击进去就有阿里提供的各种语言的发送短信的代码
在这里插入图片描述
它有一个同步的代码和一个异步的代码,异步的按它的代码放到项目中报错,所以直接用的同步的

<dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>dysmsapi20170525</artifactId>
            <version>2.0.9</version>
        </dependency>

Jetbrains全家桶1年46,售后保障稳定

/** * 发送短信工具类 */
public class SendSMS { 
   
    /** * 使用AK&SK初始化账号Client * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */
    public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception { 
   
        Config config = new Config()
                // 您的AccessKey ID
                .setAccessKeyId(accessKeyId)
                // 您的AccessKey Secret
                .setAccessKeySecret(accessKeySecret);
        // 访问的域名
        config.endpoint = "dysmsapi.aliyuncs.com";
        return new com.aliyun.dysmsapi20170525.Client(config);
    }
}
import org.apache.commons.lang3.RandomStringUtils;
=======================================================
String code = RandomStringUtils.randomNumeric(4);  //生成四位数字的验证码
com.aliyun.dysmsapi20170525.Client client = SendSMS.createClient(accessKeyId, accessKeySecret);  //参数用你真实的替换
SendSmsRequest sendSmsRequest = new SendSmsRequest()
.setSignName("阿里云短信测试") //签名,测试只能这么写
.setTemplateCode("SMS_154950909")  //测试模板(固定)
.setPhoneNumbers(phone)  //手机号
.setTemplateParam("{\"code\":\""+code+"\"}");
// 复制代码运行请自行打印 API 的返回值
SendSmsResponse result = client.sendSms(sendSmsRequest);
log.info("短信登录API返回的状态码描述:{}",result.getBody().getMessage());
if("OK".equalsIgnoreCase(result.getBody().getCode())){ 
 //OK表明发送成功,将验证码保存到redis,设置过期时间为5分钟
redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
return ResultData.success(messageUtil.message("messages.codeLoginTip1"));  //根据自己的实际返回
}else { 

return ResultData.error(messageUtil.message("messages.codeLoginTip2"));  //根据自己的实际返回
}

验证的时候从redis中取出对应手机号的验证码。我这是集成到Oauth2中的短信登录,参数获取可能不太一样,但是验证逻辑肯定都是一样的

String mobile = httpServletRequest.getParameter("mobile");
String codeRequest = httpServletRequest.getParameter("code");
String codeRedis = redisTemplate.opsForValue().get(mobile) == null ? "" : String.valueOf(redisTemplate.opsForValue().get(mobile));
SysUser sysUser = userService.getUserByMobile(mobile);
if(sysUser == null){ 

//throw new SessionAuthenticationException("该手机号不是系统注册用户");
throw new SessionAuthenticationException("messages.codeLoginTip1");
}
if(StringUtils.isEmpty(mobile)){ 

//throw new SessionAuthenticationException("手机号不能为空");
throw new SessionAuthenticationException("messages.codeLoginTip2");
}
if(StringUtils.isEmpty(codeRequest)){ 

//throw new SessionAuthenticationException("短信验证码不能为空");
throw new SessionAuthenticationException("messages.codeLoginTip3");
}
if(StringUtils.isEmpty(codeRedis)){ 

//throw new SessionAuthenticationException("短信验证码已过期");
throw new SessionAuthenticationException("messages.codeLoginTip4");
}
if(!codeRequest.equals(codeRedis)){ 

//throw new SessionAuthenticationException("短信验证码不正确");
throw new SessionAuthenticationException("messages.codeLoginTip5");
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/213480.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号