阿里云短信验证码开发
准备
首先需要在阿里云上开通短信服务,然后在AccessKey里面
设置用户和用户组,并把用户加入到用户组里面
然后创建一个key
密码一定要事先记住,后面是不会在显示密码的
然后在用户组里面添加短信权限管理
再去短信服务里面添加签名和模板
一定要注意用词,不然阿里不会通过的
到这里所需阿里的东西都差不多准备好了,在快速学习里面有一个查看demo,可以看到开发例子
开发
新建service
@Service
public class MessageServiceImpl implements MessageService {
@Override //phoneNumbers 电话号码 templateCode 模板code code 放的验证码
public boolean sendMessage(String phoneNumbers, String templateCode, Map<String, Object> code) {
//连接阿里云
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "{AccessKey}", "{AccessKeyPassword}");
IAcsClient client = new DefaultAcsClient(profile);
//构建请求
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com"); //不能动
request.setSysVersion("2017-05-25"); //不能动
request.setSysAction("SendSms");
//自定义参数(手机号,验证码,签名,模板)
request.putQueryParameter("PhoneNumbers", phoneNumbers);
request.putQueryParameter("SignName", "{注册的签名}");
request.putQueryParameter("TemplateCode", templateCode);
// 构建一个短信验证码
// Map map=new HashMap();
// map.put("code",1212);
request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));
try {
CommonResponse response = client.getCommonResponse(request);
return response.getHttpResponse().isSuccess();
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return false;
}
}
新建controller调用service
@RestController
public class SendMessageController {
@Autowired
private MessageService messageService;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@GetMapping("/sendMessage/{phoneNumbers}")
public String sendMessage(@PathVariable("phoneNumbers") String phoneNumbers) {
//判断手机号验证码是否过期
String code = redisTemplate.opsForValue().get(phoneNumbers);
if (!StringUtils.isEmpty(code)) {
return phoneNumbers + ":" + code + "已存在,还没有过期";
}
//生成验证码
code = UUID.randomUUID().toString().substring(0, 4);
Map<String, Object> map = new HashMap();
map.put("code", code);
boolean isSend = messageService.sendMessage(phoneNumbers, "{模板code}", map);
if (isSend) {
redisTemplate.opsForValue().set(phoneNumbers, code, 5, TimeUnit.MINUTES);
return phoneNumbers + ":" + code + "发送成功";
} else {
return phoneNumbers + ":" + code + "发送失败";
}
}
}
前端调用后手机就会收到验证码了