| ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/utils/ALiSendSms.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/utils/HWSendSms.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/utils/Sample.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TUserServiceImpl.java
@@ -2,6 +2,7 @@ import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.gson.Gson; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.RedisConstants; import com.ruoyi.common.core.exception.GlobalException; @@ -11,6 +12,7 @@ import com.ruoyi.study.dto.AppUserQuery; import com.ruoyi.study.mapper.TUserMapper; import com.ruoyi.study.service.ITUserService; import com.ruoyi.study.utils.ALiSendSms; import com.ruoyi.study.utils.HWSendSms; import com.ruoyi.study.vo.AppUserVO; import org.springframework.beans.factory.annotation.Autowired; @@ -20,6 +22,7 @@ import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -62,7 +65,7 @@ if (!matcher.matches()) { throw new GlobalException("手机号不合法!"); } hwSendSms.sendSms(phoneCode, phone); // 判断redis中是否存在手机验证码 Object phoneCodeRedis = redisTemplate.opsForValue().get(RedisConstants.PHONE_CODE + phone); if (phoneCodeRedis == null) { @@ -78,6 +81,13 @@ phoneCode = String.valueOf(phoneCodeRedis).split(":")[0]; } } ALiSendSms sendSmsDemo = new ALiSendSms(); try { // 使用刚创建的短信模板发送短信 sendSmsDemo.sendSms(phone, "SMS_333505709", "{\"code\":\""+phoneCode+"\"}"); } catch (Exception e) { e.printStackTrace(); } /* * 保存信息到redis * key为 --> phone_code:手机号码 (phone_code表示该业务为 验证码登录) ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/utils/ALiSendSms.java
New file @@ -0,0 +1,127 @@ package com.ruoyi.study.utils; import com.aliyuncs.CommonRequest; import com.aliyuncs.CommonResponse; import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.google.gson.Gson; import org.springframework.stereotype.Component; import java.util.Map; /** * 阿里云短信工具类 */ @Component public class ALiSendSms { // 设置鉴权参数,初始化客户端 private DefaultProfile profile = DefaultProfile.getProfile( "cn-shanghai",// 地域ID "LTAI5tMxrqxDk43YUJtWbpHC",// 您的AccessKey ID "b0Dg0LeFXT4XDYVoAab24Nuoc1JX1y");// 您的AccessKey Secret private IAcsClient client = new DefaultAcsClient(profile); private static void log_print(String functionName, Object result) { Gson gson = new Gson(); System.out.println("-------------------------------" + functionName + "-------------------------------"); System.out.println(gson.toJson(result)); } /** * 添加短信模板 */ public String addSmsTemplate() throws ClientException { CommonRequest addSmsTemplateRequest = new CommonRequest(); addSmsTemplateRequest.setSysDomain("dysmsapi.aliyuncs.com"); addSmsTemplateRequest.setSysAction("AddSmsTemplate"); addSmsTemplateRequest.setSysVersion("2017-05-25"); // 短信类型。0:验证码;1:短信通知;2:推广短信;3:国际/港澳台消息 addSmsTemplateRequest.putQueryParameter("TemplateType", "0"); // 模板名称,长度为1~30个字符 addSmsTemplateRequest.putQueryParameter("TemplateName", "测试短信模板"); // 模板内容,长度为1~500个字符 addSmsTemplateRequest.putQueryParameter("TemplateContent", "您正在申请手机注册,验证码为:${code},5分钟内有效!"); // 短信模板申请说明 addSmsTemplateRequest.putQueryParameter("Remark", "测试"); CommonResponse addSmsTemplateResponse = client.getCommonResponse(addSmsTemplateRequest); String data = addSmsTemplateResponse.getData(); // 消除返回文本中的反转义字符 String sData = data.replaceAll("'\'", ""); log_print("addSmsTemplate", sData); Gson gson = new Gson(); // 将字符串转换为Map类型,取TemplateCode字段值 Map map = gson.fromJson(sData, Map.class); Object templateCode = map.get("TemplateCode"); return templateCode.toString(); } /** * 发送短信 */ public String sendSms(String phone, String templateCode, String json) throws ClientException { CommonRequest request = new CommonRequest(); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("SendSms"); // 接收短信的手机号码 request.putQueryParameter("PhoneNumbers", phone); // 短信签名名称。请在控制台签名管理页面签名名称一列查看(必须是已添加、并通过审核的短信签名)。 request.putQueryParameter("SignName", "海南众慧智能教育"); // 短信模板ID request.putQueryParameter("TemplateCode", templateCode); // 短信模板变量对应的实际值,JSON格式。 request.putQueryParameter("TemplateParam", json); CommonResponse commonResponse = client.getCommonResponse(request); String data = commonResponse.getData(); String sData = data.replaceAll("'\'", ""); log_print("sendSms", sData); return sData; } /** * 查询发送详情 */ private void querySendDetails(String bizId) throws ClientException { CommonRequest request = new CommonRequest(); request.setSysDomain("dysmsapi.aliyuncs.com"); request.setSysVersion("2017-05-25"); request.setSysAction("QuerySendDetails"); // 接收短信的手机号码 request.putQueryParameter("PhoneNumber", "156xxxxxxxx"); // 短信发送日期,支持查询最近30天的记录。格式为yyyyMMdd,例如20191010。 request.putQueryParameter("SendDate", "20191010"); // 分页记录数量 request.putQueryParameter("PageSize", "10"); // 分页当前页码 request.putQueryParameter("CurrentPage", "1"); // 发送回执ID,即发送流水号。 request.putQueryParameter("BizId", bizId); CommonResponse response = client.getCommonResponse(request); log_print("querySendDetails", response.getData()); } public static void main(String[] args) { ALiSendSms sendSmsDemo = new ALiSendSms(); try { // 创建短信模板 // String templateCode = sendSmsDemo.addSmsTemplate(); String code = "8888"; // 使用刚创建的短信模板发送短信 String sData = sendSmsDemo.sendSms("17828262728", "SMS_333505709", "{\"code\":\""+code+"\"}"); Gson gson = new Gson(); Map map = gson.fromJson(sData, Map.class); String bizId = map.get("BizId").toString(); // 根据短信发送流水号查询短信发送情况 sendSmsDemo.querySendDetails(bizId); } catch (ClientException e) { e.printStackTrace(); } } } ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/utils/HWSendSms.java
@@ -1,7 +1,7 @@ package com.ruoyi.study.utils; import com.cloud.apigateway.sdk.utils.Client; import com.cloud.apigateway.sdk.utils.Request; //import com.cloud.apigateway.sdk.utils.Client; //import com.cloud.apigateway.sdk.utils.Request; import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; @@ -85,39 +85,39 @@ return; } Request request = new Request(); request.setKey(appKey); request.setSecret(appSecret); request.setMethod("POST"); request.setUrl(url); request.addHeader("Content-Type", "application/x-www-form-urlencoded"); request.setBody(body); LOGGER.info("Print the body: {}", body); try { HttpRequestBase signedRequest = Client.sign(request, Constant.SIGNATURE_ALGORITHM_SDK_HMAC_SHA256); LOGGER.info("Print the authorization: {}", Arrays.toString(signedRequest.getHeaders("Authorization"))); Header[] requestAllHeaders = signedRequest.getAllHeaders(); for (Header h : requestAllHeaders) { LOGGER.info("req Header with name: {} and value: {}", h.getName(), h.getValue()); } HttpResponse response = client.execute(signedRequest); LOGGER.info("Print the status line of the response: {}", response.getStatusLine().toString()); Header[] resHeaders = response.getAllHeaders(); for (Header h : resHeaders) { LOGGER.info("Processing Header with name: {} and value: {}", h.getName(), h.getValue()); } HttpEntity resEntity = response.getEntity(); if (resEntity != null) { LOGGER.info("Processing Body with name: {} and value: {}", System.getProperty("line.separator"), EntityUtils.toString(resEntity, "UTF-8")); } } catch (Exception e) { LOGGER.info(e.getMessage(), e); e.printStackTrace(); } // Request request = new Request(); // request.setKey(appKey); // request.setSecret(appSecret); // request.setMethod("POST"); // request.setUrl(url); // request.addHeader("Content-Type", "application/x-www-form-urlencoded"); // request.setBody(body); // LOGGER.info("Print the body: {}", body); // try { // HttpRequestBase signedRequest = Client.sign(request, Constant.SIGNATURE_ALGORITHM_SDK_HMAC_SHA256); // LOGGER.info("Print the authorization: {}", Arrays.toString(signedRequest.getHeaders("Authorization"))); // Header[] requestAllHeaders = signedRequest.getAllHeaders(); // for (Header h : requestAllHeaders) { // LOGGER.info("req Header with name: {} and value: {}", h.getName(), h.getValue()); // } // // HttpResponse response = client.execute(signedRequest); // // LOGGER.info("Print the status line of the response: {}", response.getStatusLine().toString()); // Header[] resHeaders = response.getAllHeaders(); // for (Header h : resHeaders) { // LOGGER.info("Processing Header with name: {} and value: {}", h.getName(), h.getValue()); // } // HttpEntity resEntity = response.getEntity(); // if (resEntity != null) { // LOGGER.info("Processing Body with name: {} and value: {}", // System.getProperty("line.separator"), // EntityUtils.toString(resEntity, "UTF-8")); // } // } catch (Exception e) { // LOGGER.info(e.getMessage(), e); // e.printStackTrace(); // } } public CloseableHttpClient createIgnoreSSLHttpClient() throws Exception { ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/utils/Sample.java
New file @@ -0,0 +1,69 @@ //package com.ruoyi.study.utils; // // //public class Sample { // // /** // * <b>description</b> : // * <p>使用凭据初始化账号Client</p> // * @return Client // * // * @throws Exception // */ // public static com.aliyun.teaopenapi.Client createClient() throws Exception { // // 工程代码建议使用更安全的无AK方式,凭据配置方式请参见:https://help.aliyun.com/document_detail/378657.html。 // com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client(); // com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config() // .setCredential(credential); // // Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi // config.endpoint = "dysmsapi.aliyuncs.com"; // return new com.aliyun.teaopenapi.Client(config); // } // // /** // * <b>description</b> : // * <p>API 相关</p> // * // * @param path string Path parameters // * @return OpenApi.Params // */ // public static com.aliyun.teaopenapi.models.Params createApiInfo() throws Exception { // com.aliyun.teaopenapi.models.Params params = new com.aliyun.teaopenapi.models.Params() // // 接口名称 // .setAction("SendSms") // // 接口版本 // .setVersion("2017-05-25") // // 接口协议 // .setProtocol("HTTPS") // // 接口 HTTP 方法 // .setMethod("POST") // .setAuthType("AK") // .setStyle("RPC") // // 接口 PATH // .setPathname("/") // // 接口请求体内容格式 // .setReqBodyType("json") // // 接口响应体内容格式 // .setBodyType("json"); // return params; // } // // public static void main(String[] args_) throws Exception { // // com.aliyun.teaopenapi.Client client = Sample.createClient(); // com.aliyun.teaopenapi.models.Params params = Sample.createApiInfo(); // // query params // java.util.Map<String, Object> queries = new java.util.HashMap<>(); // queries.put("PhoneNumbers", "17828262728"); // queries.put("SignName", "海南众慧智能教育"); // queries.put("TemplateCode", "SMS_333505709"); // queries.put("TemplateParam", "{\"code\":\"1234\"}"); // // runtime options // com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions(); // com.aliyun.teaopenapi.models.OpenApiRequest request = new com.aliyun.teaopenapi.models.OpenApiRequest() // .setQuery(com.aliyun.openapiutil.Client.query(queries)); // // 返回值实际为 Map 类型,可从 Map 中获得三类数据:响应体 body、响应头 headers、HTTP 返回的状态码 statusCode。 // Object resp = client.callApi(params, request, runtime); // System.out.println(new com.google.gson.Gson().toJson(resp)); // } //}