mirror of
https://gitee.com/dromara/sms4j.git
synced 2025-12-06 08:58:38 +08:00
添加 sms4j-solon-plugin-example 模块
This commit is contained in:
parent
525166c102
commit
154b7c3d3e
3
pom.xml
3
pom.xml
@ -17,8 +17,9 @@
|
||||
<module>sms4j-provider</module>
|
||||
<module>sms4j-core</module>
|
||||
<module>sms4j-spring-boot-starter</module>
|
||||
<module>sms4j-solon-plugin</module>
|
||||
<module>sms4j-spring-boot-example</module>
|
||||
<module>sms4j-solon-plugin</module>
|
||||
<module>sms4j-solon-plugin-example</module>
|
||||
<module>sms4j-javase-plugin</module>
|
||||
<module>sms4j-Email-plugin</module>
|
||||
<module>sms4j-oa-plugin</module>
|
||||
|
||||
52
sms4j-solon-plugin-example/pom.xml
Normal file
52
sms4j-solon-plugin-example/pom.xml
Normal file
@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>org.dromara.sms4j</groupId>
|
||||
<artifactId>sms4j</artifactId>
|
||||
<version>${revision}</version>
|
||||
<relativePath>../pom.xml</relativePath>
|
||||
</parent>
|
||||
|
||||
<artifactId>sms4j-solon-plugin-example</artifactId>
|
||||
|
||||
<properties>
|
||||
<maven.install.skip>true</maven.install.skip>
|
||||
<maven.deploy.skip>true</maven.deploy.skip>
|
||||
</properties>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-web</artifactId>
|
||||
<version>${solon.version}</version>
|
||||
</dependency>
|
||||
<!--单元测试-->
|
||||
<dependency>
|
||||
<groupId>org.noear</groupId>
|
||||
<artifactId>solon-test-junit5</artifactId>
|
||||
<version>${solon.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara.sms4j</groupId>
|
||||
<artifactId>sms4j-oa-core</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.dromara.sms4j</groupId>
|
||||
<artifactId>sms4j-solon-plugin</artifactId>
|
||||
<version>${revision}</version>
|
||||
</dependency>
|
||||
<!-- 京东云短信依赖 -->
|
||||
<dependency>
|
||||
<groupId>com.jdcloud.sdk</groupId>
|
||||
<artifactId>sms</artifactId>
|
||||
<version>${jdcloud.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -0,0 +1,15 @@
|
||||
package org.dromara.sms4j.example;
|
||||
|
||||
import org.noear.solon.Solon;
|
||||
|
||||
/**
|
||||
* 主类
|
||||
*
|
||||
* @author handy
|
||||
*/
|
||||
public class Sms4jApp {
|
||||
|
||||
public static void main(String[] args) {
|
||||
Solon.start(Sms4jApp.class, args);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
package org.dromara.sms4j.example.zhangjun;
|
||||
|
||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||
import org.noear.solon.Solon;
|
||||
|
||||
/**
|
||||
* 自定义广州掌骏短信实现
|
||||
*
|
||||
* @author 4n
|
||||
*/
|
||||
public class ZhangJunApp {
|
||||
|
||||
public static void main(String[] args) {
|
||||
Solon.start(ZhangJunApp.class, args);
|
||||
SmsFactory.getBySupplier("zhangjun").sendMessage("17*****598", "154468");
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package org.dromara.sms4j.example.zhangjun;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.sms4j.provider.config.BaseConfig;
|
||||
|
||||
/**
|
||||
* @author 4n
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class ZhangJunConfig extends BaseConfig {
|
||||
private String appId;
|
||||
private String sid;
|
||||
private String url;
|
||||
|
||||
@Override
|
||||
public String getSupplier() {
|
||||
return "zhangjun";
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
package org.dromara.sms4j.example.zhangjun;
|
||||
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.dromara.sms4j.provider.factory.AbstractProviderFactory;
|
||||
|
||||
/**
|
||||
*
|
||||
* <p> 掌骏短信
|
||||
*
|
||||
* @author :4n
|
||||
* 2023/10/31 14:54
|
||||
**/
|
||||
@NoArgsConstructor
|
||||
public class ZhangJunFactory extends AbstractProviderFactory<ZhangJunSmsImpl, ZhangJunConfig> {
|
||||
|
||||
@Override
|
||||
public ZhangJunSmsImpl createSms(ZhangJunConfig ZhangJunConfig) {
|
||||
return new ZhangJunSmsImpl(ZhangJunConfig);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSupplier() {
|
||||
return "zhangjun";
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,119 @@
|
||||
package org.dromara.sms4j.example.zhangjun;
|
||||
|
||||
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.delayedTime.DelayedTime;
|
||||
import org.dromara.sms4j.comm.exception.SmsBlendException;
|
||||
import org.dromara.sms4j.comm.utils.SmsUtils;
|
||||
import org.dromara.sms4j.provider.service.AbstractSmsBlend;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.Executor;
|
||||
|
||||
/**
|
||||
* @author :4n
|
||||
**/
|
||||
@Slf4j
|
||||
public class ZhangJunSmsImpl extends AbstractSmsBlend<ZhangJunConfig> {
|
||||
|
||||
private int retry = 0;
|
||||
|
||||
/**
|
||||
* ZhangJunSmsImpl
|
||||
* <p>构造器,用于构造短信实现模块
|
||||
*
|
||||
* @author :Wind
|
||||
*/
|
||||
public ZhangJunSmsImpl(ZhangJunConfig config, Executor pool, DelayedTime delayedTime) {
|
||||
super(config, pool, delayedTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* ZhangJunSmsImpl
|
||||
* <p>构造器,用于构造短信实现模块
|
||||
*/
|
||||
public ZhangJunSmsImpl(ZhangJunConfig config) {
|
||||
super(config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSupplier() {
|
||||
return "zhangjun";
|
||||
}
|
||||
private LinkedHashMap<String, String> buildBody(String phone, String message){
|
||||
LinkedHashMap<String, String> map = new LinkedHashMap<>();
|
||||
map.put("appId", getConfig().getAppId());
|
||||
map.put("sid", getConfig().getSid());
|
||||
map.put("templateId", getConfig().getTemplateId());
|
||||
map.put("phone", phone);
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("code", message);
|
||||
map.put("data", JSONUtil.toJsonStr(data));
|
||||
return map;
|
||||
}
|
||||
@Override
|
||||
public SmsResponse sendMessage(String phone, String message) {
|
||||
return sendMessage(phone, getConfig().getTemplateId(), buildBody(phone,message));
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmsResponse sendMessage(String phone, LinkedHashMap<String, String> messages) {
|
||||
return sendMessage(phone, getConfig().getTemplateId(), messages);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmsResponse sendMessage(String phone, String templateId, LinkedHashMap<String, String> messages) {
|
||||
String messageStr = JSONUtil.toJsonStr(messages);
|
||||
return getSmsResponse(phone, messageStr, templateId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmsResponse massTexting(List<String> phones, String message) {
|
||||
LinkedHashMap<String, String> map = new LinkedHashMap<>();
|
||||
// map.put(getConfig().getTemplateName(), message);
|
||||
return massTexting(phones, getConfig().getTemplateId(), map);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SmsResponse massTexting(List<String> phones, String templateId, LinkedHashMap<String, String> messages) {
|
||||
String messageStr = JSONUtil.toJsonStr(messages);
|
||||
return getSmsResponse(SmsUtils.arrayToString(phones), messageStr, templateId);
|
||||
}
|
||||
|
||||
private SmsResponse getSmsResponse(String phone, String message, String templateId) {
|
||||
SmsResponse smsResponse;
|
||||
try {
|
||||
smsResponse = getResponse(http.postJson(getConfig().getUrl(), null, message));
|
||||
} catch (SmsBlendException e) {
|
||||
smsResponse = new SmsResponse();
|
||||
smsResponse.setSuccess(false);
|
||||
smsResponse.setData(e.getMessage());
|
||||
}
|
||||
if (smsResponse.isSuccess() || retry == getConfig().getMaxRetries()) {
|
||||
retry = 0;
|
||||
return smsResponse;
|
||||
}
|
||||
return requestRetry(phone, message, templateId);
|
||||
}
|
||||
|
||||
private SmsResponse requestRetry(String phone, String message, String templateId) {
|
||||
http.safeSleep(getConfig().getRetryInterval());
|
||||
retry++;
|
||||
log.warn("短信第 {} 次重新发送", retry);
|
||||
return getSmsResponse(phone, message, templateId);
|
||||
}
|
||||
|
||||
private SmsResponse getResponse(JSONObject resJson) {
|
||||
SmsResponse smsResponse = new SmsResponse();
|
||||
smsResponse.setSuccess("OK".equals(resJson.getStr("Code")));
|
||||
smsResponse.setData(resJson);
|
||||
smsResponse.setConfigId(getConfigId());
|
||||
return smsResponse;
|
||||
}
|
||||
|
||||
}
|
||||
144
sms4j-solon-plugin-example/src/main/resources/app.yml
Normal file
144
sms4j-solon-plugin-example/src/main/resources/app.yml
Normal file
@ -0,0 +1,144 @@
|
||||
sms:
|
||||
# 标注从yml读取配置
|
||||
config-type: yaml
|
||||
# 账户上限
|
||||
account-max: 1
|
||||
blends:
|
||||
# 阿里短信例子
|
||||
ali:
|
||||
#厂商标识,标定此配置是哪个厂商,详细请看厂商标识介绍部分
|
||||
supplier: alibaba
|
||||
#您的accessKey
|
||||
access-key-id: 您的accessKey
|
||||
#您的accessKeySecret
|
||||
access-key-secret: 您的accessKeySecret
|
||||
#您的短信签名
|
||||
signature: 测试签名
|
||||
#模板ID 非必须配置,如果使用sendMessage的快速发送需此配置
|
||||
template-id: SMS_272470496
|
||||
# 模版名称
|
||||
templateName: code
|
||||
# 腾讯短信例子
|
||||
tx:
|
||||
#厂商标识
|
||||
supplier: tencent
|
||||
#您的accessKey
|
||||
access-key-id: 您的accessKey
|
||||
#您的accessKeySecret
|
||||
access-key-secret: 您的accessKeySecret
|
||||
#您的短信签名
|
||||
signature: 测试签名
|
||||
#模板ID
|
||||
template-id: 1603670
|
||||
#您的sdkAppId
|
||||
sdk-app-id: 1400761645
|
||||
# 华为短信例子
|
||||
hw:
|
||||
#厂商标识
|
||||
supplier: huawei
|
||||
#您的accessKey
|
||||
access-key-id: 您的accessKey
|
||||
#您的accessKeySecret
|
||||
access-key-secret: 您的accessKeySecret
|
||||
#您的短信签名
|
||||
signature: 测试签名
|
||||
#模板ID
|
||||
template-id: ac4888205c274b2a8263479b954c1ab5
|
||||
# APP接入地址
|
||||
url: https://smsapi.cn-north-4.myhuaweicloud.com:443
|
||||
# 模版名称
|
||||
templateName: code
|
||||
# 通道号
|
||||
sender: 8823040504797
|
||||
# 合一短信例子
|
||||
uni:
|
||||
#厂商标识
|
||||
supplier: unisms
|
||||
#您的accessKey
|
||||
access-key-id: 您的accessKey
|
||||
#您的短信签名
|
||||
signature: 测试签名
|
||||
#模板ID
|
||||
template-id: pub_verif_short
|
||||
# 模版名称
|
||||
templateName: code
|
||||
# 渠道上限
|
||||
maximum: 2
|
||||
lianlu:
|
||||
supplier: lianlu
|
||||
templateId: 模板id
|
||||
appId: 100116
|
||||
appKey: d42d7
|
||||
mchId: 100
|
||||
signName: 【test】
|
||||
cloopen:
|
||||
# 短信厂商
|
||||
supplier: cloopen
|
||||
base-url: https://app.cloopen.com:8883/2013-12-26
|
||||
access-key-id: 你的Access Key
|
||||
access-key-secret: 你的Access Key Secret
|
||||
sdkAppId: 你的应用ID
|
||||
#自定义广州掌骏短信,添加factory全路径。config,factory,SmsImpl复制其他默认实现即可,修改对应的supplier和发送核心逻辑即可
|
||||
# zhangjun:
|
||||
# supplier: zhangjun
|
||||
# factory: org.dromara.sms4j.example.zhangjun.ZhangJunFactory
|
||||
# templateId: d2a****777
|
||||
# appId: 64c52d2a****77775fe72e3
|
||||
# sid: d2a****777
|
||||
# url: https://sms.idowe.com/**/**/**/send
|
||||
qiniu:
|
||||
access-key-id: EQcDflLTCYnU1******CmqIYLhog1lkWHb2
|
||||
access-key-secret: NeS2ptvZQoIy*****err2DdLe7wxFfQvji1
|
||||
templateId: 1752130****15859456
|
||||
signatureId: 175185*****1624960
|
||||
templateName: code
|
||||
# 中国移动 云MAS
|
||||
mas:
|
||||
supplier: mas
|
||||
# 请求方式默认为 HTTP
|
||||
# 请求方法 默认为 HTTP模式下的 tmpsubmit
|
||||
# norsubmit 无模板接口 不需要配置templateId
|
||||
# tmpsubmit 有模板接口 需要配置templateId
|
||||
# HTTPS 模式下 请求方法有 submit tmpsubmit
|
||||
action: tmpsubmit
|
||||
# 请求地址 HTTP模式下可不配置 默认为 http://112.35.1.155:1992/sms/
|
||||
# HTTPS模式下 请设置 https://****:****/sms/
|
||||
request-url: http://112.35.1.155:1992/sms/
|
||||
sdk-app-id: 接口账号用户名
|
||||
access-key-secret: 用户密码
|
||||
ec-name: 企业名称
|
||||
signature: 签名编码
|
||||
# 当请求方法为 tmpsubmit 时 需要配置templateId
|
||||
template-id:
|
||||
# 可为空 不为空时请遵守中国移动云MAS开发文档中的描述[服务代码加扩展码总长度不能超过20位。]
|
||||
add-serial:
|
||||
# 中百度智能云 sms
|
||||
baidu:
|
||||
access-key-id: 访问密钥ID
|
||||
access-key-secret: 用户密钥
|
||||
ec-name: 企业名称
|
||||
signature: 签名编码
|
||||
template-id: 模板ID
|
||||
# 模板变量名称
|
||||
template-name: code
|
||||
custom: 用户自定义参数,格式为字符串,状态回调时会回传该值 可不传
|
||||
user-ext-id: 通道自定义扩展码 可不传
|
||||
|
||||
sms-oa:
|
||||
config-type: yaml
|
||||
oas:
|
||||
oaDingTalkByYaml: # configId
|
||||
isEnable: true # 表示该配置是否生效(默认生效,false表示不生效)
|
||||
supplier: dingding # 厂商标识
|
||||
tokenId: 您的accessKey
|
||||
sign: 您的sign
|
||||
oaByteTalkByYaml: # configId
|
||||
supplier: feishu # 厂商标识
|
||||
tokenId: 您的accessKey
|
||||
sign: 您的sign
|
||||
oaWeTalkByYaml:
|
||||
supplier: wetalk # 厂商标识
|
||||
tokenId: 您的sign
|
||||
core-pool-size: 20
|
||||
queue-capacity: 20
|
||||
max-pool-size: 20
|
||||
@ -0,0 +1,363 @@
|
||||
package org.dromara.sms4j.example;
|
||||
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.lang.UUID;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sms4j.api.SmsBlend;
|
||||
import org.dromara.sms4j.api.entity.SmsResponse;
|
||||
import org.dromara.sms4j.baidu.service.BaiduSmsImpl;
|
||||
import org.dromara.sms4j.comm.constant.SupplierConstant;
|
||||
import org.dromara.sms4j.comm.utils.SmsUtils;
|
||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||
import org.dromara.sms4j.lianlu.service.LianLuSmsImpl;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.noear.solon.test.SolonJUnit5Extension;
|
||||
import org.noear.solon.test.SolonTest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@ExtendWith(SolonJUnit5Extension.class)
|
||||
@SolonTest
|
||||
public class Sms4jTest {
|
||||
|
||||
/**
|
||||
* 填测试手机号
|
||||
*/
|
||||
private static final String PHONE = "";
|
||||
|
||||
@Test
|
||||
public void byLoadTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 通过负载均衡服务获取短信服务对象
|
||||
SmsResponse smsResponse = SmsFactory.getSmsBlend().sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void alibabaSmsTest() {
|
||||
// 阿里
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.ALIBABA).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void huaweiSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 华为
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.HUAWEI).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cloopenSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 容联云
|
||||
Map<String, String> messageMap = MapUtil.newHashMap(2, true);
|
||||
messageMap.put("captcha", SmsUtils.getRandomInt(4));
|
||||
messageMap.put("expirationInMinutes", "5");
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.CLOOPEN)
|
||||
.sendMessage(PHONE, "1", (LinkedHashMap<String, String>) messageMap);
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void emaySmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 亿美软通
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.EMAY).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jdCloudSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 京东云
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.JDCLOUD).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void yunPianSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 云片
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.YUNPIAN).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void tencentSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
LinkedHashMap<String, String> newMap = SmsUtils.getNewMap();
|
||||
// 验证码
|
||||
newMap.put("1", SmsUtils.getRandomInt(4));
|
||||
// 有效时间
|
||||
newMap.put("2", "2");
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.TENCENT)
|
||||
.sendMessage(PHONE, "1603670", newMap);
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void uniSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 合一
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void cyYunSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 天翼云
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.CTYUN).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void neteaseSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 网易云短信
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.NETEASE).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
/**
|
||||
* 助通短信测试1:无模板
|
||||
*/
|
||||
@Test
|
||||
public void zhutongSms1Test() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 助通短信短信
|
||||
String msg = StrUtil.format("【图书商城】您好,你的验证码是{}:(5分钟失效)", SmsUtils.getRandomInt(6));
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.ZHUTONG).sendMessage(PHONE, msg);
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
/**
|
||||
* 助通短信测试2:有模板
|
||||
*/
|
||||
@Test
|
||||
public void zhutongSmsTest2Template() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 助通短信短信
|
||||
LinkedHashMap<String, String> messages = new LinkedHashMap<>(1);
|
||||
messages.put("code", SmsUtils.getRandomInt(6));
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.ZHUTONG).sendMessage(PHONE, "59264", messages);
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
/**
|
||||
* 助通短信测试3:无模板群发
|
||||
*/
|
||||
@Test
|
||||
public void zhutongSms3MoreTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 助通短信短信
|
||||
String msg = StrUtil.format("【图书商城】您好,你的验证码是{}:(5分钟失效)", SmsUtils.getRandomInt(6));
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.ZHUTONG).massTexting(ListUtil.of(PHONE, "180****1111"), msg);
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
/**
|
||||
* 助通短信测试4:有模板 多人群发
|
||||
*/
|
||||
@Test
|
||||
public void zhutongSms4TemplateTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 助通短信短信
|
||||
LinkedHashMap<String, String> messages = new LinkedHashMap<>(1);
|
||||
messages.put("code", SmsUtils.getRandomInt(6));
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.ZHUTONG).massTexting(ListUtil.of(PHONE, "180****1111"), "59264", messages);
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
/**
|
||||
* 联麓模板短信
|
||||
*/
|
||||
@Test
|
||||
public void lianLuTemplateSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.LIANLU)
|
||||
.sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
/**
|
||||
* 联麓普通短信
|
||||
*/
|
||||
@Test
|
||||
public void lianLuNormalSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
LianLuSmsImpl lianLuSms = (LianLuSmsImpl) SmsFactory.getBySupplier(SupplierConstant.LIANLU);
|
||||
SmsResponse smsResponse = lianLuSms.sendNormalMessage(PHONE, "测试短信" + SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
}
|
||||
|
||||
/**
|
||||
* 鼎众普通短信
|
||||
*/
|
||||
@Test
|
||||
public void dingZhongSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
SmsBlend dz = SmsFactory.getBySupplier(SupplierConstant.DINGZHONG);
|
||||
|
||||
LinkedHashMap<String, String> messages = new LinkedHashMap<>();
|
||||
messages.put("code", SmsUtils.getRandomInt(6));
|
||||
|
||||
ArrayList<String> phones = new ArrayList<>();
|
||||
phones.add(PHONE);
|
||||
phones.add(PHONE);
|
||||
|
||||
SmsResponse smsResponse = dz.sendMessage(PHONE, "测试短信" + SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
|
||||
SmsResponse smsResponse1 = dz.sendMessage(PHONE, messages);
|
||||
log.info(JSONUtil.toJsonStr(smsResponse1));
|
||||
Assert.isTrue(smsResponse1.isSuccess());
|
||||
|
||||
SmsResponse smsResponse3 = dz.massTexting(phones, "测试短信" + SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(smsResponse3));
|
||||
Assert.isTrue(smsResponse3.isSuccess());
|
||||
|
||||
SmsResponse smsResponse4 = dz.massTexting(phones, "" ,messages);
|
||||
log.info(JSONUtil.toJsonStr(smsResponse4));
|
||||
Assert.isTrue(smsResponse4.isSuccess());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 中国移动 云MAS
|
||||
*/
|
||||
@Test
|
||||
public void masSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
// 发送一对一/一对多普通短信
|
||||
// HTTP模式下 action请配置为 norsubmit
|
||||
// HTTPS模式下 action请配置为 submit
|
||||
SmsResponse oneToMany = SmsFactory.getBySupplier(SupplierConstant.MAS)
|
||||
.sendMessage(PHONE, "测试短信" + SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(oneToMany));
|
||||
|
||||
// 发送多对多普通短信
|
||||
// HTTP模式下 action请配置为 norsubmit
|
||||
// HTTPS模式下 action请配置为 submit
|
||||
LinkedHashMap<String, String> content = new LinkedHashMap<>();
|
||||
content.put("18***1", "测试短信1");
|
||||
content.put("18***2", "测试短信2");
|
||||
content.put("18***3", "测试短信3");
|
||||
content.put("18***4", "测试短信4");
|
||||
SmsResponse manyToMany1 = SmsFactory.getBySupplier(SupplierConstant.MAS)
|
||||
.sendMessage(PHONE, content);
|
||||
log.info(JSONUtil.toJsonStr(manyToMany1));
|
||||
|
||||
// 或者
|
||||
SmsResponse manyToMany2 = SmsFactory.getBySupplier(SupplierConstant.MAS)
|
||||
.sendMessage(PHONE, JSONUtil.toJsonStr(content));
|
||||
log.info(JSONUtil.toJsonStr(manyToMany2));
|
||||
|
||||
// 发送模板短信
|
||||
// HTTP模式下或者HTTPS模式下 action请都配置为 tmpsubmit
|
||||
// 无参数
|
||||
SmsResponse strRes = SmsFactory.getBySupplier(SupplierConstant.MAS)
|
||||
.sendMessage(PHONE, StrUtil.EMPTY);
|
||||
log.info(JSONUtil.toJsonStr(strRes));
|
||||
|
||||
//数组格式
|
||||
String[] paramsArr = {"param1", "param2"};
|
||||
SmsResponse arrRes = SmsFactory.getBySupplier(SupplierConstant.MAS)
|
||||
.sendMessage(PHONE, JSONUtil.toJsonStr(paramsArr));
|
||||
log.info(JSONUtil.toJsonStr(arrRes));
|
||||
|
||||
//list格式
|
||||
List<String> paramsList = new ArrayList<>();
|
||||
paramsList.add("param1");
|
||||
paramsList.add("param2");
|
||||
SmsResponse listRes = SmsFactory.getBySupplier(SupplierConstant.MAS)
|
||||
.sendMessage(PHONE, JSONUtil.toJsonStr(paramsList));
|
||||
log.info(JSONUtil.toJsonStr(listRes));
|
||||
}
|
||||
|
||||
/**
|
||||
* 百度短信
|
||||
*/
|
||||
@Test
|
||||
public void baiduSmsTest() {
|
||||
if (StrUtil.isBlank(PHONE)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 发送短信
|
||||
SmsResponse resp = SmsFactory.getBySupplier(SupplierConstant.BAIDU)
|
||||
.sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
log.info(JSONUtil.toJsonStr(resp));
|
||||
|
||||
// 发送携带幂等性参数短信
|
||||
BaiduSmsImpl sendWithClientToken = (BaiduSmsImpl) SmsFactory.getBySupplier(SupplierConstant.BAIDU);
|
||||
String clientToken = UUID.fastUUID().toString(true);
|
||||
SmsResponse respWithClientToken = sendWithClientToken.sendMessageWithClientToken(PHONE,
|
||||
SmsUtils.getRandomInt(6),
|
||||
clientToken);
|
||||
log.info(JSONUtil.toJsonStr(respWithClientToken));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,444 @@
|
||||
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;
|
||||
import org.dromara.oa.core.provider.factory.OaFactory;
|
||||
import org.dromara.oa.core.weTalk.config.WeTalkConfig;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.noear.solon.test.SolonJUnit5Extension;
|
||||
import org.noear.solon.test.SolonTest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
|
||||
|
||||
@Slf4j
|
||||
@ExtendWith(SolonJUnit5Extension.class)
|
||||
@SolonTest
|
||||
public class SmsOaTest {
|
||||
//***********************DingTalk-Test************************//
|
||||
/**
|
||||
* 填测试手机号
|
||||
*/
|
||||
private static final String DingTalkPHONE = "";
|
||||
/**
|
||||
* 填access_token
|
||||
*/
|
||||
private static final String DingTalkTOKENID = "";
|
||||
/**
|
||||
* 填secret
|
||||
*/
|
||||
private static final String DingTalkSIGN = "";
|
||||
|
||||
|
||||
/**
|
||||
* DingTalk的Text测试
|
||||
*/
|
||||
@Test
|
||||
public void oaDingTalkText() {
|
||||
String key = "oaDingTalk";
|
||||
DingTalkConfig dingTalkConfig = new DingTalkConfig();
|
||||
dingTalkConfig.setConfigId(key);
|
||||
dingTalkConfig.setSign(DingTalkSIGN);
|
||||
dingTalkConfig.setTokenId(DingTalkTOKENID);
|
||||
|
||||
// 根据配置创建服务实例并注册
|
||||
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||
|
||||
Request request = new Request();
|
||||
ArrayList<String> phones = new ArrayList<>();
|
||||
phones.add(DingTalkPHONE);
|
||||
// 支持通过手机号@
|
||||
request.setPhoneList(phones);
|
||||
// 支持@all
|
||||
// request.setIsNoticeAll(true);
|
||||
request.setContent("测试消息");
|
||||
|
||||
alarm.sender(request, MessageType.DING_TALK_TEXT);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* DingTalk的Markdown测试
|
||||
*/
|
||||
@Test
|
||||
public void oaDingTalkMarkdown() {
|
||||
String key = "oaDingTalk";
|
||||
DingTalkConfig dingTalkConfig = new DingTalkConfig();
|
||||
dingTalkConfig.setConfigId(key);
|
||||
dingTalkConfig.setSign(DingTalkSIGN);
|
||||
dingTalkConfig.setTokenId(DingTalkTOKENID);
|
||||
|
||||
// 根据配置创建服务实例并注册
|
||||
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||
|
||||
Request request = new Request();
|
||||
// 支持@all
|
||||
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.DING_TALK_MARKDOWN);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* DingTalk的Link测试
|
||||
*/
|
||||
@Test
|
||||
public void oaDingTalkLink() {
|
||||
String key = "oaDingTalk";
|
||||
DingTalkConfig dingTalkConfig = new DingTalkConfig();
|
||||
dingTalkConfig.setConfigId(key);
|
||||
dingTalkConfig.setSign(DingTalkSIGN);
|
||||
dingTalkConfig.setTokenId(DingTalkTOKENID);
|
||||
|
||||
// 根据配置创建服务实例并注册
|
||||
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||
|
||||
Request request = new Request();
|
||||
request.setContent("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
|
||||
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);
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* DingTalk的异步消息发送
|
||||
*/
|
||||
@Test
|
||||
public void oaDingTalkAsyncTest() {
|
||||
String key = "oaDingTalk";
|
||||
DingTalkConfig dingTalkConfig = new DingTalkConfig();
|
||||
dingTalkConfig.setConfigId(key);
|
||||
dingTalkConfig.setSign(DingTalkSIGN);
|
||||
dingTalkConfig.setTokenId(DingTalkTOKENID);
|
||||
|
||||
// 根据配置创建服务实例并注册
|
||||
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||
|
||||
|
||||
Request request = new Request();
|
||||
ArrayList<String> phones = new ArrayList<>();
|
||||
phones.add(DingTalkPHONE);
|
||||
// 支持通过手机号@
|
||||
request.setPhoneList(phones);
|
||||
// 支持@all
|
||||
// request.setIsNoticeAll(true);
|
||||
request.setContent("测试消息");
|
||||
|
||||
// 异步发送方式
|
||||
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);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 异步优先级尽可能优先级高的消息先发送,但是获取响应会受网络影响
|
||||
*/
|
||||
@Test
|
||||
public void oaDingTalkAsyncByPriority() {
|
||||
String key = "oaDingTalk";
|
||||
DingTalkConfig dingTalkConfig = new DingTalkConfig();
|
||||
dingTalkConfig.setConfigId(key);
|
||||
dingTalkConfig.setSign(DingTalkSIGN);
|
||||
dingTalkConfig.setTokenId(DingTalkTOKENID);
|
||||
|
||||
// 根据配置创建服务实例并注册
|
||||
OaFactory.createAndRegisterOaSender(dingTalkConfig);
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||
CountDownLatch user = new CountDownLatch(1);
|
||||
// 模拟10条不同优先级的消息
|
||||
for (int i = 0; i < 3; i++) {
|
||||
Random random = new Random();
|
||||
new Thread(() -> {
|
||||
int priority = random.nextInt(10);
|
||||
try {
|
||||
// 等待十个请求
|
||||
System.out.println(priority + "等待");
|
||||
user.await();
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
Request request = new Request();
|
||||
ArrayList<String> phones = new ArrayList<>();
|
||||
phones.add(DingTalkPHONE);
|
||||
request.setPhoneList(phones);
|
||||
request.setIsNoticeAll(false);
|
||||
request.setPriority(priority);
|
||||
//测试-1-TEXT
|
||||
request.setContent("该消息优先级为" + priority);
|
||||
alarm.senderAsyncByPriority(request, MessageType.DING_TALK_TEXT);
|
||||
System.out.println("优先级为" + priority + "的异步任务已提交");
|
||||
|
||||
}).start();
|
||||
}
|
||||
System.out.println("开始模拟");
|
||||
user.countDown();
|
||||
// 防止主线程挂掉
|
||||
try {
|
||||
Thread.sleep(2000L);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void oaDingTalkByYamlTest() {
|
||||
String configId = "oaDingTalkByYaml";
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(configId);
|
||||
Request request = new Request();
|
||||
ArrayList<String> phones = new ArrayList<>();
|
||||
phones.add(DingTalkPHONE);
|
||||
// 支持通过手机号@
|
||||
request.setPhoneList(phones);
|
||||
// 支持@all
|
||||
// request.setIsNoticeAll(true);
|
||||
request.setContent("测试消息");
|
||||
alarm.sender(request, MessageType.DING_TALK_TEXT);
|
||||
}
|
||||
//***********************ByteTalk-Test************************//
|
||||
/**
|
||||
* 填测试手机号
|
||||
*/
|
||||
private static final String ByteTalkUSERID = "";
|
||||
/**
|
||||
* 填access_token
|
||||
*/
|
||||
private static final String ByteTalkTOKENID = "";
|
||||
/**
|
||||
* 填secret
|
||||
*/
|
||||
private static final String ByteTalkSIGN = "";
|
||||
|
||||
/**
|
||||
* ByteTalk的Text测试
|
||||
*/
|
||||
@Test
|
||||
public void oaByteTalkText() {
|
||||
String key = "oaByteTalk";
|
||||
ByteTalkConfig byteTalkConfig = new ByteTalkConfig();
|
||||
byteTalkConfig.setConfigId(key);
|
||||
byteTalkConfig.setTokenId(ByteTalkTOKENID);
|
||||
byteTalkConfig.setSign(ByteTalkSIGN);
|
||||
// 根据配置创建服务实例并注册
|
||||
OaFactory.createAndRegisterOaSender(byteTalkConfig);
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||
|
||||
Request request = new Request();
|
||||
ArrayList<String> userIds = new ArrayList<>();
|
||||
userIds.add(ByteTalkUSERID);
|
||||
//测试text
|
||||
request.setUserIdList(userIds);
|
||||
request.setIsNoticeAll(true);
|
||||
request.setContent("测试消息");
|
||||
alarm.sender(request, MessageType.BYTE_TALK_TEXT);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ByteTalk的异步消息发送
|
||||
*/
|
||||
@Test
|
||||
public void oaByteTalkAsyncText() {
|
||||
String key = "oaByteTalk";
|
||||
ByteTalkConfig byteTalkConfig = new ByteTalkConfig();
|
||||
byteTalkConfig.setConfigId(key);
|
||||
byteTalkConfig.setTokenId(ByteTalkTOKENID);
|
||||
byteTalkConfig.setSign(ByteTalkSIGN);
|
||||
// 根据配置创建服务实例并注册
|
||||
OaFactory.createAndRegisterOaSender(byteTalkConfig);
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(key);
|
||||
|
||||
Request request = new Request();
|
||||
ArrayList<String> userIds = new ArrayList<>();
|
||||
userIds.add(ByteTalkUSERID);
|
||||
//测试text
|
||||
request.setUserIdList(userIds);
|
||||
request.setIsNoticeAll(true);
|
||||
request.setContent("测试消息");
|
||||
|
||||
alarm.senderAsync(request, MessageType.BYTE_TALK_TEXT);
|
||||
alarm.senderAsync(request, MessageType.BYTE_TALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
|
||||
|
||||
// 防止主线程挂掉
|
||||
try {
|
||||
Thread.sleep(3000L);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
@Test
|
||||
public void oaByteTalkByYamlTest() {
|
||||
String configId = "oaByteTalkByYaml";
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(configId);
|
||||
Request request = new Request();
|
||||
ArrayList<String> userIds = new ArrayList<>();
|
||||
userIds.add(ByteTalkUSERID);
|
||||
//测试text
|
||||
request.setUserIdList(userIds);
|
||||
request.setIsNoticeAll(true);
|
||||
request.setContent("测试消息");
|
||||
alarm.sender(request, MessageType.BYTE_TALK_TEXT);
|
||||
}
|
||||
//***********************WeTalk-Test************************//
|
||||
/**
|
||||
* 填测试手机号
|
||||
*/
|
||||
private static final String WeTalkPHONE = "";
|
||||
/**
|
||||
* 填测试UserId
|
||||
*/
|
||||
private static final String WeTalkUSERID = "";
|
||||
/**
|
||||
* 填access_token
|
||||
*/
|
||||
private static final String WeTalkTOKENID = "";
|
||||
|
||||
/**
|
||||
* WeTalk的Text测试
|
||||
*/
|
||||
@Test
|
||||
public void oaWeTalkText() {
|
||||
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<String> phones = new ArrayList<>();
|
||||
phones.add(WeTalkPHONE);
|
||||
//测试text
|
||||
request.setPhoneList(phones);
|
||||
request.setIsNoticeAll(true);
|
||||
request.setContent("测试消息");
|
||||
|
||||
alarm.sender(request, MessageType.WE_TALK_TEXT);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* WeTalk的Markdown测试--不支持@all,只能通过userId进行
|
||||
*/
|
||||
@Test
|
||||
public void oaWeTalkMarkdown() {
|
||||
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();
|
||||
// 管理后台-通讯录 账号就是userid,或者通过接口获取部门列表 再获取部门成员详情获取userid
|
||||
ArrayList<String> userIdList = new ArrayList<>();
|
||||
userIdList.add(WeTalkUSERID);
|
||||
request.setUserIdList(userIdList);
|
||||
|
||||
request.setContent(
|
||||
"实时新增用户反馈<font color=\"warning\">132例</font>,请相关同事注意。\n" +
|
||||
">类型:<font color=\"comment\">用户反馈</font>" +
|
||||
">普通用户反馈:<font color=\"comment\">117例</font>" +
|
||||
">VIP用户反馈:<font color=\"comment\">15例</font>");
|
||||
|
||||
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<WeTalkRequestArticle> 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的异步消息发送
|
||||
*/
|
||||
@Test
|
||||
public void oaWeTalkAsyncText() {
|
||||
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<String> phones = new ArrayList<>();
|
||||
phones.add(WeTalkPHONE);
|
||||
//测试text
|
||||
request.setPhoneList(phones);
|
||||
request.setIsNoticeAll(true);
|
||||
request.setContent("测试消息");
|
||||
|
||||
// 异步发送方式
|
||||
alarm.senderAsync(request, MessageType.WE_TALK_TEXT);
|
||||
alarm.senderAsync(request, MessageType.WE_TALK_TEXT, smsResponse -> System.out.println("ConfigId为" + smsResponse.getOaConfigId() + "的异步任务发送成功"));
|
||||
|
||||
// 防止主线程挂掉
|
||||
try {
|
||||
Thread.sleep(3000L);
|
||||
} catch (InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void oaWeTalkByYamlTest() {
|
||||
String configId = "oaWeTalkByYaml";
|
||||
OaSender alarm = OaFactory.getSmsOaBlend(configId);
|
||||
Request request = new Request();
|
||||
ArrayList<String> phones = new ArrayList<>();
|
||||
phones.add(WeTalkPHONE);
|
||||
request.setPhoneList(phones);
|
||||
request.setIsNoticeAll(true);
|
||||
request.setContent("SMS4JContent");
|
||||
alarm.sender(request, MessageType.WE_TALK_TEXT);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,192 @@
|
||||
package org.dromara.sms4j.example;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sms4j.api.SmsBlend;
|
||||
import org.dromara.sms4j.api.entity.SmsResponse;
|
||||
import org.dromara.sms4j.comm.constant.SupplierConstant;
|
||||
import org.dromara.sms4j.comm.exception.SmsBlendException;
|
||||
import org.dromara.sms4j.comm.utils.SmsUtils;
|
||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.noear.solon.test.SolonJUnit5Extension;
|
||||
import org.noear.solon.test.SolonTest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
/**
|
||||
* @author sh1yu
|
||||
*/
|
||||
@Slf4j
|
||||
@ExtendWith(SolonJUnit5Extension.class)
|
||||
@SolonTest
|
||||
public class SmsProcessorTest {
|
||||
/**
|
||||
* 填测试手机号
|
||||
*/
|
||||
private static final String PHONE = "11111111111";
|
||||
private static final String PHONE1 = "22222222222";
|
||||
|
||||
//基础发送测试,即黑名单、账户限制、渠道限制都不预设直接发送(新增参数全为空)
|
||||
@Test
|
||||
public void test1() {
|
||||
System.out.println("------------");
|
||||
SmsBlend smsBlend = SmsFactory.getBySupplier(SupplierConstant.UNISMS);
|
||||
SmsResponse smsResponse = smsBlend.sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
System.out.println(smsResponse.getData());
|
||||
|
||||
|
||||
}
|
||||
|
||||
//第二个账号的测试
|
||||
@Test
|
||||
public void test2() {
|
||||
System.out.println("------------");
|
||||
|
||||
SmsBlend smsBlend = SmsFactory.getBySupplier(SupplierConstant.HUAWEI);
|
||||
SmsResponse smsResponse = smsBlend.sendMessage(PHONE1, SmsUtils.getRandomInt(6));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
System.out.println(smsResponse.getData());
|
||||
|
||||
}
|
||||
|
||||
//参数校验测试
|
||||
@Test
|
||||
public void test3() {
|
||||
System.out.println("------------");
|
||||
|
||||
SmsBlendException knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage(PHONE, new LinkedHashMap<>());
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage("", SmsUtils.getRandomInt(6));
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage(PHONE, "");
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage(PHONE, "111", new LinkedHashMap<>());
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).massTexting(Collections.singletonList(PHONE), "");
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).massTexting(Collections.singletonList(PHONE), "2222", new LinkedHashMap<>());
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).massTexting(new ArrayList<>(), "321321");
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
}
|
||||
|
||||
//黑名单测试
|
||||
@Test
|
||||
public void test4() {
|
||||
System.out.println("------------");
|
||||
|
||||
SmsBlend smsBlend = SmsFactory.getBySupplier(SupplierConstant.UNISMS);
|
||||
//单黑名单添加
|
||||
smsBlend.joinInBlacklist(PHONE);
|
||||
SmsBlendException knowEx = null;
|
||||
try {
|
||||
smsBlend.sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
//单黑名单移除
|
||||
smsBlend.removeFromBlacklist(PHONE);
|
||||
SmsResponse smsResponse = smsBlend.sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
//批量黑名单添加
|
||||
smsBlend.batchJoinBlacklist(Collections.singletonList(PHONE));
|
||||
knowEx = null;
|
||||
try {
|
||||
smsBlend.sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
//批量黑名单添加
|
||||
smsBlend.batchRemovalFromBlacklist(Collections.singletonList(PHONE));
|
||||
smsResponse = smsBlend.sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
|
||||
}
|
||||
|
||||
//账号级上限测试、需成功发送4笔,再发就会报错 参数配置 4
|
||||
@Test
|
||||
public void test5() {
|
||||
System.out.println("------------");
|
||||
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
SmsBlendException knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage(PHONE, SmsUtils.getRandomInt(6));
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
}
|
||||
|
||||
//渠道级上限测试、需成功发送6笔,再发就会报错 参数配置 6
|
||||
@Test
|
||||
public void test6() {
|
||||
System.out.println("------------");
|
||||
|
||||
SmsResponse smsResponse = SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage(PHONE1, SmsUtils.getRandomInt(6));
|
||||
Assert.isTrue(smsResponse.isSuccess());
|
||||
|
||||
SmsBlendException knowEx = null;
|
||||
try {
|
||||
SmsFactory.getBySupplier(SupplierConstant.UNISMS).sendMessage(PHONE1, SmsUtils.getRandomInt(6));
|
||||
} catch (SmsBlendException e) {
|
||||
knowEx = e;
|
||||
System.out.println(knowEx.getMessage());
|
||||
}
|
||||
Assert.notNull(knowEx);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,102 @@
|
||||
package org.dromara.sms4j.example;
|
||||
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sms4j.aliyun.config.AlibabaConfig;
|
||||
import org.dromara.sms4j.comm.utils.SmsUtils;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.ExtendWith;
|
||||
import org.noear.solon.test.SolonJUnit5Extension;
|
||||
import org.noear.solon.test.SolonTest;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author handy
|
||||
*/
|
||||
@Slf4j
|
||||
@ExtendWith(SolonJUnit5Extension.class)
|
||||
@SolonTest
|
||||
public class SmsUtilsTest {
|
||||
|
||||
@Test
|
||||
public void getRandomString() {
|
||||
String randomString = SmsUtils.getRandomString();
|
||||
log.info(randomString);
|
||||
Assert.isTrue(randomString.length() == 6);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetRandomString() {
|
||||
String randomString = SmsUtils.getRandomString(4);
|
||||
log.info(randomString);
|
||||
Assert.isTrue(randomString.length() == 4);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getRandomInt() {
|
||||
String randomInt = SmsUtils.getRandomInt(4);
|
||||
log.info(randomInt);
|
||||
Assert.isTrue(randomInt.length() == 4);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isEmpty() {
|
||||
Assert.isTrue(SmsUtils.isEmpty(""));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void isNotEmpty() {
|
||||
Assert.isTrue(SmsUtils.isNotEmpty("not"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void jsonForObject() {
|
||||
AlibabaConfig alibabaConfig = SmsUtils.jsonForObject("{'templateName':'Test'}", AlibabaConfig.class);
|
||||
Assert.isTrue(alibabaConfig.getTemplateName().equals("Test"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void copyBean() {
|
||||
AlibabaConfig alibabaConfig = SmsUtils.jsonForObject("{'templateName':'Test'}", AlibabaConfig.class);
|
||||
AlibabaConfig alibabaConfig1 = new AlibabaConfig();
|
||||
SmsUtils.copyBean(alibabaConfig, alibabaConfig1);
|
||||
Assert.isTrue(alibabaConfig1.getTemplateName().equals("Test"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getNewMap() {
|
||||
SmsUtils.getNewMap();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void listToString() {
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("12312341234");
|
||||
list.add("12312341235");
|
||||
String str = SmsUtils.listToString(list);
|
||||
log.info(str);
|
||||
Assert.isTrue(str.equals("12312341234,12312341235"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void arrayToString() {
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("12312341234");
|
||||
list.add("12312341235");
|
||||
String str = SmsUtils.arrayToString(list);
|
||||
log.info(str);
|
||||
Assert.isTrue(str.equals("+8612312341234,+8612312341235"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void listToArray() {
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("12312341234");
|
||||
list.add("12312341235");
|
||||
String[] str = SmsUtils.listToArray(list);
|
||||
Assert.isTrue(str[0].equals("+8612312341234") && str[1].equals("+8612312341235"));
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user