阿里云短信服务快速搭建流程

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
短信服务,200条 3个月
简介: 阿里云短信服务快速搭建流程

0.源码地址


https://github.com/tzforevere...


1. 技术栈


  • java
  • springboot
  • maven
  • redis

2.进入阿里云官网


https://www.aliyun.com/


2.1 登录=>选择进入短信服务


3.png


2.2 开通服务=>进入管理控制台


注:我已经开通服务,所以显示的是管理控制台


4.png

## 2.3 添加模板管理


选择 国内消息 - 模板管理 - 添加模板


9.png


点击 添加模板,进入到添加页面,输入模板信息


  • 选择模板类型:验证码
  • 模板名称:xxxxx (一定要有具体的意义,否则审核不通过)
  • 模板内容: 输入框下方可以使用常用模板库
  • 申请说明: xxxx (有具体说明)

10.png


点击提交,等待审核,审核通过后可以使用


2.4 添加签名管理


选择 国内消息 - 签名管理 - 添加签名


5.png


点击添加签名,进入添加页面,填入相关信息注意:签名要写的有实际意义


  • 签名
  • 使用场景
  • 申请说明:可不写

7.png


点击提交,等待审核,审核通过后可以使用


2.5 注意自己的Accesskey


保存自己的AccessKeyID和AccessKeySecret


11.png


3. 项目初始化


3.1创建空的maven项目


1.png


2.png


3.2 添加项目依赖


<dependencies>
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
        &lt;version&gt;2.2.1.RELEASE&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.alibaba&lt;/groupId&gt;
        &lt;artifactId&gt;fastjson&lt;/artifactId&gt;
        &lt;version&gt;1.2.28&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;com.aliyun&lt;/groupId&gt;
        &lt;artifactId&gt;aliyun-java-sdk-core&lt;/artifactId&gt;
        &lt;version&gt;4.3.3&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;!--lombok用来简化实体类&#xff1a;需要安装lombok插件--&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
        &lt;artifactId&gt;lombok&lt;/artifactId&gt;
        &lt;version&gt;1.18.10&lt;/version&gt;
        &lt;scope&gt;provided &lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;!-- redis --&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt;
        &lt;version&gt;2.2.1.RELEASE&lt;/version&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
        &lt;groupId&gt;org.apache.commons&lt;/groupId&gt;
        &lt;artifactId&gt;commons-pool2&lt;/artifactId&gt;
        &lt;version&gt;2.7.0&lt;/version&gt;
    &lt;/dependency&gt;

</dependencies>


3.3 创建application.properties


server.port=8001

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.database= 0
spring.redis.timeout=1800000

spring.redis.lettuce.pool.max-active=20
spring.redis.lettuce.pool.max-wait=-1

spring.redis.lettuce.pool.max-idle=5
spring.redis.lettuce.pool.min-idle=0

spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8


3.4 创建启动器AliApplication


@SpringBootApplication(exclude = DataSourceAutoConfiguration.class) //避免不连接数据库报错
public class AliApplication {
public static void main(String[] args) {
    SpringApplication.run(AliApplication.class,args);
}

}


3.5 创建接口定义返回码


public interface ResultCode {
public static Integer SUCCESS &#61; 20000;

public  static  Integer ERROR &#61; 20001;

}


3.5 创建统一结果返回类


