From b7d9ea5d64cc996a1add6887e50ba5bfc84d8437 Mon Sep 17 00:00:00 2001 From: cwg Date: Fri, 15 Mar 2024 11:42:28 +0800 Subject: [PATCH 01/11] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8D=E7=BD=91=E6=98=93?= =?UTF-8?q?=E4=BA=91=E7=9F=AD=E4=BF=A1=E5=8F=91=E9=80=81=E8=BF=94=E5=9B=9E?= =?UTF-8?q?414=EF=BC=88=E6=A8=A1=E6=9D=BFid=E4=B8=BAnull=E5=92=8Cparams?= =?UTF-8?q?=E5=BF=85=E9=A1=BB=E4=B8=BAjson=E9=97=AE=E9=A2=98=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms4j/netease/service/NeteaseSmsImpl.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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); From b6c7c93c38d914b9e83d33284f733d0809f6da64 Mon Sep 17 00:00:00 2001 From: JackZhai Date: Wed, 20 Mar 2024 12:07:54 +0800 Subject: [PATCH 02/11] =?UTF-8?q?Fixed=EF=BC=9A=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E5=8A=A9=E9=80=9A=E7=9F=AD=E4=BF=A1=E5=8F=91=E9=80=81=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF=E7=9F=AD=E4=BF=A1=E6=97=B6=E8=AF=B7=E6=B1=82=20URL?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/sms4j/zhutong/service/ZhutongSmsImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..0ae73954 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 @@ -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); From 5a1641aed0217c268fb8451cbfd89dc4db0c6424 Mon Sep 17 00:00:00 2001 From: JackZhai Date: Wed, 20 Mar 2024 16:13:53 +0800 Subject: [PATCH 03/11] =?UTF-8?q?Fixed=EF=BC=9A=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E5=8A=A9=E9=80=9A=E7=9F=AD=E4=BF=A1-=E5=8F=91=E9=80=81?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E7=9F=AD=E4=BF=A1=E6=97=B6=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=9C=B0=E5=9D=80=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/sms4j/zhutong/service/ZhutongSmsImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 0ae73954..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); From e7991ddba49f90260176c1dac2ff5885f363a1a1 Mon Sep 17 00:00:00 2001 From: JackZhai Date: Wed, 20 Mar 2024 16:17:02 +0800 Subject: [PATCH 04/11] =?UTF-8?q?Fixed=EF=BC=9A=E4=BF=AE=E5=A4=8D=E4=BA=86?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E5=8F=B7=E7=A9=BA=E5=80=BC=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/proxy/processor/CoreMethodParamValidateProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..20a2e8da 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 @@ -60,7 +60,7 @@ 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!"); } } From 0bf3aa562a29abcbea59ec2c9c8d31f98260ee46 Mon Sep 17 00:00:00 2001 From: wind Date: Fri, 22 Mar 2024 15:22:37 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E9=98=B2=E6=AD=A2=E8=BF=87=E5=BA=A6?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/proxy/processor/CoreMethodParamValidateProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..8b378880 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 @@ -78,7 +78,7 @@ public class CoreMethodParamValidateProcessor implements CoreMethodProcessor { } 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"); } } From fed06f2ad525fe802a2753abb4c6237def851e6b Mon Sep 17 00:00:00 2001 From: wind Date: Sun, 24 Mar 2024 16:22:59 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sms4j/qiniu/config/QiNiuConfig.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) 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 From b1a18b6972b231f391d84b27a093783b1ab57c96 Mon Sep 17 00:00:00 2001 From: wind Date: Sun, 24 Mar 2024 16:47:19 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++-- pom.xml | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0169d17e..63cd6c04 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ -

sms4j v3.1.0

+

sms4j v3.2.0

sms4j -- 让发送短信变的更简单

- +

