)param[2]);
return param;
}
diff --git a/sms4j-api/src/main/java/org/dromara/sms4j/api/verify/PhoneVerify.java b/sms4j-api/src/main/java/org/dromara/sms4j/api/verify/PhoneVerify.java
new file mode 100644
index 00000000..d5b6cb78
--- /dev/null
+++ b/sms4j-api/src/main/java/org/dromara/sms4j/api/verify/PhoneVerify.java
@@ -0,0 +1,23 @@
+package org.dromara.sms4j.api.verify;
+
+/**
+ * PhoneVerify
+ * 实现校验手机号合规的接口
+ * @author :Wind
+ * 2024/3/28 14:15
+ **/
+public interface PhoneVerify{
+
+ /**
+ * verifyPhone
+ *
用于校验手机号是否合理的规则方法,可以尝试重写此方法以改变规则,例如你可以选择使用正则表达式来进行
+ * 一系列更加精准和严格的校验,此校验优先级最高,会在黑名单和其他拦截之前执行。
+ * 当此校验触发时候,将会直接以异常形式进行抛出,并终止后续向厂商请求的动作,故而不会有返回值。
+ * 当校验手机号合格时返回 true 否则返回 false
+ * @param phone 被校验的手机号
+ * @author :Wind
+ */
+ default boolean verifyPhone(String phone){
+ return phone.length() == 11;
+ }
+}
diff --git a/sms4j-comm/src/main/java/org/dromara/sms4j/comm/constant/Constant.java b/sms4j-comm/src/main/java/org/dromara/sms4j/comm/constant/Constant.java
index 00dbea90..edcd0edb 100644
--- a/sms4j-comm/src/main/java/org/dromara/sms4j/comm/constant/Constant.java
+++ b/sms4j-comm/src/main/java/org/dromara/sms4j/comm/constant/Constant.java
@@ -11,7 +11,7 @@ public abstract class Constant {
/**
* 项目版本号
*/
- public static final String VERSION = "V 3.0.1";
+ public static final String VERSION = "V 3.2.0";
/**
* 用于格式化鉴权头域,给"Authorization"参数赋值
diff --git a/sms4j-comm/src/main/java/org/dromara/sms4j/comm/exception/SmsBlendException.java b/sms4j-comm/src/main/java/org/dromara/sms4j/comm/exception/SmsBlendException.java
index f49f1028..14a253c7 100644
--- a/sms4j-comm/src/main/java/org/dromara/sms4j/comm/exception/SmsBlendException.java
+++ b/sms4j-comm/src/main/java/org/dromara/sms4j/comm/exception/SmsBlendException.java
@@ -22,4 +22,9 @@ public class SmsBlendException extends RuntimeException{
this.code = code;
this.requestId = requestId;
}
+
+ public SmsBlendException(Exception e){
+ super(e);
+ this.message = e.getMessage();
+ }
}
diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsInvocationHandler.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsInvocationHandler.java
index dde9bda3..7465e12f 100644
--- a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsInvocationHandler.java
+++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsInvocationHandler.java
@@ -3,6 +3,7 @@ package org.dromara.sms4j.core.proxy;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.api.SmsBlend;
import org.dromara.sms4j.api.proxy.SmsProcessor;
+import org.dromara.sms4j.comm.exception.SmsBlendException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
@@ -36,12 +37,16 @@ public class SmsInvocationHandler implements InvocationHandler {
} catch (Exception e) {
//错误执行器
doErrorHandleProcess(smsBlend, method, objects,e);
+ throw new SmsBlendException(e);
}
//后置执行器
doPostrocess(smsBlend, method, objects, result);
return result;
}
+ /**
+ * 前置执行器
+ * */
public Object[] doPreProcess(Object o, Method method, Object[] objects) {
for (SmsProcessor processor : processors) {
objects = processor.preProcessor(method, o, objects);
@@ -49,12 +54,18 @@ public class SmsInvocationHandler implements InvocationHandler {
return objects;
}
+ /**
+ * 异常执行器
+ * */
public void doErrorHandleProcess(Object o, Method method, Object[] objects,Exception e) {
for (SmsProcessor processor : processors) {
processor.exceptionHandleProcessor(method, o, objects,e);
}
}
+ /**
+ * 后置执行器
+ * */
public Object doPostrocess(Object o, Method method, Object[] objects, Object result) {
for (SmsProcessor processor : processors) {
Object overrideResult = processor.postProcessor(result, objects);
diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java
index 064d44b7..25be0138 100644
--- a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java
+++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java
@@ -101,7 +101,7 @@ public abstract class SmsProxyFactory {
Class> clazz = Class.forName(className);
Method getSmsDao = clazz.getMethod("getSmsDao", null);
SmsDao smsDao = (SmsDao) getSmsDao.invoke(null, null);
- log.info("{}:加载SmsDao成功,使用{}", frameworkName,smsDao.getClass().getName());
+ log.debug("{}:加载SmsDao成功,使用{}", frameworkName,smsDao.getClass().getName());
return smsDao;
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
log.debug("{}:尝试其他框架加载......", frameworkName);
diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/CoreMethodParamValidateProcessor.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/CoreMethodParamValidateProcessor.java
index ec490b28..480bf09e 100644
--- a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/CoreMethodParamValidateProcessor.java
+++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/CoreMethodParamValidateProcessor.java
@@ -1,8 +1,10 @@
package org.dromara.sms4j.core.proxy.processor;
import cn.hutool.core.util.StrUtil;
+import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.api.proxy.CoreMethodProcessor;
+import org.dromara.sms4j.api.verify.PhoneVerify;
import org.dromara.sms4j.comm.exception.SmsBlendException;
import java.util.LinkedHashMap;
@@ -16,8 +18,20 @@ import java.util.Objects;
* @author sh1yu
* @since 2023/10/27 13:03
*/
+@Setter
@Slf4j
public class CoreMethodParamValidateProcessor implements CoreMethodProcessor {
+
+ /**
+ * -- SETTER --
+ * 设置 phoneVerify
+ */
+ private PhoneVerify phoneVerify;
+
+ public CoreMethodParamValidateProcessor(PhoneVerify phoneVerify) {
+ this.phoneVerify = phoneVerify;
+ }
+
@Override
public int getOrder() {
return -1;
@@ -60,9 +74,12 @@ public class CoreMethodParamValidateProcessor implements CoreMethodProcessor {
}
public void validatePhone(String phone) {
- if (StrUtil.isNotEmpty(phone)) {
+ if (StrUtil.isBlank(phone)) {
throw new SmsBlendException("cant send message to null!");
}
+ if (phoneVerify != null && !phoneVerify.verifyPhone(phone)){
+ throw new SmsBlendException("The mobile phone number format is invalid!");
+ }
}
public void validatePhones(List phones) {
@@ -71,14 +88,16 @@ public class CoreMethodParamValidateProcessor implements CoreMethodProcessor {
}
for (String phone : phones) {
if (StrUtil.isNotBlank(phone)) {
- return;
+ if (phoneVerify != null && !phoneVerify.verifyPhone(phone)){
+ throw new SmsBlendException("The mobile phone number format is invalid!");
+ }
}
}
throw new SmsBlendException("cant send message to null!");
}
public void validateMessages(String templateId, LinkedHashMap messages) {
- if (StrUtil.isEmpty(templateId) && messages == null) {
+ if (StrUtil.isEmpty(templateId)) {
throw new SmsBlendException("cant use template without template param");
}
}
diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/content/OaContent.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/content/OaContent.java
index 1a3ea8b3..213c832b 100644
--- a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/content/OaContent.java
+++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/content/OaContent.java
@@ -13,14 +13,14 @@ public class OaContent {
/**
* 钉钉
*/
- public static final String DINGTALK = "dingding";
+ public static final String DING_TALK = "ding_ding";
/**
* 飞书
*/
- public static final String BYTETALK = "feishu";
+ public static final String BYTE_TALK = "byte_talk";
/**
* 微信
*/
- public static final String WETALK = "wetalk";
+ public static final String WE_TALK = "we_talk";
}
diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/Request.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/Request.java
index cab47f42..ec52ab11 100644
--- a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/Request.java
+++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/Request.java
@@ -20,6 +20,9 @@ public class Request implements Comparable {
// link类型的参数
private String messageUrl;
+ // news类型的参数
+ private List articleList;
+
private List phoneList;
// 用于@,唯一标识:userId/openId
diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/WeTalkRequestArticle.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/WeTalkRequestArticle.java
new file mode 100644
index 00000000..816d65db
--- /dev/null
+++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/WeTalkRequestArticle.java
@@ -0,0 +1,27 @@
+package org.dromara.oa.comm.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 图文消息,一个图文消息支持1到8条图文
+ * @author dongfeng
+ * 2024-03-23 19:25
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class WeTalkRequestArticle {
+ // 标题,不超过128个字节,超过会自动截断
+ private String title;
+
+ // 描述,不超过512个字节,超过会自动截断
+ private String description;
+
+ // 点击后跳转的链接。
+ private String url;
+
+ // 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068*455,小图150*150。
+ private String picUrl;
+}
diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/MessageType.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/MessageType.java
index 544babca..f67d34fc 100644
--- a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/MessageType.java
+++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/MessageType.java
@@ -5,27 +5,27 @@ import lombok.Getter;
@Getter
public enum MessageType {
// 钉钉支持类型
- DINGTALK_TEXT("text"),
+ DING_TALK_TEXT("text"),
- DINGTALK_MARKDOWN("markdown"),
+ DING_TALK_MARKDOWN("markdown"),
+
+ DING_TALK_LINK("link"),
- DINGTALK_LINK("link"),
// 飞书支持类型
-
- BYTETALK_TEXT("text"),
-// BYTETALK_MARKDOWN("markdown"),
-// BYTETALK_LINK("link"),
+ BYTE_TALK_TEXT("text"),
+// BYTE_TALK_MARKDOWN("markdown"),
+// BYTE_TALK_LINK("link"),
// 企业微信支持类型
- WETETALK_TEXT("text"),
+ WE_TALK_TEXT("text"),
- WETETALK_MARKDOWN("markdown");
+ WE_TALK_MARKDOWN("markdown"),
+ WE_TALK_NEWS("news");
//暂未支持
-// WETETALK_IMAGE("image"),
-// WETETALK_NEWS("news"),
-// WETETALK_FILE("file"),
-// WETETALK_VOICE("voice"),
-// WETETALK_TEMPLATE_CARD("template_card");
+// WE_TALK_IMAGE("image"),
+// WE_TALK_FILE("file"),
+// WE_TALK_VOICE("voice"),
+// WE_TALK_TEMPLATE_CARD("template_card");
MessageType(String name) {
this.name = name;
diff --git a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/OaType.java b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/OaType.java
index 6bf040e9..e399f10b 100644
--- a/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/OaType.java
+++ b/sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/enums/OaType.java
@@ -6,15 +6,15 @@ public enum OaType {
/**
* 钉钉
*/
- DINGTALK("dingding", "https://oapi.dingtalk.com/robot/send?access_token=", true),
+ DING_TALK("ding_ding", "https://oapi.dingtalk.com/robot/send?access_token=", true),
/**
* 微信
*/
- WETALK("wetalk", "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=", true),
+ WE_TALK("we_talk", "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=", true),
/**
* 飞书
*/
- BYTETALK("feishu", "https://open.feishu.cn/open-apis/bot/v2/hook/", true),
+ BYTE_TALK("byte_talk", "https://open.feishu.cn/open-apis/bot/v2/hook/", true),
;
@Getter
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkConfig.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkConfig.java
index 7208bea8..b70fce51 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkConfig.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkConfig.java
@@ -9,10 +9,10 @@ import org.dromara.oa.core.provider.config.OaBaseConfig;
@EqualsAndHashCode(callSuper = true)
public class ByteTalkConfig extends OaBaseConfig {
- private final String requestUrl = OaType.BYTETALK.getUrl();
+ private final String requestUrl = OaType.BYTE_TALK.getUrl();
@Override
public String getSupplier() {
- return OaType.BYTETALK.getType();
+ return OaType.BYTE_TALK.getType();
}
}
\ No newline at end of file
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkFactory.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkFactory.java
index 6b8416cc..9cad1099 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkFactory.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/config/ByteTalkFactory.java
@@ -25,7 +25,7 @@ public class ByteTalkFactory extends OaAbstractProviderFactory {
@Override
public String getSupplier() {
- return OaType.BYTETALK.getType();
+ return OaType.BYTE_TALK.getType();
}
@Override
@@ -45,7 +45,7 @@ public class ByteTalkOaImpl extends AbstractOaBlend {
StringBuilder webhook = new StringBuilder();
JSONObject message = null;
ByteTalkConfig config = getConfig();
- webhook.append(BYTETALK.getUrl());
+ webhook.append(BYTE_TALK.getUrl());
webhook.append(config.getTokenId());
long now = System.currentTimeMillis() / 1000;
String sign = ByteTalkBuilder.byteTalkSign(config.getSign(), now);
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/utils/ByteTalkBuilder.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/utils/ByteTalkBuilder.java
index 70478499..05f24f15 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/utils/ByteTalkBuilder.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/byteTalk/utils/ByteTalkBuilder.java
@@ -12,7 +12,7 @@ import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Objects;
-import static org.dromara.oa.comm.enums.MessageType.BYTETALK_TEXT;
+import static org.dromara.oa.comm.enums.MessageType.BYTE_TALK_TEXT;
/**
* 飞书通知签名和信息构建
@@ -35,7 +35,7 @@ public class ByteTalkBuilder {
public static JSONObject createByteTalkMessage(Request request, MessageType messageType, String sign, Long timestamp) {
JSONObject message = new JSONObject();
List userIdList = request.getUserIdList();
- if (messageType == BYTETALK_TEXT) {
+ if (messageType == BYTE_TALK_TEXT) {
message.set("msg_type", "text");
message.set("timestamp", timestamp);
message.set("sign", sign);
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkConfig.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkConfig.java
index 3d6d4530..1f5cb82c 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkConfig.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkConfig.java
@@ -13,10 +13,10 @@ import org.dromara.oa.core.provider.config.OaBaseConfig;
@Data
@EqualsAndHashCode(callSuper = true)
public class DingTalkConfig extends OaBaseConfig {
- private final String requestUrl = OaType.DINGTALK.getUrl();
+ private final String requestUrl = OaType.DING_TALK.getUrl();
@Override
public String getSupplier() {
- return OaType.DINGTALK.getType();
+ return OaType.DING_TALK.getType();
}
}
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkFactory.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkFactory.java
index 64850761..a8d80996 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkFactory.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/config/DingTalkFactory.java
@@ -27,7 +27,7 @@ public class DingTalkFactory extends OaAbstractProviderFactory {
StringBuilder webhook = new StringBuilder();
JSONObject message = null;
DingTalkConfig config = getConfig();
- webhook.append(DINGTALK.getUrl());
+ webhook.append(DING_TALK.getUrl());
webhook.append(config.getTokenId());
String sign = config.getSign();
if (!Objects.isNull(sign)) {
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/utils/DingTalkBuilder.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/utils/DingTalkBuilder.java
index 65ec55a0..3894a11f 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/utils/DingTalkBuilder.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/dingTalk/utils/DingTalkBuilder.java
@@ -15,9 +15,9 @@ import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Objects;
-import static org.dromara.oa.comm.enums.MessageType.DINGTALK_LINK;
-import static org.dromara.oa.comm.enums.MessageType.DINGTALK_MARKDOWN;
-import static org.dromara.oa.comm.enums.MessageType.DINGTALK_TEXT;
+import static org.dromara.oa.comm.enums.MessageType.DING_TALK_LINK;
+import static org.dromara.oa.comm.enums.MessageType.DING_TALK_MARKDOWN;
+import static org.dromara.oa.comm.enums.MessageType.DING_TALK_TEXT;
/**
* 钉钉通知签名和信息构建
@@ -46,18 +46,18 @@ public class DingTalkBuilder {
JSONObject message = new JSONObject();
- if (messageType == DINGTALK_TEXT) {
+ if (messageType == DING_TALK_TEXT) {
message.set("msgtype", "text");
JSONObject text = new JSONObject();
text.set("content", request.getContent());
message.set("text", text);
- } else if (messageType == DINGTALK_MARKDOWN) {
+ } else if (messageType == DING_TALK_MARKDOWN) {
message.set("msgtype", "markdown");
JSONObject markdown = new JSONObject();
markdown.set("text", request.getContent());
markdown.set("title", request.getTitle());
message.set("markdown", markdown);
- } else if (messageType == DINGTALK_LINK) {
+ } else if (messageType == DING_TALK_LINK) {
message.set("msgtype", "link");
JSONObject link = new JSONObject();
link.set("text", request.getContent());
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkConfig.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkConfig.java
index 88b045b8..f009bc25 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkConfig.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkConfig.java
@@ -9,10 +9,10 @@ import org.dromara.oa.core.provider.config.OaBaseConfig;
@EqualsAndHashCode(callSuper = true)
public class WeTalkConfig extends OaBaseConfig {
- private final String requestUrl = OaType.WETALK.getUrl();
+ private final String requestUrl = OaType.WE_TALK.getUrl();
@Override
public String getSupplier() {
- return OaType.WETALK.getType();
+ return OaType.WE_TALK.getType();
}
}
\ No newline at end of file
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkFactory.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkFactory.java
index 0bfe4ec6..b7938963 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkFactory.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/config/WeTalkFactory.java
@@ -25,7 +25,7 @@ public class WeTalkFactory extends OaAbstractProviderFactory {
@Override
public String getSupplier() {
- return OaType.WETALK.getType();
+ return OaType.WE_TALK.getType();
}
@Override
public Response sender(Request request, MessageType messageType) {
- if (Objects.isNull(request.getContent())) {
- throw new OaException("消息体content不能为空");
- }
+
StringBuilder webhook = new StringBuilder();
JSONObject message = null;
WeTalkConfig config = getConfig();
- webhook.append(WETALK.getUrl());
+ webhook.append(WE_TALK.getUrl());
webhook.append(config.getTokenId());
message = WeTalkBuilder.createWeTalkMessage(request, messageType);
String post;
diff --git a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/utils/WeTalkBuilder.java b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/utils/WeTalkBuilder.java
index 273c6cea..c6586cac 100644
--- a/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/utils/WeTalkBuilder.java
+++ b/sms4j-oa-plugin/sms4j-oa-core/src/main/java/org/dromara/oa/core/weTalk/utils/WeTalkBuilder.java
@@ -5,13 +5,16 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.dromara.oa.comm.entity.Request;
+import org.dromara.oa.comm.entity.WeTalkRequestArticle;
import org.dromara.oa.comm.enums.MessageType;
+import org.dromara.oa.comm.errors.OaException;
import java.util.List;
import java.util.Objects;
-import static org.dromara.oa.comm.enums.MessageType.WETETALK_MARKDOWN;
-import static org.dromara.oa.comm.enums.MessageType.WETETALK_TEXT;
+import static org.dromara.oa.comm.enums.MessageType.WE_TALK_MARKDOWN;
+import static org.dromara.oa.comm.enums.MessageType.WE_TALK_NEWS;
+import static org.dromara.oa.comm.enums.MessageType.WE_TALK_TEXT;
/**
@@ -30,7 +33,10 @@ public class WeTalkBuilder {
List phoneList = request.getPhoneList();
StringBuilder content = new StringBuilder();
Boolean isNoticeAll = request.getIsNoticeAll();
- if (messageType == WETETALK_TEXT) {
+ if (messageType == WE_TALK_TEXT) {
+ if (Objects.isNull(request.getContent())) {
+ throw new OaException("消息体content不能为空");
+ }
message.set("msgtype", "text");
JSONObject text = new JSONObject();
text.set("content", request.getContent());
@@ -58,7 +64,10 @@ public class WeTalkBuilder {
text.set("mentioned_mobile_list",phoneArray);
}
message.set("text", text);
- } else if (messageType == WETETALK_MARKDOWN) {
+ } else if (messageType == WE_TALK_MARKDOWN) {
+ if (Objects.isNull(request.getContent())) {
+ throw new OaException("消息体content不能为空");
+ }
message.set("msgtype", "markdown");
if(!Objects.isNull(userIdList)){
userIdList.forEach(l -> content.append("<@").append(l).append(">"));
@@ -69,8 +78,25 @@ public class WeTalkBuilder {
markdown.set("content", content );
markdown.set("title", request.getTitle());
message.set("markdown", markdown);
+ } else if (messageType == WE_TALK_NEWS) {
+ message.set("msgtype", "news");
+ JSONObject news = new JSONObject();
+ JSONArray articles = new JSONArray();
+ List articleList = request.getArticleList();
+ if(!articleList.isEmpty()){
+ articleList.forEach(article -> {
+ JSONObject articleJson = new JSONObject();
+ articleJson.set("title", article.getTitle());
+ articleJson.set("description", article.getDescription());
+ articleJson.set("url", article.getUrl());
+ articleJson.set("picurl", article.getPicUrl());
+ articles.add(articleJson);
+ });
+ }
+ news.set("articles", articles );
+ message.set("news", news);
} else {
- log.error("输入的消息格式不对,message:"+messageType+"应该使用WETETALK前缀的消息类型");
+ log.error("输入的消息格式不对,message:"+messageType+"应该使用WE_TALK前缀的消息类型");
}
return message;
}
diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/huawei/utils/HuaweiBuilder.java b/sms4j-provider/src/main/java/org/dromara/sms4j/huawei/utils/HuaweiBuilder.java
index 97aba3ec..df447d7a 100644
--- a/sms4j-provider/src/main/java/org/dromara/sms4j/huawei/utils/HuaweiBuilder.java
+++ b/sms4j-provider/src/main/java/org/dromara/sms4j/huawei/utils/HuaweiBuilder.java
@@ -3,6 +3,7 @@ package org.dromara.sms4j.huawei.utils;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import org.dromara.sms4j.comm.constant.Constant;
+import org.dromara.sms4j.comm.exception.SmsBlendException;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
@@ -38,14 +39,14 @@ public class HuaweiBuilder {
// Nonce
String nonce = UUID.randomUUID().toString().replace("-", "");
MessageDigest md;
- byte[] passwordDigest = null;
+ byte[] passwordDigest;
try {
md = MessageDigest.getInstance("SHA-256");
md.update((nonce + time + appSecret).getBytes());
passwordDigest = md.digest();
} catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
+ throw new SmsBlendException(e);
}
// PasswordDigest
String passwordDigestBase64Str = Base64.encode(passwordDigest);
@@ -111,13 +112,13 @@ public class HuaweiBuilder {
}
StringBuilder sb = new StringBuilder();
- String temp = "";
+ String temp;
for (String s : map.keySet()) {
try {
temp = URLEncoder.encode(map.get(s), "UTF-8");
} catch (UnsupportedEncodingException e) {
- e.printStackTrace();
+ throw new SmsBlendException(e);
}
sb.append(s).append("=").append(temp).append("&");
}
@@ -126,6 +127,9 @@ public class HuaweiBuilder {
}
public static String listToString(List list) {
+ if (null == list || list.isEmpty()) {
+ return null;
+ }
StringBuilder stringBuffer = new StringBuilder();
stringBuffer.append("[\"");
for (String s : list) {
diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/lianlu/config/LianLuFactory.java b/sms4j-provider/src/main/java/org/dromara/sms4j/lianlu/config/LianLuFactory.java
index 6477fbde..d03a9ac4 100644
--- a/sms4j-provider/src/main/java/org/dromara/sms4j/lianlu/config/LianLuFactory.java
+++ b/sms4j-provider/src/main/java/org/dromara/sms4j/lianlu/config/LianLuFactory.java
@@ -4,6 +4,9 @@ import org.dromara.sms4j.comm.constant.SupplierConstant;
import org.dromara.sms4j.lianlu.service.LianLuSmsImpl;
import org.dromara.sms4j.provider.factory.BaseProviderFactory;
+/**
+ * 联鹿短信
+ * */
public class LianLuFactory implements BaseProviderFactory {
private static final LianLuFactory INSTANCE = new LianLuFactory();
diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/netease/service/NeteaseSmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/netease/service/NeteaseSmsImpl.java
index 513b74d7..2909c676 100644
--- a/sms4j-provider/src/main/java/org/dromara/sms4j/netease/service/NeteaseSmsImpl.java
+++ b/sms4j-provider/src/main/java/org/dromara/sms4j/netease/service/NeteaseSmsImpl.java
@@ -6,6 +6,7 @@ import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.api.entity.SmsResponse;
import org.dromara.sms4j.comm.constant.Constant;
@@ -121,7 +122,14 @@ public class NeteaseSmsImpl extends AbstractSmsBlend {
JSONArray jsonArray = new JSONArray();
jsonArray.addAll(phones);
body.put("mobiles", jsonArray.toString());
- body.put("params", message);
+ //保证模板变量参数使用jsonarray传递
+ if (!JSONUtil.isTypeJSONArray(message)) {
+ jsonArray = new JSONArray();
+ jsonArray.add(message);
+ body.put("params", jsonArray.toString());
+ }else {
+ body.put("params", message);
+ }
body.put("needUp", getConfig().getNeedUp());
Map headers = MapUtil.newHashMap(5, true);
@@ -132,7 +140,7 @@ public class NeteaseSmsImpl extends AbstractSmsBlend {
headers.put("CheckSum", checkSum);
SmsResponse smsResponse;
try {
- smsResponse = getResponse(http.postJson(requestUrl, headers, body));
+ smsResponse = getResponse(http.postFrom(requestUrl, headers, body));
} catch (SmsBlendException e) {
smsResponse = new SmsResponse();
smsResponse.setSuccess(false);
diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/qiniu/config/QiNiuConfig.java b/sms4j-provider/src/main/java/org/dromara/sms4j/qiniu/config/QiNiuConfig.java
index 9a4565c7..0c93838e 100644
--- a/sms4j-provider/src/main/java/org/dromara/sms4j/qiniu/config/QiNiuConfig.java
+++ b/sms4j-provider/src/main/java/org/dromara/sms4j/qiniu/config/QiNiuConfig.java
@@ -15,14 +15,29 @@ import org.dromara.sms4j.provider.config.BaseConfig;
public class QiNiuConfig extends BaseConfig {
+ /**
+ * 请求地址
+ */
private String baseUrl = "https://sms.qiniuapi.com";
+ /**
+ * 模板变量名称
+ */
private String templateName;
+ /**
+ * 单发链接
+ */
private String singleMsgUrl = "/v1/message/single";
+ /**
+ * 群发链接
+ * */
private String massMsgUrl = "/v1/message";
+ /**
+ * 签名ID
+ * */
private String signatureId;
@Override
diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/zhutong/config/ZhutongFactory.java b/sms4j-provider/src/main/java/org/dromara/sms4j/zhutong/config/ZhutongFactory.java
index 154c63c1..ec63be42 100644
--- a/sms4j-provider/src/main/java/org/dromara/sms4j/zhutong/config/ZhutongFactory.java
+++ b/sms4j-provider/src/main/java/org/dromara/sms4j/zhutong/config/ZhutongFactory.java
@@ -6,6 +6,9 @@ import org.dromara.sms4j.comm.constant.SupplierConstant;
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
import org.dromara.sms4j.zhutong.service.ZhutongSmsImpl;
+/**
+ * 助通短信
+ * */
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class ZhutongFactory extends AbstractProviderFactory {
private static final ZhutongFactory INSTANCE = new ZhutongFactory();
diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/zhutong/service/ZhutongSmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/zhutong/service/ZhutongSmsImpl.java
index b9322b4f..1c39904e 100644
--- a/sms4j-provider/src/main/java/org/dromara/sms4j/zhutong/service/ZhutongSmsImpl.java
+++ b/sms4j-provider/src/main/java/org/dromara/sms4j/zhutong/service/ZhutongSmsImpl.java
@@ -150,7 +150,7 @@ public class ZhutongSmsImpl extends AbstractSmsBlend {
headers.put("Content-Type", Constant.APPLICATION_JSON_UTF8);
SmsResponse smsResponse;
try {
- smsResponse = getResponse(http.postJson(requestUrl, headers, json));
+ smsResponse = getResponse(http.postJson(url, headers, json));
} catch (SmsBlendException e) {
smsResponse = new SmsResponse();
smsResponse.setSuccess(false);
@@ -238,7 +238,7 @@ public class ZhutongSmsImpl extends AbstractSmsBlend {
headers.put("Content-Type", Constant.APPLICATION_JSON_UTF8);
SmsResponse smsResponse;
try {
- smsResponse = getResponse(http.postJson(requestUrl, headers, requestJson.toString()));
+ smsResponse = getResponse(http.postJson(url, headers, requestJson.toString()));
} catch (SmsBlendException e) {
smsResponse = new SmsResponse();
smsResponse.setSuccess(false);
diff --git a/sms4j-spring-boot-example/src/test/java/org/dromara/sms4j/example/SmsOaTest.java b/sms4j-spring-boot-example/src/test/java/org/dromara/sms4j/example/SmsOaTest.java
index 6685268f..dc41cc8b 100644
--- a/sms4j-spring-boot-example/src/test/java/org/dromara/sms4j/example/SmsOaTest.java
+++ b/sms4j-spring-boot-example/src/test/java/org/dromara/sms4j/example/SmsOaTest.java
@@ -3,6 +3,7 @@ package org.dromara.sms4j.example;
import lombok.extern.slf4j.Slf4j;
import org.dromara.oa.api.OaSender;
import org.dromara.oa.comm.entity.Request;
+import org.dromara.oa.comm.entity.WeTalkRequestArticle;
import org.dromara.oa.comm.enums.MessageType;
import org.dromara.oa.core.byteTalk.config.ByteTalkConfig;
import org.dromara.oa.core.dingTalk.config.DingTalkConfig;
@@ -58,7 +59,7 @@ public class SmsOaTest {
// request.setIsNoticeAll(true);
request.setContent("测试消息");
- alarm.sender(request, MessageType.DINGTALK_TEXT);
+ alarm.sender(request, MessageType.DING_TALK_TEXT);
}
@@ -82,7 +83,7 @@ public class SmsOaTest {
request.setIsNoticeAll(true);
request.setContent("#### 杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > \n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n");
request.setTitle("标题");
- alarm.sender(request, MessageType.DINGTALK_MARKDOWN);
+ alarm.sender(request, MessageType.DING_TALK_MARKDOWN);
}
@@ -106,10 +107,9 @@ public class SmsOaTest {
request.setTitle("点击跳转到钉钉");
request.setMessageUrl("https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI");
request.setPicUrl("https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png");
+ alarm.sender(request, MessageType.DING_TALK_LINK);
- alarm.sender(request, MessageType.DINGTALK_LINK);
-
}
/**
@@ -138,8 +138,8 @@ public class SmsOaTest {
request.setContent("测试消息");
// 异步发送方式
- alarm.senderAsync(request, MessageType.DINGTALK_TEXT);
- alarm.senderAsync(request, MessageType.DINGTALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
+ alarm.senderAsync(request, MessageType.DING_TALK_TEXT);
+ alarm.senderAsync(request, MessageType.DING_TALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
try {
Thread.sleep(3000L);
@@ -183,7 +183,7 @@ public class SmsOaTest {
request.setPriority(priority);
//测试-1-TEXT
request.setContent("该消息优先级为" + priority);
- alarm.senderAsyncByPriority(request, MessageType.DINGTALK_TEXT);
+ alarm.senderAsyncByPriority(request, MessageType.DING_TALK_TEXT);
System.out.println("优先级为" + priority + "的异步任务已提交");
}).start();
@@ -210,7 +210,7 @@ public class SmsOaTest {
// 支持@all
// request.setIsNoticeAll(true);
request.setContent("测试消息");
- alarm.sender(request, MessageType.DINGTALK_TEXT);
+ alarm.sender(request, MessageType.DING_TALK_TEXT);
}
//***********************ByteTalk-Test************************//
/**
@@ -247,7 +247,7 @@ public class SmsOaTest {
request.setUserIdList(userIds);
request.setIsNoticeAll(true);
request.setContent("测试消息");
- alarm.sender(request, MessageType.BYTETALK_TEXT);
+ alarm.sender(request, MessageType.BYTE_TALK_TEXT);
}
@@ -273,8 +273,8 @@ public class SmsOaTest {
request.setIsNoticeAll(true);
request.setContent("测试消息");
- alarm.senderAsync(request, MessageType.BYTETALK_TEXT);
- alarm.senderAsync(request, MessageType.BYTETALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
+ alarm.senderAsync(request, MessageType.BYTE_TALK_TEXT);
+ alarm.senderAsync(request, MessageType.BYTE_TALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
// 防止主线程挂掉
try {
@@ -294,7 +294,7 @@ public class SmsOaTest {
request.setUserIdList(userIds);
request.setIsNoticeAll(true);
request.setContent("测试消息");
- alarm.sender(request, MessageType.BYTETALK_TEXT);
+ alarm.sender(request, MessageType.BYTE_TALK_TEXT);
}
//***********************WeTalk-Test************************//
/**
@@ -332,7 +332,7 @@ public class SmsOaTest {
request.setIsNoticeAll(true);
request.setContent("测试消息");
- alarm.sender(request, MessageType.WETETALK_TEXT);
+ alarm.sender(request, MessageType.WE_TALK_TEXT);
}
@@ -362,11 +362,32 @@ public class SmsOaTest {
">普通用户反馈:117例" +
">VIP用户反馈:15例");
- alarm.sender(request, MessageType.WETETALK_MARKDOWN);
+ alarm.sender(request, MessageType.WE_TALK_MARKDOWN);
+
-
}
+ /**
+ * WeTalk的News测试
+ */
+ @Test
+ public void oaWeTalkNews() {
+ String key = "oaWeTalk";
+ WeTalkConfig WeTalkConfig = new WeTalkConfig();
+ WeTalkConfig.setConfigId(key);
+ WeTalkConfig.setTokenId(WeTalkTOKENID);
+
+ // 根据配置创建服务实例并注册
+ OaFactory.createAndRegisterOaSender(WeTalkConfig);
+ OaSender alarm = OaFactory.getSmsOaBlend(key);
+
+ Request request = new Request();
+ ArrayList articles = new ArrayList<>();
+ articles.add(new WeTalkRequestArticle("中秋节礼品领取", "今年中秋节公司有豪礼相送", "www.qq.com", "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"));
+ request.setArticleList(articles);
+
+ alarm.sender(request, MessageType.WE_TALK_NEWS);
+ }
/**
* WeTalk的异步消息发送
@@ -391,8 +412,8 @@ public class SmsOaTest {
request.setContent("测试消息");
// 异步发送方式
- alarm.senderAsync(request, MessageType.WETETALK_TEXT);
- alarm.senderAsync(request, MessageType.WETETALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
+ alarm.senderAsync(request, MessageType.WE_TALK_TEXT);
+ alarm.senderAsync(request, MessageType.WE_TALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
// 防止主线程挂掉
try {
@@ -401,6 +422,7 @@ public class SmsOaTest {
throw new RuntimeException(e);
}
}
+
@Test
public void oaWeTalkByYamlTest() {
String configId = "oaWeTalkByYaml";
@@ -411,7 +433,7 @@ public class SmsOaTest {
request.setPhoneList(phones);
request.setIsNoticeAll(true);
request.setContent("SMS4JContent");
- alarm.sender(request, MessageType.WETETALK_TEXT);
+ alarm.sender(request, MessageType.WE_TALK_TEXT);
}
}
diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java
index e3041e5f..052df4b6 100644
--- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java
+++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java
@@ -8,6 +8,7 @@ import org.dromara.sms4j.aliyun.config.AlibabaFactory;
import org.dromara.sms4j.api.SmsBlend;
import org.dromara.sms4j.api.universal.SupplierConfig;
import org.dromara.sms4j.budingyun.config.BudingV2Factory;
+import org.dromara.sms4j.api.verify.PhoneVerify;
import org.dromara.sms4j.cloopen.config.CloopenFactory;
import org.dromara.sms4j.comm.constant.Constant;
import org.dromara.sms4j.comm.enumerate.ConfigType;
@@ -42,10 +43,11 @@ import org.springframework.beans.factory.ObjectProvider;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.ServiceLoader;
@Slf4j
-public class SmsBlendsInitializer {
+public class SmsBlendsInitializer {
private final List> factoryList;
private final SmsConfig smsConfig;
@@ -55,7 +57,7 @@ public class SmsBlendsInitializer {
public SmsBlendsInitializer(List> factoryList,
SmsConfig smsConfig,
Map> blends,
- ObjectProvider extendsSmsConfigs){
+ ObjectProvider extendsSmsConfigs) {
this.factoryList = factoryList;
this.smsConfig = smsConfig;
this.blends = blends;
@@ -68,7 +70,7 @@ public class SmsBlendsInitializer {
// 注册短信对象工厂
ProviderFactoryHolder.registerFactory(factoryList);
- if(ConfigType.YAML.equals(this.smsConfig.getConfigType())) {
+ if (ConfigType.YAML.equals(this.smsConfig.getConfigType())) {
//持有初始化配置信息
Map> blendsInclude = new ConfigCombineMapAdeptor>();
blendsInclude.putAll(this.blends);
@@ -76,8 +78,8 @@ public class SmsBlendsInitializer {
for (SmsReadConfig smsReadConfig : extendsSmsConfigs) {
String key = SmsReadConfig.class.getSimpleName() + num;
Map insideMap = new HashMap<>();
- insideMap.put(key,smsReadConfig);
- blendsInclude.put(key,insideMap);
+ insideMap.put(key, smsReadConfig);
+ blendsInclude.put(key, insideMap);
num++;
}
EnvirmentHolder.frozenEnvirmet(smsConfig, blendsInclude);
@@ -86,15 +88,24 @@ public class SmsBlendsInitializer {
SmsProxyFactory.addProcessor(new BlackListProcessor());
SmsProxyFactory.addProcessor(new BlackListRecordingProcessor());
SmsProxyFactory.addProcessor(new SingleBlendRestrictedProcessor());
- SmsProxyFactory.addProcessor(new CoreMethodParamValidateProcessor());
+ //如果手机号校验器存在实现,则注册手机号校验器
+ ServiceLoader loader = ServiceLoader.load(PhoneVerify.class);
+ if (loader.iterator().hasNext()) {
+ loader.forEach(f->{
+ SmsProxyFactory.addProcessor(new CoreMethodParamValidateProcessor(f));
+ });
+ }else {
+ SmsProxyFactory.addProcessor(new CoreMethodParamValidateProcessor(null));
+ }
+
// 解析供应商配置
- for(String configId : blends.keySet()) {
+ for (String configId : blends.keySet()) {
Map configMap = blends.get(configId);
Object supplierObj = configMap.get(Constant.SUPPLIER_KEY);
String supplier = supplierObj == null ? "" : String.valueOf(supplierObj);
supplier = StrUtil.isEmpty(supplier) ? configId : supplier;
BaseProviderFactory providerFactory = (BaseProviderFactory) ProviderFactoryHolder.requireForSupplier(supplier);
- if(providerFactory == null) {
+ if (providerFactory == null) {
log.warn("创建\"{}\"的短信服务失败,未找到供应商为\"{}\"的服务", configId, supplier);
continue;
}
@@ -128,6 +139,7 @@ public class SmsBlendsInitializer {
ProviderFactoryHolder.registerFactory(QiNiuFactory.instance());
ProviderFactoryHolder.registerFactory(BudingV2Factory.instance());
if(SmsUtils.isClassExists("com.jdcloud.sdk.auth.CredentialsProvider")) {
+ if (SmsUtils.isClassExists("com.jdcloud.sdk.auth.CredentialsProvider")) {
ProviderFactoryHolder.registerFactory(JdCloudFactory.instance());
}
log.debug("加载内置运营商完成!");