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 0d6f6055..7b65d83d 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 @@ -9,7 +9,7 @@ package org.dromara.sms4j.comm.constant; **/ public abstract class Constant { /** 项目版本号*/ - public static final String VERSION = "V 2.2.1"; + public static final String VERSION = "V 3.0.0"; /** * 用于格式化鉴权头域,给"Authorization"参数赋值 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 10aebdd3..7edf3002 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 @@ -93,24 +93,27 @@ public class NeteaseSmsImpl extends AbstractSmsBlend { return getSmsResponse(config.getTemplateUrl(), phones, messageStr, templateId); } - private SmsResponse getSmsResponse(String requestUrl, List phones, String message, String templateId) { + private SmsResponse getSmsResponse(String requestUrl, List phones, String message, String templateId) { String nonce = IdUtil.fastSimpleUUID(); String curTime = String.valueOf(DateUtil.currentSeconds()); String checkSum = NeteaseUtils.getCheckSum(config.getAccessKeySecret(), nonce, curTime); - Map body = new LinkedHashMap<>(4); + Map body = new LinkedHashMap<>(4); body.put("templateid", templateId); JSONArray jsonArray = JSONUtil.createArray(); + JSONArray messageArray = JSONUtil.createArray(); + messageArray.add(message); jsonArray.addAll(phones); body.put("mobiles", jsonArray.toString()); - body.put("params", message); - body.put("needUp", config.getNeedUp()); + body.put("params", messageArray.toString()); + body.put("needUp", config.getNeedUp().toString()); + String paramStr = NeteaseUtils.generateParamBody(body); 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)) + .body(paramStr) .execute()){ JSONObject res = JSONUtil.parseObj(response.body()); return this.getResponse(res); diff --git a/sms4j-provider/src/main/java/org/dromara/sms4j/netease/utils/NeteaseUtils.java b/sms4j-provider/src/main/java/org/dromara/sms4j/netease/utils/NeteaseUtils.java index a29b5eb5..ba6c544e 100644 --- a/sms4j-provider/src/main/java/org/dromara/sms4j/netease/utils/NeteaseUtils.java +++ b/sms4j-provider/src/main/java/org/dromara/sms4j/netease/utils/NeteaseUtils.java @@ -1,8 +1,18 @@ package org.dromara.sms4j.netease.utils; +import cn.hutool.json.JSONArray; +import cn.hutool.json.JSONUtil; +import org.dromara.sms4j.aliyun.config.AlibabaConfig; import org.dromara.sms4j.comm.exception.SmsBlendException; +import org.dromara.sms4j.netease.config.NeteaseConfig; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * Created with IntelliJ IDEA. @@ -46,6 +56,42 @@ public class NeteaseUtils { } return buf.toString(); } + + /** + * url编码 + */ + private static String specialUrlEncode(String value) { + try { + return URLEncoder.encode(value, StandardCharsets.UTF_8.name()).replace("+", "%20") + .replace("*", "%2A").replace("%7E", "~"); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + + public static String generateParamBody(Map body) { + StringBuilder sortQueryString = new StringBuilder(); + for (String key : body.keySet()) { + sortQueryString.append("&").append(specialUrlEncode(key)).append("=") + .append(specialUrlEncode(body.get(key))); + } + return sortQueryString.substring(1); + } + + private static Map generateParamMap(NeteaseConfig neteaseConfig, List phone, String message, String templateId) { + Map paramMap = new HashMap<>(); + JSONArray messageArray = JSONUtil.createArray(); + messageArray.add(message); + JSONArray phoneArray = JSONUtil.createArray(); + phoneArray.add(phone); + paramMap.put("mobiles", phoneArray.toString()); + paramMap.put("SignName", neteaseConfig.getSignature()); + paramMap.put("params", messageArray.toString()); + paramMap.put("templateid", templateId); + paramMap.put("needUp", neteaseConfig.getNeedUp().toString()); + return paramMap; + } + private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; }