大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
阿里云短信服务
了解阿里云用户权限
阿里云里面有非常多的业务,那么我们作为用户,如果要使用它的业务,要怎么做呢,我们来看图!
我们如果要使用阿里云的服务,就需要有一个个人账号,对于企业来说就是企业账号,但是在代码中要使用业务将个人账号密码写入很显然是不现实的事情,因此,使用阿里云业务通常是去获取它的业务授权码以及密钥。
准备工作
开启子用户
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传进来即可
这样阿里云短信服务就成功了!
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/206719.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...