From a4c6bf64d60b118b09953edc9c039cccb760f7d5 Mon Sep 17 00:00:00 2001 From: Bleachtred Date: Mon, 15 May 2023 07:05:31 +0000 Subject: [PATCH] =?UTF-8?q?!31=20fix=20=E4=BF=AE=E5=A4=8D=E9=98=BF?= =?UTF-8?q?=E9=87=8C=E4=BA=91=E7=9F=AD=E4=BF=A1=E7=AD=BE=E5=90=8D=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E3=80=81=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97=E4=B8=BA?= =?UTF-8?q?Null=E9=97=AE=E9=A2=98=EF=BC=8C=E5=B9=B6=E4=BC=98=E5=8C=96javax?= =?UTF-8?q?=E5=8A=A0=E5=AF=86=E5=8C=85=20*=20fix=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E9=98=BF=E9=87=8C=E4=BA=91=E7=9F=AD=E4=BF=A1=E7=AD=BE=E5=90=8D?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E3=80=81=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E4=B8=BANull=E9=97=AE=E9=A2=98=EF=BC=8C=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96javax=E5=8A=A0=E5=AF=86=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sms4j/aliyun/service/AlibabaSmsImpl.java | 23 ++++++++++++++----- .../sms4j/aliyun/utils/AliyunUtils.java | 16 ++++++------- 2 files changed, 24 insertions(+), 15 deletions(-) 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 23f3578c..9efddcca 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,7 +1,6 @@ package org.dromara.sms4j.aliyun.service; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.dtflys.forest.config.ForestConfiguration; import lombok.extern.slf4j.Slf4j; import org.dromara.sms4j.aliyun.config.AlibabaConfig; @@ -16,9 +15,11 @@ import org.dromara.sms4j.comm.factory.BeanFactory; import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.TimerTask; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicReference; /** *

类名: AlibabaSmsImpl @@ -83,7 +84,7 @@ public class AlibabaSmsImpl implements SmsBlend { } private SmsResponse getSmsResponse(String phone, String message, String templateId) { - SmsResponse smsResponse = new SmsResponse(); + AtomicReference reference = new AtomicReference<>(); String requestUrl; String paramStr; try { @@ -98,14 +99,24 @@ public class AlibabaSmsImpl implements SmsBlend { .addHeader("Content-Type", "application/x-www-form-urlencoded") .addBody(paramStr) .onSuccess(((data, req, res) -> { - JSONObject jsonBody = res.get(JSONObject.class); - log.info(jsonBody.toJSONString()); + Map map = res.get(Map.class); + reference.set(getResponse(map)); })) .onError((ex, req, res) -> { - JSONObject jsonBody = res.get(JSONObject.class); - log.info(jsonBody.toJSONString()); + Map map = res.get(Map.class); + reference.set(getResponse(map)); }) .execute(); + return reference.get(); + } + + private static SmsResponse getResponse(Map map) { + SmsResponse smsResponse = new SmsResponse(); + smsResponse.setCode((String) map.get("Code")); + smsResponse.setMessage((String) map.get("Message")); + if ("OK".equals(smsResponse.getCode())){ + smsResponse.setBizId((String) map.get("BizId")); + } return smsResponse; } diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/aliyun/utils/AliyunUtils.java b/sms4j-provider/src/main/java/org/dromara/sms4j/aliyun/utils/AliyunUtils.java index 55af6c42..8d1a83fa 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/aliyun/utils/AliyunUtils.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/aliyun/utils/AliyunUtils.java @@ -1,10 +1,10 @@ package org.dromara.sms4j.aliyun.utils; -import cn.hutool.core.codec.Base64; +import cn.hutool.crypto.digest.HMac; +import cn.hutool.crypto.digest.HmacAlgorithm; import org.dromara.sms4j.aliyun.config.AlibabaConfig; import org.dromara.sms4j.comm.constant.Constant; -import javax.crypto.Mac; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.text.SimpleDateFormat; @@ -21,18 +21,18 @@ public class AliyunUtils { */ private static final String ALGORITHM = "HMAC-SHA1"; - private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); + private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); public static String generateSendSmsRequestUrl(AlibabaConfig alibabaConfig, String message, String phone, String templateId) throws Exception { // 这里一定要设置GMT时区 - sdf.setTimeZone(new SimpleTimeZone(0, "GMT")); + SDF.setTimeZone(new SimpleTimeZone(0, "GMT")); Map paras = new HashMap<>(); // 1. 公共请求参数 paras.put("SignatureMethod", ALGORITHM); paras.put("SignatureNonce", UUID.randomUUID().toString()); paras.put("AccessKeyId", alibabaConfig.getAccessKeyId()); paras.put("SignatureVersion", "1.0"); - paras.put("Timestamp", sdf.format(new Date())); + paras.put("Timestamp", SDF.format(new Date())); paras.put("Format", "JSON"); paras.put("Action", alibabaConfig.getAction()); paras.put("Version", alibabaConfig.getVersion()); @@ -80,10 +80,8 @@ public class AliyunUtils { * @param stringToSign 待生成签名的字符串 */ private static String sign(String accessSecret, String stringToSign) throws Exception { - Mac mac = Mac.getInstance("HmacSHA1"); - mac.init(new javax.crypto.spec.SecretKeySpec(accessSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA1")); - byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); - return Base64.encode(signData); + HMac hMac = new HMac(HmacAlgorithm.HmacSHA1, accessSecret.getBytes()); + return hMac.digestBase64(stringToSign,StandardCharsets.UTF_8, false); } /**