diff --git a/bonus-auth/src/main/java/com/bonus/auth/service/SysPasswordService.java b/bonus-auth/src/main/java/com/bonus/auth/service/SysPasswordService.java
index b2bac6c..cb617db 100644
--- a/bonus-auth/src/main/java/com/bonus/auth/service/SysPasswordService.java
+++ b/bonus-auth/src/main/java/com/bonus/auth/service/SysPasswordService.java
@@ -19,6 +19,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
+import java.util.Arrays;
import java.util.concurrent.TimeUnit;
/**
@@ -107,7 +108,8 @@ public class SysPasswordService {
String code = VerificationCodeUtils.generateVerificationCode(VerificationCodeUtils.CodeType.NUMERIC);
String str = "您的验证码为" + code + ",尊敬的客户,以上验证码3分钟有效,微服务平台提醒您:转发可能导致账号被盗,请勿将验证码泄露于他人";
String verifyKey = CacheConstants.VERIFICATION_CODE + phone;
- String s = SmsUtils.smsToken(phone, str, "");
+ //String s = SmsUtils.smsToken(phone, str, "");
+ String s = SmsUtils.sendMsgToSms(Arrays.asList(phone), str);
if (StringUtils.isNotEmpty(s)) {
if (s.contains("ok")) {
redisService.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
diff --git a/bonus-common/bonus-common-core/lib/sms-util-1.0.jar b/bonus-common/bonus-common-core/lib/sms-util-1.0.jar
new file mode 100644
index 0000000..7b09355
Binary files /dev/null and b/bonus-common/bonus-common-core/lib/sms-util-1.0.jar differ
diff --git a/bonus-common/bonus-common-core/pom.xml b/bonus-common/bonus-common-core/pom.xml
index 26fe105..280d494 100644
--- a/bonus-common/bonus-common-core/pom.xml
+++ b/bonus-common/bonus-common-core/pom.xml
@@ -164,6 +164,16 @@
1.10.19
test
+
+
+
+ com.ahsbd
+ sms-util
+ 1.0
+ system
+ ${project.basedir}/lib/sms-util-1.0.jar
+
+
diff --git a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/sms/SmsUtils.java b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/sms/SmsUtils.java
index c80a381..f729823 100644
--- a/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/sms/SmsUtils.java
+++ b/bonus-common/bonus-common-core/src/main/java/com/bonus/common/core/utils/sms/SmsUtils.java
@@ -1,13 +1,23 @@
package com.bonus.common.core.utils.sms;
+import cn.hutool.json.JSONObject;
+import com.ah.sbd.SmsTool;
+import com.ah.sbd.utils.param.BatchSmsByContentParam;
+import com.ah.sbd.utils.param.SmsParam;
import com.alibaba.fastjson2.JSON;
+import com.bonus.common.core.utils.StringUtils;
+import com.bonus.common.core.utils.encryption.Sm4Utils;
import com.bonus.common.core.utils.http.HttpRequestHelper;
+import org.springframework.util.CollectionUtils;
import java.net.URLEncoder;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
public class SmsUtils {
+ // 安徽省公司短信平台key
+ public static final String ANHUI_COMPANY_SMS_KEY = "Wq1FZobZC5iJIAGKWh6gpKUmdGKBOQq7koHmx+Vg49g/dSjSFlw+2qRQmMmyXvJT";
/**
* 发送短信验证码
*
@@ -16,33 +26,71 @@ public class SmsUtils {
* @param sendTime 为空表示立即发送,定时发送格式:20101024090810
* @return 是否发送成功
*/
- public static String smsToken(String mobile, String content, String sendTime) {
- Map headers = new HashMap<>();
- Map mapJson = new HashMap<>(6);
- mapJson.put("ddtkey", SmsConfig.DDT_KEY);
- mapJson.put("secretkey", SmsConfig.SECRET_KEY);
- mapJson.put("mobile", mobile);
- mapJson.put("content", SmsConfig.SMS_SIGNATURE + content);
- mapJson.put("sendTime", sendTime);
- mapJson.put("extno", "");
+// public static String smsToken(String mobile, String content, String sendTime) {
+// Map headers = new HashMap<>();
+// Map mapJson = new HashMap<>(6);
+// mapJson.put("ddtkey", SmsConfig.DDT_KEY);
+// mapJson.put("secretkey", SmsConfig.SECRET_KEY);
+// mapJson.put("mobile", mobile);
+// mapJson.put("content", SmsConfig.SMS_SIGNATURE + content);
+// mapJson.put("sendTime", sendTime);
+// mapJson.put("extno", "");
+//
+// // 将mapJson转换为URL查询参数格式
+// StringBuilder urlBuilder = new StringBuilder(SmsConfig.SMS_TOKEN + "?");
+// for (Map.Entry entry : mapJson.entrySet()) {
+// try {
+// String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
+// String encodedValue = URLEncoder.encode(entry.getValue().toString(), "UTF-8");
+// urlBuilder.append(encodedKey).append("=").append(encodedValue).append("&");
+// } catch (Exception e) {
+// e.printStackTrace();
+// return null;
+// }
+// }
+// // 移除最后一个&符号
+// urlBuilder.setLength(urlBuilder.length() - 1);
+// String urlWithParams = urlBuilder.toString();
+//
+// String json = JSON.toJSONString(mapJson);
+// return HttpRequestHelper.postJson(SmsConfig.DOMAIN, urlWithParams, json, headers);
+// }
- // 将mapJson转换为URL查询参数格式
- StringBuilder urlBuilder = new StringBuilder(SmsConfig.SMS_TOKEN + "?");
- for (Map.Entry entry : mapJson.entrySet()) {
- try {
- String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
- String encodedValue = URLEncoder.encode(entry.getValue().toString(), "UTF-8");
- urlBuilder.append(encodedKey).append("=").append(encodedValue).append("&");
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
+ /**
+ * 发送消息到短信
+ *
+ * @param phoneNumbers 电话号码列表,可能包含无效或重复的号码
+ * @param msg 要发送的短信消息内容
+ * @return 发送短信的结果,具体形式依赖于SmsUtils.smsToken的实现
+ * 此方法首先检查电话号码列表是否为空,如果为空,则直接返回空字符串。
+ * 接下来,它会移除列表中所有为空的电话号码,
+ * 然后对列表中超过11位的电话号码进行解密处理,
+ * 确保只有有效的电话号码被用来发送短信。
+ */
+ public static String sendMsgToSms(List phoneNumbers, String msg) {
+ // 检查电话号码列表和消息内容是否有效
+ if (CollectionUtils.isEmpty(phoneNumbers) || StringUtils.isBlank(msg)) {
+ return "";
}
- // 移除最后一个&符号
- urlBuilder.setLength(urlBuilder.length() - 1);
- String urlWithParams = urlBuilder.toString();
- String json = JSON.toJSONString(mapJson);
- return HttpRequestHelper.postJson(SmsConfig.DOMAIN, urlWithParams, json, headers);
+ // 过滤掉无效的电话号码
+ phoneNumbers.removeIf(StringUtils::isEmpty);
+
+ // 对超过11位的电话号码进行解密处理
+ phoneNumbers.replaceAll(phoneNumber ->
+ phoneNumber.length() > 11 ? Sm4Utils.decrypt(phoneNumber) : phoneNumber
+ );
+
+ // 根据电话号码数量发送短信
+ if (phoneNumbers.isEmpty()) {
+ return "";
+ } else if (phoneNumbers.size() == 1) {
+ JSONObject sendResult = SmsTool.sendSms(new SmsParam(phoneNumbers.get(0), msg), ANHUI_COMPANY_SMS_KEY);
+ return sendResult.toString();
+ } else {
+ JSONObject sendResult = SmsTool.sendSms(new BatchSmsByContentParam(phoneNumbers, msg), ANHUI_COMPANY_SMS_KEY);
+ return sendResult.toString();
+ }
}
+
}
diff --git a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/service/SmsService.java b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/service/SmsService.java
index 2133f29..f3fa62e 100644
--- a/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/service/SmsService.java
+++ b/bonus-common/bonus-common-security/src/main/java/com/bonus/common/security/service/SmsService.java
@@ -7,9 +7,11 @@ import com.bonus.common.core.utils.VerificationCodeUtils;
import com.bonus.common.core.utils.sms.SmsUtils;
import com.bonus.common.redis.service.RedisService;
import com.bonus.common.security.config.VerificationCodeConfig;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
+import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import static com.bonus.common.core.utils.VerificationCodeUtils.CodeType.NUMERIC;
@@ -18,6 +20,7 @@ import static com.bonus.common.core.utils.VerificationCodeUtils.CodeType.NUMERIC
* @author bonus
*/
@Component
+@Slf4j
public class SmsService {
@Resource
private VerificationCodeConfig verificationCodeConfig;
@@ -37,7 +40,9 @@ public class SmsService {
String code = VerificationCodeUtils.generateVerificationCode(NUMERIC);
String str = verificationCodeConfig.getContent().replace("", code);
str = str.replace("