@@ -29,9 +29,12 @@ - **[容联云国内短信(原云通讯)](https://www.yuntongxun.com/sms/note-inform)** - **[网易云信短信](https://netease.im/sms)** - **[天翼云短信](https://www.ctyun.cn/products/10020341)** +- **[七牛云短信](https://www.qiniu.com/products/sms)** - **[合一短信](https://unisms.apistd.com/)** - **[云片短信](https://www.yunpian.com/product/domestic-sms)** - **[助通短信](https://www.ztinfo.cn/products/sms)** +- **[联麓短信](https://console.shlianlu.com/#/document/smsDoc)** +- **[鼎众短信](http://demoapi.321sms.com:8201/index.html)** ## 在SpringBoot环境集成 diff --git a/pom.xml b/pom.xml index b3cf10f1..67c51bee 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ - 3.0.1-SNAPSHOT + 3.2.0 UTF-8 UTF-8 From a120bc9370fb7ee313a723c3888de2364789d8b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E9=A3=8E?= Date: Mon, 25 Mar 2024 11:59:29 +0800 Subject: [PATCH 08/11] =?UTF-8?q?1.oa=E8=A7=84=E8=8C=83=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E5=91=BD=E5=90=8D.=202.=E4=BC=81=E4=B8=9A=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E6=96=B0=E5=A2=9Enews=E6=B6=88=E6=81=AF=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/oa/comm/content/OaContent.java | 6 ++-- .../org/dromara/oa/comm/entity/Request.java | 3 ++ .../oa/comm/entity/WeTalkRequestArticle.java | 27 ++++++++++++++ .../dromara/oa/comm/enums/MessageType.java | 28 +++++++-------- .../org/dromara/oa/comm/enums/OaType.java | 6 ++-- .../core/byteTalk/config/ByteTalkConfig.java | 4 +-- .../core/byteTalk/config/ByteTalkFactory.java | 2 +- .../core/byteTalk/service/ByteTalkOaImpl.java | 6 ++-- .../core/byteTalk/utils/ByteTalkBuilder.java | 4 +-- .../core/dingTalk/config/DingTalkConfig.java | 4 +-- .../core/dingTalk/config/DingTalkFactory.java | 2 +- .../core/dingTalk/service/DingTalkOaImpl.java | 4 +-- .../core/dingTalk/utils/DingTalkBuilder.java | 12 +++---- .../oa/core/weTalk/config/WeTalkConfig.java | 4 +-- .../oa/core/weTalk/config/WeTalkFactory.java | 2 +- .../oa/core/weTalk/service/WeTalkOaImpl.java | 11 +++--- .../oa/core/weTalk/utils/WeTalkBuilder.java | 36 ++++++++++++++++--- 17 files changed, 107 insertions(+), 54 deletions(-) create mode 100644 sms4j-oa-plugin/sms4j-oa-comm/src/main/java/org/dromara/oa/comm/entity/WeTalkRequestArticle.java 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; } From 40469512e08f8a4d5e8437ac5a7e859958b9237d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=9C=E9=A3=8E?= Date: Mon, 25 Mar 2024 12:03:07 +0800 Subject: [PATCH 09/11] =?UTF-8?q?oa=E6=B5=8B=E8=AF=95=E7=B1=BB=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/sms4j/example/SmsOaTest.java | 58 +++++++++++++------ 1 file changed, 40 insertions(+), 18 deletions(-) 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 > ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\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); } } From 40e0460e15434f3aaebd88b25ae7b12f4620d80d Mon Sep 17 00:00:00 2001 From: wind Date: Thu, 28 Mar 2024 15:40:44 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E6=89=8B=E6=9C=BA=E5=8F=B7=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=90=88=E6=B3=95=E7=9A=84=E6=8E=A5=E5=8F=A3=EF=BC=8C=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E5=8F=AF=E4=BB=A5=E9=80=9A=E8=BF=87=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E6=AD=A4=E6=8E=A5=E5=8F=A3=E8=BF=9B=E8=A1=8C=E6=89=8B=E6=9C=BA?= =?UTF-8?q?=E5=8F=B7=E5=90=88=E6=B3=95=E6=80=A7=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/sms4j/api/verify/PhoneVerify.java | 23 +++++++++++++++ .../dromara/sms4j/comm/constant/Constant.java | 2 +- .../sms4j/core/proxy/SmsProxyFactory.java | 2 +- .../CoreMethodParamValidateProcessor.java | 21 +++++++++++++- .../sms4j/lianlu/config/LianLuFactory.java | 3 ++ .../sms4j/zhutong/config/ZhutongFactory.java | 3 ++ .../starter/config/SmsBlendsInitializer.java | 29 +++++++++++++------ 7 files changed, 71 insertions(+), 12 deletions(-) create mode 100644 sms4j-api/src/main/java/org/dromara/sms4j/api/verify/PhoneVerify.java 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-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 64ec8447..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; @@ -63,6 +77,9 @@ public class CoreMethodParamValidateProcessor implements CoreMethodProcessor { 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,7 +88,9 @@ 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!"); 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/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-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 f784546a..accbb2d9 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 @@ -7,6 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.sms4j.aliyun.config.AlibabaFactory; import org.dromara.sms4j.api.SmsBlend; import org.dromara.sms4j.api.universal.SupplierConfig; +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; @@ -41,10 +42,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; @@ -54,7 +56,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; @@ -67,7 +69,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); @@ -75,8 +77,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); @@ -85,15 +87,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; } @@ -125,7 +136,7 @@ public class SmsBlendsInitializer { ProviderFactoryHolder.registerFactory(LianLuFactory.instance()); ProviderFactoryHolder.registerFactory(DingZhongFactory.instance()); ProviderFactoryHolder.registerFactory(QiNiuFactory.instance()); - if(SmsUtils.isClassExists("com.jdcloud.sdk.auth.CredentialsProvider")) { + if (SmsUtils.isClassExists("com.jdcloud.sdk.auth.CredentialsProvider")) { ProviderFactoryHolder.registerFactory(JdCloudFactory.instance()); } log.debug("加载内置运营商完成!"); From 18fe81286a7647006003823a3331042178854e8d Mon Sep 17 00:00:00 2001 From: wind Date: Fri, 29 Mar 2024 16:54:40 +0800 Subject: [PATCH 11/11] =?UTF-8?q?1.=E5=8D=87=E7=BA=A7hutool=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=89=88=E6=9C=AC=E3=80=82=202.=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=A2=AB=E5=BC=82=E5=B8=B8=E6=89=A7=E8=A1=8C=E5=99=A8=E5=90=9E?= =?UTF-8?q?=E6=8E=89=E7=9A=84Exception=E3=80=82=203.=E5=8D=8E=E4=B8=BA?= =?UTF-8?q?=E4=BA=91=E6=97=A0=E5=8F=82=E6=95=B0=E6=A8=A1=E6=9D=BF=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=8A=A5=E9=94=99=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../dromara/sms4j/api/proxy/CoreMethodProcessor.java | 6 ++++++ .../sms4j/comm/exception/SmsBlendException.java | 5 +++++ .../sms4j/core/proxy/SmsInvocationHandler.java | 11 +++++++++++ .../dromara/sms4j/huawei/utils/HuaweiBuilder.java | 12 ++++++++---- 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 67c51bee..0c4e59e5 100644 --- a/pom.xml +++ b/pom.xml @@ -60,7 +60,7 @@ 2.6.5 3.17.0 1.3.3 - 5.8.25 + 5.8.26 2.3.0 1.1.1 1.6.2 diff --git a/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/CoreMethodProcessor.java b/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/CoreMethodProcessor.java index 2f0d1cbe..30109515 100644 --- a/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/CoreMethodProcessor.java +++ b/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/CoreMethodProcessor.java @@ -22,6 +22,9 @@ public interface CoreMethodProcessor extends SmsProcessor { return param; } if (NumberOfParasmeters.THREE == NumberOfParasmeters.getNumberOfParasmetersEnum(parameterCount)) { + if (null == param[2]){ + param[2] = new LinkedHashMap<>(); + } sendMessageByTemplatePreProcess((String)param[0],(String) param[1],(LinkedHashMap)param[2]); return param; } @@ -32,6 +35,9 @@ public interface CoreMethodProcessor extends SmsProcessor { return param; } if (NumberOfParasmeters.THREE == NumberOfParasmeters.getNumberOfParasmetersEnum(parameterCount)) { + if (null == param[2]){ + param[2] = new LinkedHashMap<>(); + } massTextingByTemplatePreProcess((List)param[0],(String)param[1],(LinkedHashMap)param[2]); return param; } 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-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) {