IDEA初始化SpringBoot项目,配置pom.xml
<!--添加以下依赖安装阿里云Java SDK核心库--> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.62</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.9</version> </dependency>配置properties文件
#springboot启动端口 server.port=9090 #redis主机地址 spring.redis.host= #默认端口6379 spring.redis.port=6379 #redis配置密码 spring.redis.password=编写ServiceImpl业务实现
@Service public class SendSmsImpl implements SendSms { @Override public boolean send(String phoneNum, String templateCode, Map<String, Object> code) { // 连接阿里云-用户密钥 // 参数2:AccessKey ID // 参数3:AccessKey Secret DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", ""); 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", phoneNum); request.putQueryParameter("SignName", "ABC商城"); // 签名 request.putQueryParameter("TemplateCode", templateCode); // 模版CODE request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code)); // 验证码 try { CommonResponse response = client.getCommonResponse(request); System.out.println(response.getData()); return response.getHttpResponse().isSuccess(); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } return false; } }编写Controller实现接口
@RestController @CrossOrigin // 跨域支持 @RequestMapping("/api/v0") public class SmsApiController { @Autowired private SendSms sendSms; @Autowired private RedisTemplate<String, String> redisTemplate; @GetMapping("/send/{phone}") public String code(@PathVariable("phone") String phone) { // 调用方法(模拟真实业务 redis) String code = redisTemplate.opsForValue().get(phone); if (StringUtils.isNotEmpty(code)) { return phone + ":" + code + "已存在,还没有过期!"; } // 生成验证码并存储到redis中 code = UUID.randomUUID().toString().substring(0, 4); HashMap<String, Object> param = new HashMap<>(); param.put("code", code); // 参数2:模版CODE boolean isSend = sendSms.send(phone, "模版CODE", param); if (isSend) { redisTemplate.opsForValue().set(phone, code, 60 * 5, TimeUnit.SECONDS); return phone + ":" + code + "发送成功!"; } return "发送失败!"; } }