irpas技术客

SpringBoot实现阿里云短信服务_叫我菜菜就好_springboot 阿里云短信

irpas 4889

阿里云短信服务 了解阿里云用户权限准备工作开启子用户新建一个用户组创建用户并添加进用户组 开启阿里云短信服务添加模板添加签名 编写代码测试新建项目导入依赖编写测试代码开启redis 真实业务开发导入依赖业务层控制层

了解阿里云用户权限

阿里云里面有非常多的业务,那么我们作为用户,如果要使用它的业务,要怎么做呢,我们来看图!

我们如果要使用阿里云的服务,就需要有一个个人账号,对于企业来说就是企业账号,但是在代码中要使用业务将个人账号密码写入很显然是不现实的事情,因此,使用阿里云业务通常是去获取它的业务授权码以及密钥。

准备工作 开启子用户 https://home.console.aliyun.com/home/dashboard/ProductAndService

我们登陆进入阿里云,鼠标移动到右上角的头像处,会看到有一个AccessKey管理,我们点击进入 点击开始使用子用户AccessKey

新建一个用户组

点击创建用户组 填好信息点击确认即可 添加对应的权限 这里我们使用短信业务,就要添加短信业务的权限 搜索对应的业务,然后点击确认即可

创建用户并添加进用户组

点击创建用户,填写好信息之后 点击添加到用户组 这一个用户就是用来使用我们的业务的,点击该用户就可以看到相应的AccessKey,要小心保管自己的AccessKey,一旦外泄就点击删除或者禁用,里面有ID和密码

开启阿里云短信服务

我们直接在首页搜索短信服务,可以看到控制台有一个短信服务 点击进入开通服务 就会进入短信服务的控制台

添加模板

点击添加模板,这个是需要费用的,所以我们学习可以在阿里云充一点费用,并不是很昂贵,这里的模板是需要审核的,不能乱写 这里建议,先申请签名,再添加模板 填写好信息之后,右边可以预览,点击提交即可,理由要正当。 我们最终在程序中使用需要用到模板CODE 注意:如果申请不通过,那就修改信息然后重新申请。

添加签名

目前不支持个人用户申请上线业务 这里写的是企业签名然后等待审核

编写代码测试

在快速学习这里有一个控制台发送测试,下面有一个API demo,我们这里使用JAVA

// This file is auto-generated, don't edit it. Thanks. package com.aliyun.sample; import com.aliyun.tea.*; import com.aliyun.dysmsapi20170525.*; import com.aliyun.dysmsapi20170525.models.*; import com.aliyun.teaopenapi.*; import com.aliyun.teaopenapi.models.*; public class Sample { /** * 使用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); } public static void main(String[] args_) throws Exception { java.util.List<String> args = java.util.Arrays.asList(args_); com.aliyun.dysmsapi20170525.Client client = Sample.createClient("accessKeyId", "accessKeySecret"); SendSmsRequest sendSmsRequest = new SendSmsRequest() .setPhoneNumbers("") .setSignName("") .setTemplateCode(""); // 复制代码运行请自行打印 API 的返回值 client.sendSms(sendSmsRequest); } }

同时你可以根据你所学的语言来选择相应的SDK,导入相应的依赖。

新建项目

我们建一个SpringBoot项目

导入依赖

具体可以查看demo的相应sdk

<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.0.3</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>2.2.1</version> </dependency>

同时我们还需要使用json来传递字符串,redis来整合验证码

<!--json--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.6.6</version> </dependency>

编写测试代码 //连接阿里云 DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "LTAI5tK2pX4p7kKCoLot1GRH", "<your-access-key-secret>"); /** use STS Token DefaultProfile profile = DefaultProfile.getProfile( "<your-region-id>", // The region ID "<your-access-key-id>", // The AccessKey ID of the RAM account "<your-access-key-secret>", // The AccessKey Secret of the RAM account "<your-sts-token>"); // STS Token **/ IAcsClient client = new DefaultAcsClient(profile); //构建请求 SendSmsRequest request = new SendSmsRequest(); request.setPhoneNumbers(""); request.setSignName(""); request.setTemplateCode(""); try { SendSmsResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } } } 开启redis #开启redis服务 spring.redis.host=xxxx spring.redis.port=xxxx 真实业务开发 导入依赖 <dependencies> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.0.3</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>2.2.1</version> </dependency> <!--json--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.76</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.6.6</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> 业务层

SendSms

package com.cjh.aliyunsmstest.service; import java.util.Map; public interface SendSms { boolean addSendSms(String PhoneNumbers, String TemplateCode, Map code); }

SendSmsImpl

package com.cjh.aliyunsmstest.service; import com.alibaba.fastjson.JSONObject; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.http.MethodType; import com.aliyuncs.profile.DefaultProfile; import java.util.Map; @Service public class SendSmsImpl implements SendSms { @Override public boolean addSendSms(String PhoneNumbers, String TemplateCode, Map code) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "accesssid", "accesssSecret"); IAcsClient client = new DefaultAcsClient(profile); CommonRequest request = new CommonRequest(); request.setMethod(MethodType.POST); request.setDomain("dysmsapi.aliyuncs.com"); request.setVersion("2017-05-25"); request.setAction("SendSms"); //自定义信息 request.putQueryParameter("PhoneNumbers", 1234xxxxxx); //发送至手机号 request.putQueryParameter("SignName", "xxxx"); //自己配置的短信签名 request.putQueryParameter("TemplateCode", xxxxxxxx); //自己配置的模板 模版CODE //构建一个短信验证码 request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code)); //转换成json字符串 try { CommonResponse response = client.getCommonResponse(request); //发送至客户端 System.out.println(response.getData()); return response.getHttpResponse().isSuccess();//返回是否发送成功 } catch (ClientException e) { e.printStackTrace(); } return false; } } 控制层

SendSmsController

package com.cjh.aliyunsmstest.controller; import com.aliyuncs.utils.StringUtils; import com.cjh.aliyunsmstest.service.SendSms; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap; import java.util.UUID; import java.util.concurrent.TimeUnit; @RestController @CrossOrigin //跨域请求 public class SendSmsController { @Autowired SendSms sendSms; @Autowired RedisTemplate<String,String> redisTemplate; @GetMapping("/sms/{phone}") public String sendSms(@PathVariable("phone") String phone){ System.out.println(phone); //得到电话,先看查一下redis中有无存放验证码 String code = redisTemplate.opsForValue().get(phone); //有则返回已存在 if (!StringUtils.isEmpty(code)){ return phone+":"+code+"已存在,还没有过期!"; }else { //没有则生成验证码,uuid随机生成四位数验证码 code = UUID.randomUUID().toString().substring(0,4); //随机生成四个数形成验证码 HashMap<String, Object> map = new HashMap<>(); map.put("code",code); //调用方法发送信息 传入电话,模板,验证码 boolean send = sendSms.addSendSms(phone, "SMS_205128031", map); //返回ture则发送成功 if (send){ //存入redis中并设置过期时间,这里设置5分钟过期 redisTemplate.opsForValue().set("phone",code,5, TimeUnit.SECONDS); return phone+":"+code+"发送成功!"; }else { //返回false则发送失败 return "发送失败"; } } } }

这里我们的url采用rest风格, @GetMapping("/sms/{phone}") 前端只需要把phone传进来即可

这样阿里云短信服务就成功了!


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #springboot #阿里云短信