1、登录阿里云控制台
2、进入RAM访问控制页面
如图所示,先把鼠标放在右上角头像上(不用点击),随后在弹框中选择AccessKey管理(点击)。
3、弹框选择创建子用户
4、创建用户组并添加短信权限
创建用户组只需填写名称
创建后点击用户组名称
如图所示,添加短信权限。
5、创建用户并加入用户组
如图所示,任意填写登录名称和显示名称,重要是要勾选openAPI调用访问。
点击确定后,会弹框一个页面显示accessKeyID和对应的密码,在这个页面上点击添加到用户组,添加到刚刚创建的用户组即可。
*温馨提示:请妥善保存密码,不要发布于网上。
6、进入短信服务控制台
7、申请模板和签名
模板和签名的申请需要正当理由,个人为未上线的产品一般是申请不通过的。申请被拒后可以按照拒绝原因进行修改理由申请(签名申请带姓名好通过),并重新提交申请。
实在申请不成功,如图所示,可以使用测试的签名和模板,给绑定授权的手机号码发送短信。
温馨提示:签名和模板来源选择测试或学习的只能给绑定授权的手机号码发送短信。
8、编写后端代码
找到java sdk,按要求编写代码即可
1、引依赖
1、短信依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.23</version>
</dependency>
2、json传输依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.3</version>
</dependency>
3、redis依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、编写后端代码
1、controller
@Autowired(required = false)
private RedisTemplate<String, String> redisTemplate;
@Autowired
private SmsService smsService;
@PostMapping("/getCode")
@ResponseBody
public R sendSMS(String tel){
if (null == tel || "".equals(tel) || tel.trim().equals(""))
return R.fail(207, "输入值为空");
String code = redisTemplate.opsForValue().get(tel);
if (null != code)
return R.fail(206, "请不要重复发送验证码");
boolean flag = smsService.sendSms(tel, "templateCode");
if (flag)
return R.ok(200, "发送成功!");
else
return R.fail(199, "未知错误,发送失败!");
}
templateCode 换成自己的
2、SmsService
public interface SmsService {
public boolean sendSms(String tel, String templateCode);
3、SmsServiceImpl
public class SmsServiceImpl implements SmsService {
@Autowired(required = false)
private RedisTemplate<String, String> redisTemplate;
@Override
public boolean sendSms(String tel, String templateCode) {
Config config = new Config().setAccessKeyId(accessKeyId).setAccessKeySecret(accessKeySecret);
config.endpoint = "dysmsapi.aliyuncs.com";
Client client = null;
String code = CodeUtil.getCode();
try {
client = new Client(config);
SendSmsRequest sendSmsRequest = new SendSmsRequest();
sendSmsRequest.setSignName(signName)
.setPhoneNumbers(tel)
.setTemplateCode(templateCode);
HashMap<String, Object> param = new HashMap<>();
param.put("code", code);
sendSmsRequest.setTemplateParam(JSONObject.toJSONString(param));
RuntimeOptions runtime = new RuntimeOptions();
SendSmsResponse response = client.sendSmsWithOptions(sendSmsRequest, runtime);
System.out.println(response.body.code);
if (response.body.code.equals("OK")) {
redisTemplate.opsForValue().set(tel, code, 10, TimeUnit.MINUTES);
return true;
}
} catch (TeaException error) {
assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
assertAsString(error.message);
}
return false;
}
}
CodeUtil 是一个生成随机数的工具类
accessKeyId 、accessKeySecret、signName、templateCode 写自己的就行。
redisTemplate.opsForValue().set(tel, code, 10, TimeUnit.MINUTES) 设置验证码10分钟过期。
9、安装window的redis(本地测试)
下载链接:redis安装包下载
双击redis-server.exe打开redis服务端,最小化。
温馨提示:官方推荐安装linux环境的redis
10、springboot配置连接redis
application.peoperties配置
#连接redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
11、后端跑起来,前端调用接口就行了
前端代码
$(document).ready(function () {
$("#send").click(function () {
var tel = $("#tel").val();
if (tel === '') {
layer.tips('请输入手机号码,弹窗3s后关闭', '#telTips', {tips: [2, '#9bc6ff'], time: 3000});
return;
}
var url = '/getCode';
var param = {tel: tel};
$.post(url, param, function (data) {
layer.tips(data.msg + ',弹窗3s后关闭', '#telTips', {tips:[2, '#9bc6ff'], time: 3000});
})
});
});