diff --git a/pom.xml b/pom.xml index a9212dc6..ccdf7a15 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,6 @@ 2.2.0 3.17.0 1.3.3 - 1.5.30 5.8.18 2.3.0 1.1.1 @@ -119,13 +118,6 @@ ${revision} - - - com.dtflys.forest - forest-core - ${forest.version} - - org.springframework.boot diff --git a/sms4j-api/pom.xml b/sms4j-api/pom.xml index f70d9ef7..5b400c67 100644 --- a/sms4j-api/pom.xml +++ b/sms4j-api/pom.xml @@ -19,5 +19,10 @@ org.dromara.sms4j sms4j-comm + + + cn.hutool + hutool-http + diff --git a/sms4j-api/src/main/java/org/dromara/sms4j/api/AbstractSmsBlend.java b/sms4j-api/src/main/java/org/dromara/sms4j/api/AbstractSmsBlend.java index 9a32765c..2c2f161d 100644 --- a/sms4j-api/src/main/java/org/dromara/sms4j/api/AbstractSmsBlend.java +++ b/sms4j-api/src/main/java/org/dromara/sms4j/api/AbstractSmsBlend.java @@ -1,6 +1,5 @@ package org.dromara.sms4j.api; -import com.dtflys.forest.config.ForestConfiguration; import org.dromara.sms4j.api.callback.CallBack; import org.dromara.sms4j.api.entity.SmsResponse; import org.dromara.sms4j.comm.annotation.Restricted; @@ -18,7 +17,6 @@ public abstract class AbstractSmsBlend implements SmsBlend{ protected final Executor pool; protected final DelayedTime delayed; - protected final ForestConfiguration http = BeanFactory.getForestConfiguration(); protected AbstractSmsBlend(Executor pool, DelayedTime delayed) { this.pool = pool; this.delayed = delayed; diff --git a/sms4j-comm/pom.xml b/sms4j-comm/pom.xml index 23950328..f2af7138 100644 --- a/sms4j-comm/pom.xml +++ b/sms4j-comm/pom.xml @@ -15,9 +15,10 @@ sms4j-comm + - com.dtflys.forest - forest-core + org.slf4j + slf4j-api diff --git a/sms4j-comm/src/main/java/org/dromara/sms4j/comm/factory/BeanFactory.java b/sms4j-comm/src/main/java/org/dromara/sms4j/comm/factory/BeanFactory.java index 6462957b..fe07aa5c 100644 --- a/sms4j-comm/src/main/java/org/dromara/sms4j/comm/factory/BeanFactory.java +++ b/sms4j-comm/src/main/java/org/dromara/sms4j/comm/factory/BeanFactory.java @@ -1,7 +1,5 @@ package org.dromara.sms4j.comm.factory; -import com.dtflys.forest.Forest; -import com.dtflys.forest.config.ForestConfiguration; import org.dromara.sms4j.comm.config.SmsConfig; import org.dromara.sms4j.comm.config.SmsSqlConfig; import org.dromara.sms4j.comm.delayedTime.DelayedTime; @@ -36,23 +34,12 @@ public class BeanFactory { /** 数据库配置*/ private static SmsSqlConfig smsSqlConfig; - /** 获取forest请求对象*/ - private static ForestConfiguration forestConfiguration; - /** 实例化自身对象防止被GC*/ private static final BeanFactory beanFactory = new BeanFactory(); private BeanFactory() { } - /** 获取请求用的对象*/ - public static ForestConfiguration getForestConfiguration() { - if (forestConfiguration == null){ - forestConfiguration = Forest.config().setBackendName("httpclient").setLogEnabled(getSmsConfig().getHttpLog()); - } - return forestConfiguration; - } - public static DelayedTime getDelayedTime() { if (delayedTime == null){ delayedTime = new DelayedTime(); diff --git a/sms4j-comm/src/main/java/org/dromara/sms4j/comm/utils/TimeExpiredPoolCache.java b/sms4j-comm/src/main/java/org/dromara/sms4j/comm/utils/TimeExpiredPoolCache.java index 8197e5cb..52629403 100644 --- a/sms4j-comm/src/main/java/org/dromara/sms4j/comm/utils/TimeExpiredPoolCache.java +++ b/sms4j-comm/src/main/java/org/dromara/sms4j/comm/utils/TimeExpiredPoolCache.java @@ -22,6 +22,7 @@ import java.util.concurrent.ConcurrentHashMap; **/ @Slf4j public class TimeExpiredPoolCache { + /** * 持久化文件格式 */ diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/aliyun/service/AlibabaSmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/aliyun/service/AlibabaSmsImpl.java index 38b6e156..ac57873e 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/aliyun/service/AlibabaSmsImpl.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/aliyun/service/AlibabaSmsImpl.java @@ -1,5 +1,7 @@ package org.dromara.sms4j.aliyun.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; @@ -15,7 +17,6 @@ import org.dromara.sms4j.comm.utils.SmsUtil; import java.util.LinkedHashMap; import java.util.List; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicReference; /** *

类名: AlibabaSmsImpl @@ -71,7 +72,6 @@ public class AlibabaSmsImpl extends AbstractSmsBlend { } private SmsResponse getSmsResponse(String phone, String message, String templateId) { - AtomicReference reference = new AtomicReference<>(); String requestUrl; String paramStr; try { @@ -82,13 +82,13 @@ public class AlibabaSmsImpl extends AbstractSmsBlend { throw new SmsBlendException(e.getMessage()); } log.debug("requestUrl {}", requestUrl); - super.http.post(requestUrl) - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .addBody(paramStr) - .onSuccess(((data, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class))))) - .onError((ex, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class)))) - .execute(); - return reference.get(); + try(HttpResponse response = HttpRequest.post(requestUrl) + .header("Content-Type", "application/x-www-form-urlencoded") + .body(paramStr) + .execute()){ + JSONObject body = JSONUtil.parseObj(response.body()); + return this.getResponse(body); + } } private SmsResponse getResponse(JSONObject resJson) { diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/api/CloopenRestApi.java b/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/api/CloopenRestApi.java deleted file mode 100644 index 39e5d273..00000000 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/api/CloopenRestApi.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.dromara.sms4j.cloopen.api; - -import com.dtflys.forest.annotation.Address; -import com.dtflys.forest.annotation.BaseRequest; -import com.dtflys.forest.annotation.Body; -import com.dtflys.forest.annotation.PostRequest; - -import java.util.Map; - -/** - * 容联云 REST API - * - * @author Charles7c - * @since 2023/4/17 20:57 - */ -@Address(basePath = "{baseUrl}") -@BaseRequest(headers = { - "Accept: application/json", - "Content-Type: application/json;charset=utf-8", - "Authorization: {authorization}", -}) -public interface CloopenRestApi { - - /** - * 发送模板短信 - * - * @param paramMap 请求参数 - * @return 响应结果 - */ - @PostRequest("/Accounts/{accessKeyId}/SMS/TemplateSMS?sig={sign}") - Map sendSms(@Body Map paramMap); -} diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/service/CloopenSmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/service/CloopenSmsImpl.java index 32ca6af6..2d3c6936 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/service/CloopenSmsImpl.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/service/CloopenSmsImpl.java @@ -2,11 +2,9 @@ package org.dromara.sms4j.cloopen.service; import cn.hutool.core.map.MapUtil; import cn.hutool.core.util.IdUtil; -import com.dtflys.forest.Forest; import lombok.extern.slf4j.Slf4j; import org.dromara.sms4j.api.AbstractSmsBlend; import org.dromara.sms4j.api.entity.SmsResponse; -import org.dromara.sms4j.cloopen.api.CloopenRestApi; import org.dromara.sms4j.cloopen.config.CloopenConfig; import org.dromara.sms4j.cloopen.util.CloopenHelper; import org.dromara.sms4j.comm.annotation.Restricted; @@ -27,14 +25,11 @@ import java.util.concurrent.Executor; @Slf4j public class CloopenSmsImpl extends AbstractSmsBlend { - private final CloopenRestApi restApi; - private final CloopenConfig config; public CloopenSmsImpl(CloopenConfig config, Executor pool, DelayedTime delayed) { super(pool,delayed); this.config = config; - restApi = Forest.client(CloopenRestApi.class); } @Override @@ -66,6 +61,6 @@ public class CloopenSmsImpl extends AbstractSmsBlend { paramMap.put("appId", config.getAppId()); paramMap.put("templateId", templateId); paramMap.put("datas", messages.keySet().stream().map(messages::get).toArray(String[]::new)); - return helper.request(restApi::sendSms, paramMap); + return helper.smsResponse(paramMap); } } diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/util/CloopenHelper.java b/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/util/CloopenHelper.java index adfde04c..b2aa1397 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/util/CloopenHelper.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/cloopen/util/CloopenHelper.java @@ -1,22 +1,18 @@ package org.dromara.sms4j.cloopen.util; import cn.hutool.core.codec.Base64; -import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.dtflys.forest.Forest; -import com.dtflys.forest.config.ForestConfiguration; import org.dromara.sms4j.api.entity.SmsResponse; import org.dromara.sms4j.cloopen.config.CloopenConfig; -import org.dromara.sms4j.comm.exception.SmsBlendException; -import org.dromara.sms4j.comm.utils.RestApiFunction; -import java.util.Collections; import java.util.Date; import java.util.Map; -import java.util.Optional; /** * 容联云 Helper @@ -32,38 +28,29 @@ public class CloopenHelper { this.config = config; } - /** - * 发起 REST 请求 - * - * @param restApiFunction REST API 函数式接口 - * @param paramMap 请求参数 - * @param 响应类型 - * @return 响应信息 - */ - public SmsResponse request(RestApiFunction, R> restApiFunction, Map paramMap) { - SmsResponse smsResponse = new SmsResponse(); - try { - String timestamp = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN); - // 设置全局变量 - ForestConfiguration forestConfiguration = Forest.config(); - forestConfiguration.setVariableValue("baseUrl", (method) -> config.getBaseUrl()); - forestConfiguration.setVariableValue("accessKeyId", (method) -> config.getAccessKeyId()); - forestConfiguration.setVariableValue("sign", this.generateSign(config.getAccessKeyId(), config.getAccessKeySecret(), timestamp)); - forestConfiguration.setVariableValue("authorization", this.generateAuthorization(config.getAccessKeyId(), timestamp)); + public SmsResponse smsResponse(Map paramMap){ + String timestamp = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN); - // 调用请求 - R response = restApiFunction.apply(paramMap); + String url = String.format("%s/Accounts/%s/SMS/TemplateSMS?sig=%s", + config.getBaseUrl(), + config.getAccessKeyId(), + this.generateSign(config.getAccessKeyId(), config.getAccessKeySecret(), timestamp)); - // 解析结果 - Map responseMap = Optional.ofNullable(response) - .map(JSONUtil::parseObj) - .map(obj -> (Map) obj) - .orElse(Collections.emptyMap()); - smsResponse.setSuccess("000000".equals(Convert.toStr(responseMap.get("statusCode")))); - smsResponse.setData(JSONUtil.toJsonStr(response)); - } catch (Exception e) { - throw new SmsBlendException(e.getMessage()); + try(HttpResponse response = HttpRequest.post(url) + .header("Accept", "application/json") + .header("Content-Type", "application/json;charset=utf-8") + .header("Authorization", this.generateAuthorization(config.getAccessKeyId(), timestamp)) + .body(JSONUtil.toJsonStr(paramMap)) + .execute()){ + JSONObject body = JSONUtil.parseObj(response.body()); + return this.getResponse(body); } + } + + private SmsResponse getResponse(JSONObject resJson) { + SmsResponse smsResponse = new SmsResponse(); + smsResponse.setSuccess("000000".equals(resJson.getStr("statusCode"))); + smsResponse.setData(resJson); return smsResponse; } diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/ctyun/service/CtyunSmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/ctyun/service/CtyunSmsImpl.java index d6e82129..c23b03e0 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/ctyun/service/CtyunSmsImpl.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/ctyun/service/CtyunSmsImpl.java @@ -1,5 +1,7 @@ package org.dromara.sms4j.ctyun.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; @@ -15,7 +17,6 @@ import org.dromara.sms4j.ctyun.utils.CtyunUtils; import java.util.LinkedHashMap; import java.util.List; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicReference; /** *

类名: CtyunSmsImpl @@ -65,7 +66,6 @@ public class CtyunSmsImpl extends AbstractSmsBlend { } private SmsResponse getSmsResponse(String phone, String message, String templateId) { - AtomicReference smsResponse = new AtomicReference<>(); String requestUrl; String paramStr; try { @@ -76,13 +76,13 @@ public class CtyunSmsImpl extends AbstractSmsBlend { throw new SmsBlendException(e.getMessage()); } log.debug("requestUrl {}", requestUrl); - http.post(requestUrl) - .addHeader(CtyunUtils.signHeader(paramStr, ctyunConfig.getAccessKeyId(), ctyunConfig.getAccessKeySecret())) - .addBody(paramStr) - .onSuccess(((data, req, res) -> smsResponse.set(this.getResponse(res.get(JSONObject.class))))) - .onError((ex, req, res) -> smsResponse.set(this.getResponse(res.get(JSONObject.class)))) - .execute(); - return smsResponse.get(); + try(HttpResponse response = HttpRequest.post(requestUrl) + .addHeaders(CtyunUtils.signHeader(paramStr, ctyunConfig.getAccessKeyId(), ctyunConfig.getAccessKeySecret())) + .body(paramStr) + .execute()){ + JSONObject body = JSONUtil.parseObj(response.body()); + return this.getResponse(body); + } } private SmsResponse getResponse(JSONObject resJson) { diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/emay/service/EmaySmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/emay/service/EmaySmsImpl.java index a5f35650..0666d84d 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/emay/service/EmaySmsImpl.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/emay/service/EmaySmsImpl.java @@ -1,6 +1,9 @@ package org.dromara.sms4j.emay.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.dromara.sms4j.api.AbstractSmsBlend; import org.dromara.sms4j.api.entity.SmsResponse; @@ -16,7 +19,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicReference; /** * @author Richard @@ -79,16 +81,16 @@ public class EmaySmsImpl extends AbstractSmsBlend { } private SmsResponse getSendResponse(Map body, String requestUrl) { - AtomicReference smsResponse = new AtomicReference<>(); - http.post(requestUrl) - .addBody(body) - .onSuccess(((data, req, res) -> smsResponse.set(this.getSmsResponse(res.get(JSONObject.class))))) - .onError((ex, req, res) -> smsResponse.set(this.getSmsResponse(res.get(JSONObject.class)))) - .execute(); - return smsResponse.get(); + try(HttpResponse response = HttpRequest.post(requestUrl) + .header("Content-Type", "application/x-www-form-urlencoded") + .body(JSONUtil.toJsonStr(body)) + .execute()){ + JSONObject res = JSONUtil.parseObj(response.body()); + return this.getResponse(res); + } } - private SmsResponse getSmsResponse(JSONObject resJson) { + private SmsResponse getResponse(JSONObject resJson) { SmsResponse smsResponse = new SmsResponse(); smsResponse.setSuccess("success".equalsIgnoreCase(resJson.getStr("code"))); smsResponse.setData(resJson); diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/huawei/service/HuaweiSmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/huawei/service/HuaweiSmsImpl.java index c67de3e4..73136448 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/huawei/service/HuaweiSmsImpl.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/huawei/service/HuaweiSmsImpl.java @@ -1,6 +1,9 @@ package org.dromara.sms4j.huawei.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import org.dromara.sms4j.api.AbstractSmsBlend; import org.dromara.sms4j.api.entity.SmsResponse; @@ -16,7 +19,6 @@ import java.util.List; import java.util.Map; import java.util.UUID; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicReference; import static org.dromara.sms4j.huawei.utils.HuaweiBuilder.listToString; @@ -40,7 +42,6 @@ public class HuaweiSmsImpl extends AbstractSmsBlend { @Override @Restricted public SmsResponse sendMessage(String phone, String templateId, LinkedHashMap messages) { - AtomicReference reference = new AtomicReference<>(); String url = config.getUrl() + Constant.HUAWEI_REQUEST_URL; List list = new ArrayList<>(); for (Map.Entry entry : messages.entrySet()) { @@ -52,13 +53,13 @@ public class HuaweiSmsImpl extends AbstractSmsBlend { headers.put("Authorization", Constant.HUAWEI_AUTH_HEADER_VALUE); headers.put("X-WSSE", HuaweiBuilder.buildWsseHeader(config.getAppKey(), config.getAppSecret())); headers.put("Content-Type", Constant.FROM_URLENCODED); - http.post(url) - .addHeader(headers) - .addBody(requestBody) - .onSuccess(((data, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class))))) - .onError((ex, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class)))) - .execute(); - return reference.get(); + try(HttpResponse response = HttpRequest.post(url) + .addHeaders(headers) + .body(requestBody) + .execute()){ + JSONObject body = JSONUtil.parseObj(response.body()); + return this.getResponse(body); + } } @Override diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/netease/config/NeteaseConfig.java b/sms4j-provider/src/main/java/org/dromara/sms4j/netease/config/NeteaseConfig.java index 907ad163..5222c032 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/netease/config/NeteaseConfig.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/netease/config/NeteaseConfig.java @@ -2,6 +2,7 @@ package org.dromara.sms4j.netease.config; import lombok.Builder; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; import org.dromara.sms4j.api.universal.SupplierConfig; @@ -10,6 +11,7 @@ import org.dromara.sms4j.comm.config.BaseConfig; /** * @author adam */ +@EqualsAndHashCode(callSuper = true) @Data @SuperBuilder @NoArgsConstructor 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 2cb8bc05..4d9a1bd1 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 @@ -2,9 +2,11 @@ package org.dromara.sms4j.netease.service; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.IdUtil; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; +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.AbstractSmsBlend; import org.dromara.sms4j.api.entity.SmsResponse; @@ -20,7 +22,6 @@ import java.util.List; import java.util.Map; import java.util.Optional; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicReference; /** * Created with IntelliJ IDEA. @@ -93,31 +94,32 @@ public class NeteaseSmsImpl extends AbstractSmsBlend { } private SmsResponse getSmsResponse(String requestUrl, List phones, String message, String templateId) { - AtomicReference reference = new AtomicReference<>(); String nonce = IdUtil.fastSimpleUUID(); String curTime = String.valueOf(DateUtil.currentSeconds()); String checkSum = NeteaseUtils.getCheckSum(config.getAccessKeySecret(), nonce, curTime); Map body = new LinkedHashMap<>(4); body.put("templateid", templateId); - body.put("mobiles", JSONArray.parseArray(JSON.toJSONString(phones)).toJSONString()); + JSONArray jsonArray = JSONUtil.createArray(); + jsonArray.addAll(phones); + body.put("mobiles", jsonArray.toString()); body.put("params", message); body.put("needUp", config.getNeedUp()); - http.post(requestUrl) - .addHeader("Content-Type", "application/x-www-form-urlencoded") - .addHeader("AppKey", config.getAccessKeyId()) - .addHeader("Nonce", nonce) - .addHeader("CurTime", curTime) - .addHeader("CheckSum", checkSum) - .addBody(body) - .onSuccess(((data, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class))))) - .onError((ex, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class)))) - .execute(); - return reference.get(); + try(HttpResponse response = HttpRequest.post(requestUrl) + .header("Content-Type", "application/x-www-form-urlencoded") + .header("AppKey", config.getAccessKeyId()) + .header("Nonce", nonce) + .header("CurTime", curTime) + .header("CheckSum", checkSum) + .body(JSONUtil.toJsonStr(body)) + .execute()){ + JSONObject res = JSONUtil.parseObj(response.body()); + return this.getResponse(res); + } } private SmsResponse getResponse(JSONObject jsonObject) { SmsResponse response = new SmsResponse(); - response.setSuccess(jsonObject.getInteger("code") <= 200); + response.setSuccess(jsonObject.getInt("code") <= 200); response.setData(jsonObject); return response; } diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/tencent/service/TencentSmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/tencent/service/TencentSmsImpl.java index 6792d167..6b18ff55 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/tencent/service/TencentSmsImpl.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/tencent/service/TencentSmsImpl.java @@ -1,6 +1,9 @@ package org.dromara.sms4j.tencent.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import com.jdcloud.sdk.utils.StringUtils; import lombok.extern.slf4j.Slf4j; import org.dromara.sms4j.api.AbstractSmsBlend; @@ -85,29 +88,26 @@ public class TencentSmsImpl extends AbstractSmsBlend { log.error("tencent send message error", e); throw new SmsBlendException(e.getMessage()); } - Map headsMap = TencentUtils.generateHeadsMap(signature, timestamp, tencentSmsConfig.getAction(), + Map headsMap = TencentUtils.generateHeadsMap(signature, timestamp, tencentSmsConfig.getAction(), tencentSmsConfig.getVersion(), tencentSmsConfig.getTerritory(), tencentSmsConfig.getRequestUrl()); Map requestBody = TencentUtils.generateRequestBody(phones, tencentSmsConfig.getSdkAppId(), tencentSmsConfig.getSignature(), templateId, messages); - SmsResponse smsResponse = new SmsResponse(); String url = Constant.HTTPS_PREFIX + tencentSmsConfig.getRequestUrl(); - http.post(url) - .addHeader(headsMap) - .addBody(requestBody) - .onSuccess(((data, req, res) -> { - JSONObject jsonBody = res.get(JSONObject.class); - JSONObject response = jsonBody.getJSONObject("Response"); - String error = response.getStr("Error"); - smsResponse.setSuccess(StringUtils.isBlank(error)); - smsResponse.setData(jsonBody); - })) - .onError((ex, req, res) -> { - JSONObject jsonBody = res.get(JSONObject.class); - smsResponse.setSuccess(false); - smsResponse.setData(jsonBody); - }) - .execute(); - return smsResponse; + try(HttpResponse response = HttpRequest.post(url) + .addHeaders(headsMap) + .body(JSONUtil.toJsonStr(requestBody)) + .execute()){ + JSONObject body = JSONUtil.parseObj(response.body()); + return this.getResponse(body); + } } + private SmsResponse getResponse(JSONObject resJson) { + SmsResponse smsResponse = new SmsResponse(); + JSONObject response = resJson.getJSONObject("Response"); + String error = response.getStr("Error"); + smsResponse.setSuccess(StringUtils.isBlank(error)); + smsResponse.setData(resJson); + return smsResponse; + } } \ No newline at end of file diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/tencent/utils/TencentUtils.java b/sms4j-provider/src/main/java/org/dromara/sms4j/tencent/utils/TencentUtils.java index a2fb38ea..1fdbd79b 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/tencent/utils/TencentUtils.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/tencent/utils/TencentUtils.java @@ -92,9 +92,9 @@ public class TencentUtils { * @param territory 服务器地区 * @param requestUrl 请求地址 */ - public static Map generateHeadsMap(String authorization, String timestamp, String action, + public static Map generateHeadsMap(String authorization, String timestamp, String action, String version, String territory, String requestUrl) { - Map headers = new HashMap<>(); + Map headers = new HashMap<>(); headers.put("Authorization", authorization); headers.put("Content-Type", CT_JSON); headers.put("Host", requestUrl); diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/unisms/core/UniClient.java b/sms4j-provider/src/main/java/org/dromara/sms4j/unisms/core/UniClient.java index cdc4c811..b5500ed5 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/unisms/core/UniClient.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/unisms/core/UniClient.java @@ -3,10 +3,10 @@ package org.dromara.sms4j.unisms.core; import cn.hutool.core.codec.Base64; import cn.hutool.crypto.digest.HMac; import cn.hutool.crypto.digest.HmacAlgorithm; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONUtil; -import com.dtflys.forest.config.ForestConfiguration; import org.dromara.sms4j.comm.exception.SmsBlendException; -import org.dromara.sms4j.comm.factory.BeanFactory; import java.util.Comparator; import java.util.Date; @@ -20,8 +20,6 @@ import java.util.UUID; public class UniClient { public static final String USER_AGENT = "uni-java-sdk" + "/" + Uni.VERSION; - private final ForestConfiguration http = BeanFactory.getForestConfiguration(); - private final String accessKeyId; private final String accessKeySecret; private final String endpoint; @@ -81,27 +79,18 @@ public class UniClient { * @author :Wind */ public UniResponse request(final String action, final Map data) throws SmsBlendException { - Map query = new HashMap(); - query.put("action", action); - query.put("accessKeyId", this.accessKeyId); - Map headers = new HashMap<>(); headers.put("User-Agent", USER_AGENT); headers.put("Content-Type", "application/json;charset=utf-8"); headers.put("Accept", "application/json"); - String str = http.post(this.endpoint) - .addHeader(headers) - .addQuery(this.sign(query)) - .addBody(JSONUtil.toJsonStr(data)) - .successWhen(((req, res) -> { - return res.noException() && // 请求过程没有异常 - res.statusIsNot(500); // 不能是 500 - })) - .onError((ex, req, res) -> { - throw new SmsBlendException(ex.getMessage()); - }) - .executeAsString(); - return new UniResponse(JSONUtil.parseObj(str)); + + String url = this.endpoint + "?action=" + action + "&accessKeyId=" + this.accessKeyId; + try(HttpResponse response = HttpRequest.post(url) + .addHeaders(headers) + .body(JSONUtil.toJsonStr(data)) + .execute()){ + return new UniResponse(JSONUtil.parseObj(response.body())); + } } public static class Builder { diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/yunpian/service/YunPianSmsImpl.java b/sms4j-provider/src/main/java/org/dromara/sms4j/yunpian/service/YunPianSmsImpl.java index 5a2ecfb5..3bc14351 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/yunpian/service/YunPianSmsImpl.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/yunpian/service/YunPianSmsImpl.java @@ -1,6 +1,9 @@ package org.dromara.sms4j.yunpian.service; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import org.dromara.sms4j.api.AbstractSmsBlend; import org.dromara.sms4j.api.entity.SmsResponse; import org.dromara.sms4j.comm.annotation.Restricted; @@ -15,7 +18,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicReference; /** * @author wind @@ -29,7 +31,7 @@ public class YunPianSmsImpl extends AbstractSmsBlend { private final YunpianConfig config; - private static SmsResponse getSmsResponse(JSONObject execute) { + private static SmsResponse getResponse(JSONObject execute) { SmsResponse smsResponse = new SmsResponse(); if (execute == null) { smsResponse.setSuccess(false); @@ -111,14 +113,12 @@ public class YunPianSmsImpl extends AbstractSmsBlend { private SmsResponse getSendResponse(Map body) { Map headers = getHeaders(); - AtomicReference smsResponse = new AtomicReference<>(); - http.post(Constant.YUNPIAN_URL + "/sms/tpl_single_send.json") - .addHeader(headers) - .addBody(body) - .onSuccess(((data, req, res) -> smsResponse.set(getSmsResponse(res.get(JSONObject.class))))) - .onError((ex, req, res) -> smsResponse.set(getSmsResponse(res.get(JSONObject.class)))) - .execute(); - - return smsResponse.get(); + try(HttpResponse response = HttpRequest.post(Constant.YUNPIAN_URL + "/sms/tpl_single_send.json") + .addHeaders(headers) + .body(JSONUtil.toJsonStr(body)) + .execute()){ + JSONObject res = JSONUtil.parseObj(response.body()); + return getResponse(res); + } } } 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 68c9af81..8c3098d4 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 @@ -5,6 +5,8 @@ import cn.hutool.core.collection.ListUtil; import cn.hutool.core.text.StrPool; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.SecureUtil; +import cn.hutool.http.HttpRequest; +import cn.hutool.http.HttpResponse; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -22,7 +24,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Executor; -import java.util.concurrent.atomic.AtomicReference; /** *

助通短信发送 @@ -107,7 +108,7 @@ public class ZhutongSmsImpl extends AbstractSmsBlend { } - String urls = requestUrl + "v2/sendSms"; + String url = requestUrl + "v2/sendSms"; long tKey = System.currentTimeMillis() / 1000; Map json = new HashMap<>(5); //账号 @@ -121,15 +122,13 @@ public class ZhutongSmsImpl extends AbstractSmsBlend { //内容 json.put("content", content); - AtomicReference reference = new AtomicReference<>(); - http.post(urls) - .addHeader("Content-Type", Constant.APPLICATION_JSON_UTF8) - .addBody(JSONUtil.toJsonStr(json)) - .onSuccess(((data, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class))))) - .onError((ex, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class)))) - .execute(); - log.info("助通短信 URL={} json={} 响应值为={}", urls, json, reference.get()); - return reference.get(); + try(HttpResponse response = HttpRequest.post(url) + .header("Content-Type", Constant.APPLICATION_JSON_UTF8) + .body(JSONUtil.toJsonStr(json)) + .execute()){ + JSONObject body = JSONUtil.parseObj(response.body()); + return this.getResponse(body); + } } protected SmsResponse getSmsResponse(String mobile, String content) { @@ -161,49 +160,47 @@ public class ZhutongSmsImpl extends AbstractSmsBlend { } //地址 - String urls = requestUrl + "v2/sendSmsTp"; + String url = requestUrl + "v2/sendSmsTp"; //请求入参 JSONObject requestJson = new JSONObject(); //账号 - requestJson.put("username", username); + requestJson.set("username", username); //tKey long tKey = System.currentTimeMillis() / 1000; - requestJson.put("tKey", tKey); + requestJson.set("tKey", tKey); //明文密码 - requestJson.put("password", SecureUtil.md5(SecureUtil.md5(password) + tKey)); + requestJson.set("password", SecureUtil.md5(SecureUtil.md5(password) + tKey)); //模板ID - requestJson.put("tpId", templateId); + requestJson.set("tpId", templateId); //签名 - requestJson.put("signature", signature); + requestJson.set("signature", signature); //扩展号 - requestJson.put("ext", ""); + requestJson.set("ext", ""); //自定义参数 - requestJson.put("extend", ""); + requestJson.set("extend", ""); //发送记录集合 JSONArray records = new JSONArray(); { for (String mobile : phones) { JSONObject record = new JSONObject(); //手机号 - record.put("mobile", mobile); + record.set("mobile", mobile); //替换变量 JSONObject param = new JSONObject(); param.putAll(messages); - record.put("tpContent", param); + record.set("tpContent", param); records.add(record); } } - requestJson.put("records", records); + requestJson.set("records", records); - AtomicReference reference = new AtomicReference<>(); - http.post(urls) - .addHeader("Content-Type", Constant.APPLICATION_JSON_UTF8) - .addBody(requestJson) - .onSuccess(((data, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class))))) - .onError((ex, req, res) -> reference.set(this.getResponse(res.get(JSONObject.class)))) - .execute(); - log.info("助通短信 URL={} json={} 响应值为={}", urls, requestJson, reference.get()); - return reference.get(); + try(HttpResponse response = HttpRequest.post(url) + .header("Content-Type", Constant.APPLICATION_JSON_UTF8) + .body(requestJson.toString()) + .execute()){ + JSONObject body = JSONUtil.parseObj(response.body()); + return this.getResponse(body); + } } protected SmsResponse getSmsResponseTemplate(String templateId, String mobile, LinkedHashMap content) {