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

0.源码地址


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


1. 技术栈


  • java
  • springboot
  • maven
  • redis

2.进入阿里云官网


https://www.aliyun.com/


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


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


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


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


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

## 2.3 添加模板管理


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


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


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


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

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


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


2.4 添加签名管理


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


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


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


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

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


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


2.5 注意自己的Accesskey


保存自己的AccessKeyID和AccessKeySecret


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


3. 项目初始化


3.1创建空的maven项目


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


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


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整体项目结构


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


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


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


收到信息:


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


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

上一篇:零基础小白如何使用阿里云服务器快速搭建网站?


下一篇:阿里云服务器中Windows系统怎么远程连接?