@Data
public class R {
//是否成功
private Boolean success;

//返回码
private Integer code;

//返回消息
private String message;

//返回数据
private Map&lt;String, Object&gt; data &#61; new HashMap&lt;String, Object&gt;();

private R(){};

public static R ok(){
    R r &#61; new R();
    r.setSuccess(true);
    r.setCode(ResultCode.SUCCESS);
    r.setMessage(&#34;成功&#34;);
    return r;
}
public static R error(){
    R r &#61; new R();
    r.setSuccess(true);
    r.setCode(ResultCode.ERROR);
    r.setMessage(&#34;失败&#34;);
    return r;
}
public R success(Boolean success){
    this.setSuccess(success);
    return this;
}

public R message(String message){
    this.setMessage(message);
    return this;
}

public R code(Integer code){
    this.setCode(code);
    return this;
}

public R data(String key, Object value){
    this.data.put(key, value);
    return this;
}

public R data(Map&lt;String, Object&gt; map){
    this.setData(map);
    return this;
}</code></pre> 

3.6 创建utils包下的RandomUtil


package com.demo.aliservice.utils;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Random;

/**

获取随机数@author qianyi
*

*/
public class RandomUtil {

private static final Random random &#61; new Random();

private static final DecimalFormat fourdf &#61; new DecimalFormat(&#34;0000&#34;);

private static final DecimalFormat sixdf &#61; new DecimalFormat(&#34;000000&#34;);

public static String getFourBitRandom() {
    return fourdf.format(random.nextInt(10000));
}

public static String getSixBitRandom() {
    return sixdf.format(random.nextInt(1000000));
}

/**
 * 给定数组&#xff0c;抽取n个数据
 * &#64;param list
 * &#64;param n
 * &#64;return
 */
public static ArrayList getRandom(List list, int n) {

    Random random &#61; new Random();

    HashMap&lt;Object, Object&gt; hashMap &#61; new HashMap&lt;Object, Object&gt;();

    // 生成随机数字并存入HashMap
    for (int i &#61; 0; i &lt; list.size(); i&#43;&#43;) {

        int number &#61; random.nextInt(100) &#43; 1;

        hashMap.put(number, i);
    }

    // 从HashMap导入数组
    Object[] robjs &#61; hashMap.values().toArray();

    ArrayList r &#61; new ArrayList();

    // 遍历数组并打印数据
    for (int i &#61; 0; i &lt; n; i&#43;&#43;) {
        int position &#61; Integer.parseInt(String.valueOf(robjs[i]));
        r.add(list.get(position));
    }
    return r;
}

}


3.7 创建servie接口和service的实现类


service接口


public interface AliService {
boolean send(Map&lt;String, Object&gt; param, String phone);

}


service的实现了


@Service
public class AliServiceImpl implements AliService {
public boolean send(Map&lt;String, Object&gt; param, String phone) {
    if(StringUtils.isEmpty(phone)) return false;

            /**
    参数一&#xff0c;default
    参数二&#xff0c;阿里云的AccessKeyID
    参数三&#xff0c;阿里云的AccessKeySecret&#xff1a;
    **/
    DefaultProfile profile &#61;
            DefaultProfile.getProfile(&#34;default&#34;, &#34;LTAaASQDF1CGTEEFGUXZHMA&#34;, &#34;WRTSbya6qe1SDS6qwe13aWSH0&#34;);
    IAcsClient client &#61; new DefaultAcsClient(profile);

    //设置相关固定的参数
    CommonRequest request &#61; new CommonRequest();
    //request.setProtocol(ProtocolType.HTTPS);
    request.setMethod(MethodType.POST);
    request.setDomain(&#34;dysmsapi.aliyuncs.com&#34;);
    request.setVersion(&#34;2017-05-25&#34;);
    request.setAction(&#34;SendSms&#34;);

    //设置发送相关的参数
    request.putQueryParameter(&#34;PhoneNumbers&#34;,phone); //手机号
    request.putQueryParameter(&#34;SignName&#34;,&#34;我的xxx在线网站&#34;); //申请阿里云 签名名称
    request.putQueryParameter(&#34;TemplateCode&#34;,&#34;SMS_139315701&#34;); //申请阿里云 模板code
    request.putQueryParameter(&#34;TemplateParam&#34;, JSONObject.toJSONString(param)); //验证码数据&#xff0c;转换json数据传递

    try {
        //最终发送
        CommonResponse response &#61; client.getCommonResponse(request);
        boolean success &#61; response.getHttpResponse().isSuccess();
        return success;
    }catch(Exception e) {
        e.printStackTrace();
        return false;
    }
}

}


3.8 创建控制器controller


@RestController
@RequestMapping("/msm")
public class AliController {
&#64;Autowired
private AliService aliService;

&#64;Autowired
private RedisTemplate&lt;String,String&gt; redisTemplate;

&#64;GetMapping(&#34;send/{phone}&#34;)
public R sedMsm(&#64;PathVariable String phone){
    // 1. 从redis中获取验证码&#xff0c;获取不到就发送
    String code1 &#61; redisTemplate.opsForValue().get(phone);
    if(!StringUtils.isEmpty(code1)){
        return R.ok();
    }

    //生成随机值&#xff0c;传递阿里云进行发送
    String code &#61; RandomUtil.getFourBitRandom();

    Map&lt;String,Object&gt; param &#61; new HashMap&lt;String,Object&gt;();
    param.put(&#34;code&#34;,code);

    boolean isSend &#61;  aliService.send(param,phone);
    if(isSend){
        //发送成功&#xff0c;把成功的验证码放到redis中&#xff0c;设置有效时间
        redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
        return R.ok();
    }else{
        return R.error().message(&#34;短信发送失败&#34;);
    }

}

}


3.9整体项目结构


13.png


4. 运行代码并使用postman调试


12.png


收到信息:


13jpg.jpg


云服务器ECS地址:阿里云·云小站

目录
相关文章
|
1月前
|
API
阿里云短信服务文档与实际API不符
阿里云短信服务文档与实际API不符
|
2月前
|
数据采集 监控 安全
阿里云短信服务+图形认证,有效降低验证码盗刷概率
阿里云短信服务+图形认证服务,有效降低验证码盗刷概率。
235 3
阿里云短信服务+图形认证,有效降低验证码盗刷概率
|
10天前
|
安全 Java API
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
阿里云短信服务提供API/SDK和控制台调用方式,支持验证码、通知、推广等短信类型。需先注册阿里云账号并实名认证,然后在短信服务控制台申请资质、签名和模板,并创建AccessKey。最后通过Maven引入依赖,使用工具类发送短信验证码。
【三方服务集成】最新版 | 阿里云短信服务SMS使用教程(包含支持单双参数模板的工具类,拿来即用!)
|
2月前
|
存储 NoSQL Java
|
3月前
|
数据采集 存储 监控
99%成功率背后:阿里云短信服务有何优势?
为什么短信会发送失败,如何提高短信发送成功率,本文将为您介绍短信发送成功率和阿里云短信服务如何保障企业短信稳定送达等相关知识。
174 1
99%成功率背后:阿里云短信服务有何优势?
|
3月前
|
存储 安全 网络安全
|
3月前
|
小程序
阿里云短信签名申请流程,有图,短信接入新手教程
阿里云短信签名是短信中的标识信息,如【阿里云】,用于表明发送方身份。申请流程简便:登录阿里云短信服务控制台,选择签名管理并添加签名,填写相关信息。审核通常2小时内完成。个人用户每日限申请一个通用签名,企业用户数量不限。已通过审核的签名不可更改名称,仅能调整其他信息并重新提交审核。更多详情及FAQ
|
3月前
|
小程序
阿里云短信签名申请流程,手动整理(附短信签名问题解答)
阿里云短信签名是短信中的标识信息,如【阿里云】,用于表明发送方身份。申请流程简便:登录阿里云短信服务控制台,选择国内消息下的签名管理并添加签名,按指引填写表单。审核通常2小时内完成。个人用户每日限申请一个通用签名,企业用户数量不限。签名审核需确保业务主体一致,已通过审核的签名不可改名,仅能调整其它信息并重新审核。特定情况下需上传授权委托书,且签名需关联已备案网站。
335 1
|
6月前
|
云安全 安全 API
阿里云——OpenAPI使用——短信服务
阿里云——OpenAPI使用——短信服务
308 0
|
11月前
|
安全
阿里云短信服务是可以发送包含下载链接的文本内容的,
阿里云短信服务是可以发送包含下载链接的文本内容的,但是需要注意以下几点:
651 1