فهرست منبع

实现短信发送,等待相关配置参数

ximinghao 3 ماه پیش
والد
کامیت
4b5be27b09

+ 5 - 0
pom.xml

@@ -116,6 +116,11 @@
             <artifactId>guava</artifactId>
             <version>31.1-jre</version>
         </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dysmsapi20170525</artifactId>
+            <version>4.1.3</version>
+        </dependency>
         <dependency>
             <groupId>com.github.desoss</groupId>
             <artifactId>jackson-datatype-jts</artifactId>

+ 2 - 1
src/main/java/com/skyversation/xjcy/controller/LoginController.java

@@ -54,8 +54,9 @@ public class LoginController {
             boolean success = authService.sendPhoneCode(phone);
             if (success) {
                 return MessageManage.getInstance().getResultContent(200, "成功","成功");
+            }else {
+                return MessageManage.getInstance().getResultContent(500, "发送短信失败","发送短信失败");
             }
-            return MessageManage.getInstance().getResultContent(500, "未知错误", "未知错误");
         } catch (Exception e) {
             return MessageManage.getInstance().getResultContent(500, e.getMessage(), "未知错误");
         }

+ 8 - 2
src/main/java/com/skyversation/xjcy/oauth/PhoneService.java

@@ -1,9 +1,11 @@
 package com.skyversation.xjcy.oauth;
 
+import com.skyversation.xjcy.service.PhoneMessageSendService;
 import com.skyversation.xjcy.util.cache.ExpirableCache;
 import com.skyversation.xjcy.util.cache.UnifiedExpirationGuavaCacheImpl;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
@@ -16,6 +18,11 @@ import java.util.concurrent.TimeUnit;
 public class PhoneService {
 
     private final ConcurrentHashMap<String, Object> lockPool = new ConcurrentHashMap<>();
+    private final PhoneMessageSendService phoneMessageSendService;
+
+    public PhoneService(PhoneMessageSendService phoneMessageSendService) {
+        this.phoneMessageSendService = phoneMessageSendService;
+    }
 
     @Getter
     @AllArgsConstructor
@@ -46,8 +53,7 @@ public class PhoneService {
     public boolean sendCode(String phone) {
         String code = generateCode();
         cache.put(phone,code,5,TimeUnit.MINUTES);
-        System.out.println(code);
-        return true;
+        return phoneMessageSendService.sendMessage(phone,code);
     }
     private boolean checkCode(String phone,String code){
         Object lock = lockPool.computeIfAbsent(phone, k -> new Object());

+ 62 - 0
src/main/java/com/skyversation/xjcy/service/AlyPhoneMessageSendService.java

@@ -0,0 +1,62 @@
+package com.skyversation.xjcy.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.aliyun.teaopenapi.models.Config;
+import com.aliyun.dysmsapi20170525.Client;
+import com.aliyun.teautil.models.RuntimeOptions;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+
+@Service
+public class AlyPhoneMessageSendService implements PhoneMessageSendService {
+    private Client client;
+
+    @Value("${app.aly.message.key}")
+    private String key;
+    @Value("${app.aly.message.secret}")
+    private String secret;
+    @Value("${app.aly.endpoint}")
+    private String endpoint;
+
+    @Value("${app.aly.code.sign}")
+    private String codeSign;
+    @Value("${app.aly.code.template-code}")
+    private String templateCode;
+
+    @PostConstruct
+    public void init() throws Exception {
+        Config config = new Config();
+        config.setAccessKeyId(key);
+        config.setAccessKeySecret(secret);
+        config.setEndpoint(endpoint);
+        this.client = new Client(config);
+    }
+
+    @Override
+    public boolean sendMessage(String phone, String code) {
+        System.out.println(this);
+        System.out.println("通过阿里云服务发送短信");
+        System.out.println("发送到手机号---->"+phone);
+        System.out.println("验证码---->"+ code);
+
+        JSONObject obj = new JSONObject();
+        obj.put("code", code);
+
+        SendSmsRequest sendSmsRequest = new SendSmsRequest()
+                .setPhoneNumbers(phone)
+                .setSignName(codeSign)
+                .setTemplateCode(templateCode)
+                .setTemplateParam(obj.toJSONString());
+        try {
+            SendSmsResponse sendSmsResponse = this.client.sendSms(sendSmsRequest);
+            return sendSmsResponse.getStatusCode() == 200;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+}

+ 5 - 0
src/main/java/com/skyversation/xjcy/service/PhoneMessageSendService.java

@@ -0,0 +1,5 @@
+package com.skyversation.xjcy.service;
+
+public interface PhoneMessageSendService {
+    boolean sendMessage(String phone,String code);
+}

+ 10 - 1
src/main/resources/application.yml

@@ -31,4 +31,13 @@ app:
     path: ${OWS_PATH:http://121.43.55.7:8889/geoserver/xjxm/ows}
   wechat:
     appid: ${XJCY_WECHAT_APPID:wx125843453562c86c}
-    secret-key: ${XJCY_WECHAT_SECRET:6028cc345cfdbc76224d750a13519762}
+    secret-key: ${XJCY_WECHAT_SECRET:6028cc345cfdbc76224d750a13519762}
+  aly:
+    message:
+      key: ${ALIBABA_CLOUD_ACCESS_KEY_ID:any}
+      secret: ${ALIBABA_CLOUD_ACCESS_KEY_SECRET:any}
+
+    endpoint: ${ALIBABA_CLOUD_ENDPOINT:dysmsapi.aliyuncs.com}
+    code:
+      sign: ${XJCY_ALIBABA_SIGN:any}
+      template-code: ${XJCY_ALIBABA_CODE_TEMPLATE:any}