From a5f2a27e47587dba9a35a0d0e0748c948ed891b2 Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Wed, 17 Sep 2025 17:34:16 +0800
Subject: [PATCH] Gotone短信验证码
---
trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIdentifyingCodeController.java | 4 +
trading-order-common/pom.xml | 17 +++++
trading-order-common/src/main/java/com/yami/trading/common/manager/sms/GoToneSmsUtils.java | 93 +++++++++++++++++++++++++++++++
trading-order-service/src/main/java/com/yami/trading/service/IdentifyingCodeService.java | 4 +
trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java | 13 ++++
5 files changed, 128 insertions(+), 3 deletions(-)
diff --git a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIdentifyingCodeController.java b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIdentifyingCodeController.java
index 6f47fbb..ec8e4e0 100644
--- a/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIdentifyingCodeController.java
+++ b/trading-order-admin/src/main/java/com/yami/trading/api/controller/ApiIdentifyingCodeController.java
@@ -9,6 +9,8 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
+import java.io.IOException;
+
@RequestMapping("api/idcode")
@RestController
@Api(tags = "idcode")
@@ -18,7 +20,7 @@
private IdentifyingCodeService identifyingCodeService;
@RequestMapping("execute")
- public Result execute(@RequestParam String target) {
+ public Result execute(@RequestParam String target) throws IOException {
identifyingCodeService.send(target, IPHelper.getIpAddr());
return Result.succeed(null);
}
diff --git a/trading-order-common/pom.xml b/trading-order-common/pom.xml
index 81d25f0..12fa28b 100644
--- a/trading-order-common/pom.xml
+++ b/trading-order-common/pom.xml
@@ -29,6 +29,23 @@
<artifactId>s3</artifactId>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>fluent-hc</artifactId>
+ <version>4.5.13</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>4.5.13</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.14.0</version>
+ </dependency>
+
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
diff --git a/trading-order-common/src/main/java/com/yami/trading/common/manager/sms/GoToneSmsUtils.java b/trading-order-common/src/main/java/com/yami/trading/common/manager/sms/GoToneSmsUtils.java
new file mode 100644
index 0000000..f1385a5
--- /dev/null
+++ b/trading-order-common/src/main/java/com/yami/trading/common/manager/sms/GoToneSmsUtils.java
@@ -0,0 +1,93 @@
+package com.yami.trading.common.manager.sms;
+
+import org.apache.commons.lang3.StringEscapeUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.fluent.Request;
+import org.apache.http.entity.ContentType;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Component
+public class GoToneSmsUtils {
+ private static final String API_ENDPOINT = "https://app.gotonesms.ink/api/v3/sms/send";
+ private static final String apiToken ="68351|IjAi46FybmyAApdg58vweaw4JcePvRpBFeEClLlYa7c00e24";
+ private static final String senderId ="SignOTP";
+
+
+ public String sendSms(String recipient, String message) throws IOException {
+ return sendSms(recipient, senderId, message, null, null);
+ }
+
+ public String sendSms(String recipient, String senderId, String message) throws IOException {
+ return sendSms(recipient, senderId, message, null, null);
+ }
+
+ public String sendSms(String recipient, String senderId, String message,
+ LocalDateTime scheduleTime, String dltTemplateId) throws IOException {
+ // 构建JSON请求体
+ StringBuilder jsonBody = new StringBuilder();
+ jsonBody.append("{")
+ .append("\"recipient\": \"").append(escapeJson(recipient)).append("\",")
+ .append("\"sender_id\": \"").append(escapeJson(senderId)).append("\",")
+ .append("\"type\": \"plain\",")
+ .append("\"message\": \"").append(escapeJson(message)).append("\"");
+
+ if (scheduleTime != null) {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+ jsonBody.append(",\"schedule_time\": \"").append(scheduleTime.format(formatter)).append("\"");
+ }
+
+ if (dltTemplateId != null && !dltTemplateId.isEmpty()) {
+ jsonBody.append(",\"dlt_template_id\": \"").append(escapeJson(dltTemplateId)).append("\"");
+ }
+
+ jsonBody.append("}");
+
+ // 发送请求并获取响应
+ HttpResponse response = Request.Post(API_ENDPOINT)
+ .addHeader("Authorization", "Bearer " + apiToken)
+ .addHeader("Content-Type", "application/json")
+ .addHeader("Accept", "application/json")
+ .bodyString(jsonBody.toString(), ContentType.APPLICATION_JSON)
+ .execute()
+ .returnResponse();
+
+ // 读取响应内容
+ return org.apache.http.util.EntityUtils.toString(response.getEntity());
+ }
+
+ private String escapeJson(String value) {
+ if (value == null) {
+ return "";
+ }
+ return value.replace("\\", "\\\\")
+ .replace("\"", "\\\"")
+ .replace("\b", "\\b")
+ .replace("\f", "\\f")
+ .replace("\n", "\\n")
+ .replace("\r", "\\r")
+ .replace("\t", "\\t");
+ }
+
+ public static void main(String[] args) {
+ GoToneSmsUtils sender = new GoToneSmsUtils();
+
+ try {
+ String response = sender.sendSms(
+ "8617769309156",
+ "SignOTP",
+ "Your verification code is 123456."
+ );
+
+ // 输出响应结果
+ System.out.println("发送结果: " + response);
+ String responseWithChinese = StringEscapeUtils.unescapeJava(response);
+ System.out.println("中文发送结果: " + responseWithChinese);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/IdentifyingCodeService.java b/trading-order-service/src/main/java/com/yami/trading/service/IdentifyingCodeService.java
index 080412b..3f6c93b 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/IdentifyingCodeService.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/IdentifyingCodeService.java
@@ -1,5 +1,7 @@
package com.yami.trading.service;
+import java.io.IOException;
+
public interface IdentifyingCodeService {
/**
@@ -7,5 +9,5 @@
* @param target 邮件或手机号
* @param ip 会根据发送频率封ip
*/
- public void send(String target, String ip);
+ public void send(String target, String ip) throws IOException;
}
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java
index b6d70f0..708dc54 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java
@@ -5,6 +5,7 @@
import com.yami.trading.common.http.HttpHelper;
import com.yami.trading.common.manager.BlacklistIpTimeWindow;
import com.yami.trading.common.manager.SendCountTimeWindow;
+import com.yami.trading.common.manager.sms.GoToneSmsUtils;
import com.yami.trading.service.EmailSendService;
import com.yami.trading.service.IdentifyingCodeService;
import com.yami.trading.service.IdentifyingCodeTimeWindowService;
@@ -17,6 +18,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.io.IOException;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -55,8 +57,11 @@
private Map<String, Integer> ipCache = new ConcurrentHashMap<String, Integer>();
+ @Autowired
+ GoToneSmsUtils goToneSmsUtils;
+
@Override
- public void send(String target, String ip) {
+ public void send(String target, String ip) throws IOException {
String code = null;
if (chcekIp(ip)) {// 被封的ip直接返回 不操作
return;
@@ -100,6 +105,12 @@
return;
}
+ if ("GoTone".equals(send_code_type)) {
+ goToneSmsUtils.sendSms(target, MessageFormat.format(send_code_text, new Object[] { code }));
+ logger.info(MessageFormat.format("GoTone--target:{0},code:{1},ip:{2}", target, code, ip));
+ }
+
+
if ("tiantian".equals(send_code_type)) {
smsSendService.send(target, MessageFormat.format(send_code_text, new Object[] { code }));
logger.info(MessageFormat.format("tiangtian--target:{0},code:{1},ip:{2}", target, code, ip));
--
Gitblit v1.9.3