diff --git a/user-service/pom.xml b/user-service/pom.xml index 3e2787e..d3bb213 100644 --- a/user-service/pom.xml +++ b/user-service/pom.xml @@ -163,7 +163,11 @@ jedis 2.9.0 - + + com.aliyun + aliyun-java-sdk-core + 4.5.3 + diff --git a/user-service/src/main/java/com/hp/user/service/constants/UserConstants.java b/user-service/src/main/java/com/hp/user/service/constants/UserConstants.java new file mode 100644 index 0000000..1105367 --- /dev/null +++ b/user-service/src/main/java/com/hp/user/service/constants/UserConstants.java @@ -0,0 +1,14 @@ +package com.hp.user.service.constants; + +public class UserConstants { + + /** + * 验证码redis前缀 + */ + public static String VERIFICATION_CODE = "verificationCode@"; + /** + * rediskey失效时间 + */ + public static int EXPIRE_SECONDS = 900; + +} diff --git a/user-service/src/main/java/com/hp/user/service/controller/MessageController.java b/user-service/src/main/java/com/hp/user/service/controller/MessageController.java index 11a07f1..1ae2b3b 100644 --- a/user-service/src/main/java/com/hp/user/service/controller/MessageController.java +++ b/user-service/src/main/java/com/hp/user/service/controller/MessageController.java @@ -5,6 +5,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.hp.user.client.service.MessageService; +import com.hp.user.service.util.SendSmsUtil; import io.swagger.annotations.Api; @@ -21,6 +22,7 @@ public class MessageController { @Autowired private MessageService messageService; + /** * 发送验证码 * @param phoneNumber diff --git a/user-service/src/main/java/com/hp/user/service/impl/MessageServiceImpl.java b/user-service/src/main/java/com/hp/user/service/impl/MessageServiceImpl.java index 3b6fc8f..12adc45 100644 --- a/user-service/src/main/java/com/hp/user/service/impl/MessageServiceImpl.java +++ b/user-service/src/main/java/com/hp/user/service/impl/MessageServiceImpl.java @@ -1,8 +1,17 @@ package com.hp.user.service.impl; +import java.util.Map; +import java.util.Random; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.hp.user.client.service.MessageService; +import com.hp.user.service.constants.UserConstants; +import com.hp.user.service.redis.RedisOperation; +import com.hp.user.service.util.SendSmsUtil; + +import redis.clients.jedis.Jedis; /** * 信息服务实现类 @@ -12,11 +21,37 @@ import com.hp.user.client.service.MessageService; */ @Service public class MessageServiceImpl implements MessageService { + + @Autowired + private SendSmsUtil sendSmsUtil; + @Autowired + private RedisOperation redisOperation; + + @Override public void sendVerificationCode(String phone) { - // TODO Auto-generated method stub - + try { + Random rd = new Random(); + + StringBuilder code = new StringBuilder(); + for(int i=0;i<6;i++) { + code.append(rd.nextInt(10)); + } + String codeStr = code.toString(); + Map map = sendSmsUtil.sendVerificationCode(phone, codeStr); + if("OK".equals(map.get("Code"))) { + //调用阿里云接口成功 + //调用成功后需要将code缓存到redis中 + Jedis jedis = redisOperation.getRedis(); + jedis.setex(UserConstants.VERIFICATION_CODE+phone, UserConstants.EXPIRE_SECONDS, codeStr); + jedis.close(); + }else { + //调用失败阿里云接口成功 + } + }catch(Exception e) { + + } } @Override diff --git a/user-service/src/main/java/com/hp/user/service/redis/RedisOperation.java b/user-service/src/main/java/com/hp/user/service/redis/RedisOperation.java index e286f34..851932e 100644 --- a/user-service/src/main/java/com/hp/user/service/redis/RedisOperation.java +++ b/user-service/src/main/java/com/hp/user/service/redis/RedisOperation.java @@ -1,11 +1,5 @@ package com.hp.user.service.redis; -import java.io.IOException; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; diff --git a/user-service/src/main/java/com/hp/user/util/IdWorker.java b/user-service/src/main/java/com/hp/user/service/util/IdWorker.java similarity index 99% rename from user-service/src/main/java/com/hp/user/util/IdWorker.java rename to user-service/src/main/java/com/hp/user/service/util/IdWorker.java index f80689c..de3ff64 100644 --- a/user-service/src/main/java/com/hp/user/util/IdWorker.java +++ b/user-service/src/main/java/com/hp/user/service/util/IdWorker.java @@ -1,4 +1,4 @@ -package com.hp.user.util; +package com.hp.user.service.util; /** * Id生成器 diff --git a/user-service/src/main/java/com/hp/user/service/util/SendSmsUtil.java b/user-service/src/main/java/com/hp/user/service/util/SendSmsUtil.java new file mode 100644 index 0000000..cefc85c --- /dev/null +++ b/user-service/src/main/java/com/hp/user/service/util/SendSmsUtil.java @@ -0,0 +1,78 @@ +package com.hp.user.service.util; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +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.exceptions.ServerException; +import com.aliyuncs.profile.DefaultProfile; +import com.google.gson.Gson; + +@Component +public class SendSmsUtil implements ApplicationRunner{ + + @Value("${aliyun.regionId}") + private String regionId; + @Value("${aliyun.accessKeyId}") + private String accessKeyId; + @Value("${aliyun.secret}") + private String secret; + @Value("${aliyun.signName}") + private String signName; + @Value("${aliyun.templateCode}") + private String templateCode; + + private DefaultProfile profile = null; + + @Override + public void run(ApplicationArguments args) throws Exception { + if(profile == null) { + profile = DefaultProfile.getProfile(regionId, accessKeyId, secret); + } + + } + + /** + * 验证码发送 + * @param phoneNumbers 手机号码 + * @param code 6位随机验证码 + * @return + * @throws ServerException + * @throws ClientException + */ + public Map sendVerificationCode(String phoneNumbers,String code) throws ServerException, ClientException { + IAcsClient client = new DefaultAcsClient(profile); + CommonRequest request = new CommonRequest(); + request.setSysDomain("dysmsapi.aliyuncs.com"); + request.setSysVersion("2017-05-25"); + request.setSysAction("SendSms"); + // 接收短信的手机号码 + request.putQueryParameter("PhoneNumbers", phoneNumbers); + // 短信签名名称。请在控制台签名管理页面签名名称一列查看(必须是已添加、并通过审核的短信签名)。 + request.putQueryParameter("SignName", signName); + // 短信模板ID + request.putQueryParameter("TemplateCode", templateCode); + // 短信模板变量对应的实际值,JSON格式。 + JSONObject codeJson = new JSONObject(); + codeJson.put("code", code); + request.putQueryParameter("TemplateParam", codeJson.toJSONString()); + CommonResponse commonResponse = client.getCommonResponse(request); + String data = commonResponse.getData(); + String sData = data.replaceAll("'\'", ""); +// log_print("sendSms", sData); + Gson gson = new Gson(); + Map map = gson.fromJson(sData, Map.class); + return map; + } + + + +}