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

本文涉及的产品
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云原生内存数据库 Tair,内存型 2GB
短信服务,100条 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地址:阿里云·云小站

目录
相关文章
|
3天前
|
小程序
阿里云短信签名申请流程,手动整理(附短信签名问题解答)
阿里云短信签名是短信中的标识信息,如【阿里云】,用于表明发送方身份。申请流程简便:登录阿里云短信服务控制台,选择国内消息下的签名管理并添加签名,按指引填写表单。审核通常2小时内完成。个人用户每日限申请一个通用签名,企业用户数量不限。签名审核需确保业务主体一致,已通过审核的签名不可改名,仅能调整其它信息并重新审核。特定情况下需上传授权委托书,且签名需关联已备案网站。
|
17天前
阿里云服务器发票开具流程_发票抬头_发票常见问题解答FAQ
在阿里云开具发票,需登录用户中心访问发票管理页面。首次开票时设置发票抬头(个人/企业/事业单位),选择发票类型(增值税普通/专用)。随后选择需开票的订单并按提示操作。个人账号不可直接开企业发票,需变更实名认证。发票税率一般为6%,硬件为13%。发票抬头可修改,纸质发票邮费视情况由阿里云或用户承担,电子发票具同等法律效力且可报销。更多详情见阿里云帮助文档。
52 9
|
18天前
|
弹性计算 应用服务中间件
注册阿里云免费领取云服务器,全流程账号注册、实名认证到免费服务器申请
阿里云账号注册与免费服务器申请流程: 1. 访问官网并点击注册,支持手机验证码、支付宝、淘宝和钉钉注册。 2. 手机号注册需获取验证码完成注册;支付宝等方式注册自动关联实名信息。 3. 实名认证:个人推荐支付宝认证,扫码授权即可;企业认证同样便捷。 4. 免费服务器申请:访问免费中心,选择服务器点击“立即试用”,最长期限3个月。
|
22天前
|
弹性计算 安全 Ubuntu
1Panel安装:阿里云服务器安装1Panel面板教程,超详细图文流程
阿里云服务器安装1Panel面板教程:首先远程连接ECS,执行安装命令。随后设置1Panel安装目录(默认`/opt`)、端口(默认20410)、安全入口、面板用户及密码。安装后需在安全组中开通20410端口。最后,通过`服务器IP:端口/安全入口`格式访问面板。更多细节参见完整教程。
|
1月前
|
监控 数据可视化 算法
通过阿里云百炼的流程管理功能,搭建一个专属的流程能力
阿里云百炼平台结合流程画布与智能体,实现业务流程自动化。通过拖拽配置节点、对接智能体应用,确保数据交互与调度。智能体动态调度提升效率,提供可视化监控。但学习成本、性能优化、错误处理和兼容性是挑战。
191 6
|
1月前
|
人工智能 监控 机器人
在阿里云百炼平台上,利用流程管理功能搭建专属流程能力的评测报告
在阿里云百炼平台上,利用流程管理功能搭建专属流程能力的评测报告如下:
|
21天前
|
弹性计算
阿里云账号注册流程图文详解、账户实名认证和申请免费服务器全流程
阿里云账号注册支持手机号、支付宝等验证方式。使用手机号需手动验证,而支付宝等可自动完成实名认证。注册后须进行个人或企业实名认证才能正常使用服务。个人认证推荐使用支付宝快速完成;企业认证也支持支付宝法人扫描完成。完成认证后,可在免费中心申请最长达3个月的免费服务器试用,或选择付费方案获得更多资源。
|
1月前
|
弹性计算
软件开发常见流程之阿里云如何安装宝塔,配置安全组
软件开发常见流程之阿里云如何安装宝塔,配置安全组
|
1月前
|
弹性计算 运维 Kubernetes
阿里云云效操作报错合集之构建流程中遇到 "origin_value 类型错误,取不到DOCKER_URL" 这样的错误,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1月前
|
弹性计算 网络安全 数据安全/隐私保护
阿里云服务器新手入门:注册账号、实名认证申请免费云服务器全流程
注册阿里云账号,选择注册方式如密码、扫码或手机号,并完成验证码验证。接着进行实名认证,提供必要个人信息或企业证件。然后,在控制台选择云服务器ECS,点击“免费试用”申请,配置实例并设置登录密码。创建后,通过远程连接工具如SSH登录,开始使用服务器进行软件安装、应用部署等操作。阿里云提供详细文档支持。别忘了点击链接以直接试用。
96 0