- * 消息重复检查器 + * 消息重复检查器. * 微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次 **/ public interface WxMessageDuplicateChecker { /** + * 判断消息是否重复. *
+ * *
普通消息:关于重试的消息排重,推荐使用msgid排重。文档参考。
*事件消息:关于重试的消息排重,推荐使用FromUserName + CreateTime 排重。文档参考
- *+ * *
- * 官方文档完全没有写,参照公众号的方式排重。 - *
+ *
官方文档完全没有写,参照公众号的方式排重。
*或者可以采取更简单的方式,如果有MsgId就用MsgId排重,如果没有就用FromUserName+CreateTime排重
* * @param messageId messageId需要根据上面讲的方式构造 diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateChecker.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateChecker.java index 1281e2601..d8be08f44 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateChecker.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/api/WxMessageInMemoryDuplicateChecker.java @@ -6,46 +6,46 @@ import java.util.concurrent.atomic.AtomicBoolean; /** *- * 默认消息重复检查器 + * 默认消息重复检查器. * 将每个消息id保存在内存里,每隔5秒清理已经过期的消息id,每个消息id的过期时间是15秒 **/ public class WxMessageInMemoryDuplicateChecker implements WxMessageDuplicateChecker { /** - * 一个消息ID在内存的过期时间:15秒 + * 一个消息ID在内存的过期时间:15秒. */ private final Long timeToLive; /** - * 每隔多少周期检查消息ID是否过期:5秒 + * 每隔多少周期检查消息ID是否过期:5秒. */ private final Long clearPeriod; /** - * 消息id->消息时间戳的map + * 消息id->消息时间戳的map. */ private final ConcurrentHashMap
* 一个消息ID在内存的过期时间:15秒
* 每隔多少周期检查消息ID是否过期:5秒
*
*/
public WxMessageInMemoryDuplicateChecker() {
- this.timeToLive = 15 * 1000l;
- this.clearPeriod = 5 * 1000l;
+ this.timeToLive = 15 * 1000L;
+ this.clearPeriod = 5 * 1000L;
}
/**
- * WxMsgIdInMemoryDuplicateChecker构造函数
+ * 构造方法.
*
* @param timeToLive 一个消息ID在内存的过期时间:毫秒
* @param clearPeriod 每隔多少周期检查消息ID是否过期:毫秒
@@ -66,7 +66,8 @@ public class WxMessageInMemoryDuplicateChecker implements WxMessageDuplicateChec
while (true) {
Thread.sleep(WxMessageInMemoryDuplicateChecker.this.clearPeriod);
Long now = System.currentTimeMillis();
- for (Map.Entry
- * 菜单的响应动作类型:
+ * 菜单的响应动作类型.
* view表示网页类型,
* click表示点击类型,
* miniprogram表示小程序类型
@@ -21,13 +21,13 @@ public class WxMenuButton implements Serializable {
private String type;
/**
- * 菜单标题,不超过16个字节,子菜单不超过60个字节
+ * 菜单标题,不超过16个字节,子菜单不超过60个字节.
*/
private String name;
/**
*
- * 菜单KEY值,用于消息接口推送,不超过128字节
+ * 菜单KEY值,用于消息接口推送,不超过128字节.
* click等点击类型必须
*
*/
@@ -35,7 +35,8 @@ public class WxMenuButton implements Serializable {
/**
*
- * 网页链接,用户点击菜单可打开链接,不超过1024字节。type为miniprogram时,不支持小程序的老版本客户端将打开本url。
+ * 网页链接.
+ * 用户点击菜单可打开链接,不超过1024字节。type为miniprogram时,不支持小程序的老版本客户端将打开本url。
* view、miniprogram类型必须
*
*/
@@ -43,7 +44,7 @@ public class WxMenuButton implements Serializable {
/**
*
- * 调用新增永久素材接口返回的合法media_id
+ * 调用新增永久素材接口返回的合法media_id.
* media_id类型和view_limited类型必须
*
*/
@@ -52,7 +53,7 @@ public class WxMenuButton implements Serializable {
/**
*
- * 小程序的appid
+ * 小程序的appid.
* miniprogram类型必须
*
*/
@@ -61,7 +62,7 @@ public class WxMenuButton implements Serializable {
/**
*
- * 小程序的页面路径
+ * 小程序的页面路径.
* miniprogram类型必须
*
*/
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/menu/WxMenuRule.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/menu/WxMenuRule.java
index efc42fbb6..dffae9488 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/menu/WxMenuRule.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/menu/WxMenuRule.java
@@ -9,7 +9,7 @@ public class WxMenuRule implements Serializable {
private static final long serialVersionUID = -4587181819499286670L;
/**
- * 变态的微信接口,反序列化时这里反人类的使用和序列化时不一样的名字
+ * 变态的微信接口,反序列化时这里反人类的使用和序列化时不一样的名字.
*/
@SerializedName(value = "tag_id", alternate = "group_id")
private String tagId;
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxError.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxError.java
index 46c0ae89b..809d015ab 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxError.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxError.java
@@ -5,7 +5,7 @@ import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import java.io.Serializable;
/**
- * 微信错误码说明,请阅读: 全局返回码说明
+ * 微信错误码说明,请阅读: 全局返回码说明.
*
* @author Daniel Qian
*/
@@ -73,6 +73,9 @@ public class WxError implements Serializable {
return this;
}
+ /**
+ * 构造器方法.
+ */
public WxError build() {
WxError wxError = new WxError();
wxError.setErrorCode(this.errorCode);
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpClientBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpClientBuilder.java
index 939b62478..fcd56c48a 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpClientBuilder.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpClientBuilder.java
@@ -4,51 +4,41 @@ import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.CloseableHttpClient;
/**
- * httpclient build interface
+ * httpclient build interface.
*
* @author kakotor
*/
public interface ApacheHttpClientBuilder {
/**
- * 构建httpclient实例
+ * 构建httpclient实例.
*
* @return new instance of CloseableHttpClient
*/
CloseableHttpClient build();
/**
- * 代理服务器地址
- *
- * @param httpProxyHost
+ * 代理服务器地址.
*/
ApacheHttpClientBuilder httpProxyHost(String httpProxyHost);
/**
- * 代理服务器端口
- *
- * @param httpProxyPort
+ * 代理服务器端口.
*/
ApacheHttpClientBuilder httpProxyPort(int httpProxyPort);
/**
- * 代理服务器用户名
- *
- * @param httpProxyUsername
+ * 代理服务器用户名.
*/
ApacheHttpClientBuilder httpProxyUsername(String httpProxyUsername);
/**
- * 代理服务器密码
- *
- * @param httpProxyPassword
+ * 代理服务器密码.
*/
ApacheHttpClientBuilder httpProxyPassword(String httpProxyPassword);
/**
- * ssl连接socket工厂
- *
- * @param sslConnectionSocketFactory
+ * ssl连接socket工厂.
*/
ApacheHttpClientBuilder sslConnectionSocketFactory(SSLConnectionSocketFactory sslConnectionSocketFactory);
}
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpDnsClientBuilder.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpDnsClientBuilder.java
index d3e5a1c16..b99b09fb8 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpDnsClientBuilder.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheHttpDnsClientBuilder.java
@@ -29,9 +29,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
/**
- * httpclient 连接管理器 自带DNS解析
- *
- * 大部分代码拷贝自:DefaultApacheHttpClientBuilder
+ * httpclient 连接管理器 自带DNS解析.
+ *
大部分代码拷贝自:DefaultApacheHttpClientBuilder
*
* @author Andy.Huo
*/
@@ -64,7 +63,7 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
private String httpProxyPassword;
/**
- * 闲置连接监控线程
+ * 闲置连接监控线程.
*/
private IdleConnectionMonitorThread idleConnectionMonitorThread;
private HttpClientBuilder httpClientBuilder;
@@ -162,7 +161,7 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
}
/**
- * 每路的最大链接数,默认10
+ * 每路的最大链接数,默认10.
*
* @param maxConnPerHost 每路的最大链接数,默认10
*/
@@ -171,7 +170,7 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
}
/**
- * 最大总连接数,默认50
+ * 最大总连接数,默认50.
*
* @param maxTotalConn 最大总连接数,默认50
*/
@@ -180,7 +179,7 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
}
/**
- * 自定义httpclient的User Agent
+ * 自定义httpclient的User Agent.
*
* @param userAgent User Agent
*/
@@ -196,9 +195,12 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
if (prepared.get()) {
return;
}
- Registry registry = RegistryBuilder.create()
- .register("http", this.plainConnectionSocketFactory).register("https", this.sslConnectionSocketFactory)
- .build();
+
+ Registry registry =
+ RegistryBuilder.create()
+ .register("http", this.plainConnectionSocketFactory)
+ .register("https", this.sslConnectionSocketFactory)
+ .build();
@SuppressWarnings("resource")
PoolingHttpClientConnectionManager connectionManager;
@@ -219,8 +221,8 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
connectionManager
.setDefaultSocketConfig(SocketConfig.copy(SocketConfig.DEFAULT).setSoTimeout(this.soTimeout).build());
- this.idleConnectionMonitorThread = new IdleConnectionMonitorThread(connectionManager, this.idleConnTimeout,
- this.checkWaitTime);
+ this.idleConnectionMonitorThread = new IdleConnectionMonitorThread(
+ connectionManager, this.idleConnTimeout, this.checkWaitTime);
this.idleConnectionMonitorThread.setDaemon(true);
this.idleConnectionMonitorThread.start();
@@ -234,8 +236,8 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
if (StringUtils.isNotBlank(this.httpProxyHost) && StringUtils.isNotBlank(this.httpProxyUsername)) {
// 使用代理服务器 需要用户认证的代理服务器
CredentialsProvider provider = new BasicCredentialsProvider();
- provider.setCredentials(new AuthScope(this.httpProxyHost, this.httpProxyPort),
- new UsernamePasswordCredentials(this.httpProxyUsername, this.httpProxyPassword));
+ provider.setCredentials(new AuthScope(this.httpProxyHost, this.httpProxyPort)
+ , new UsernamePasswordCredentials(this.httpProxyUsername, this.httpProxyPassword));
this.httpClientBuilder.setDefaultCredentialsProvider(provider);
}
@@ -267,8 +269,10 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
private final int checkWaitTime;
private volatile boolean shutdown;
- public IdleConnectionMonitorThread(HttpClientConnectionManager connMgr, int idleConnTimeout,
- int checkWaitTime) {
+ /**
+ * 构造方法.
+ */
+ public IdleConnectionMonitorThread(HttpClientConnectionManager connMgr, int idleConnTimeout, int checkWaitTime) {
super("IdleConnectionMonitorThread");
this.connMgr = connMgr;
this.idleConnTimeout = idleConnTimeout;
@@ -289,12 +293,18 @@ public class ApacheHttpDnsClientBuilder implements ApacheHttpClientBuilder {
}
}
+ /**
+ * 触发.
+ */
public void trigger() {
synchronized (this) {
notifyAll();
}
}
+ /**
+ * 关闭.
+ */
public void shutdown() {
this.shutdown = true;
synchronized (this) {
diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java
index 2eb71b52f..80f819929 100644
--- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java
+++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMediaDownloadRequestExecutor.java
@@ -2,8 +2,8 @@ package me.chanjar.weixin.common.util.http.okhttp;
import me.chanjar.weixin.common.bean.result.WxError;
import me.chanjar.weixin.common.exception.WxErrorException;
-import me.chanjar.weixin.common.util.http.HttpResponseProxy;
import me.chanjar.weixin.common.util.http.BaseMediaDownloadRequestExecutor;
+import me.chanjar.weixin.common.util.http.HttpResponseProxy;
import me.chanjar.weixin.common.util.http.RequestHttp;
import okhttp3.OkHttpClient;
import okhttp3.Request;
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java
index c86ed1ff6..e08ef4df6 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java
@@ -28,7 +28,7 @@ public class XStreamTransformer {
}
/**
- * 注册扩展消息的解析器
+ * 注册扩展消息的解析器.
*
* @param clz 类型
* @param xStream xml解析器
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/AbstractWxMaQrcodeWrapper.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/AbstractWxMaQrcodeWrapper.java
index b4ad75179..f329dd30e 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/AbstractWxMaQrcodeWrapper.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/AbstractWxMaQrcodeWrapper.java
@@ -3,7 +3,7 @@ package cn.binarywang.wx.miniapp.bean;
import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
/**
- * 微信二维码(小程序码)包装器
+ * 微信二维码(小程序码)包装器.
*
* @author Element
*/
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/BaseBuilder.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/BaseBuilder.java
index 70d7cf4b7..c353534c3 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/BaseBuilder.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/builder/BaseBuilder.java
@@ -15,6 +15,9 @@ public class BaseBuilder {
return (T) this;
}
+ /**
+ * 构造器方法.
+ */
public WxMaKefuMessage build() {
WxMaKefuMessage m = new WxMaKefuMessage();
m.setMsgType(this.msgType);
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java
index 24d9e99b7..9b35df895 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/http/QrCodeRequestExecutor.java
@@ -36,11 +36,9 @@ public class QrCodeRequestExecutor implements RequestExecutor 0
- && ContentType.APPLICATION_JSON.getMimeType()
- .equals(ContentType.parse(contentTypeHeader[0].getValue()).getMimeType())) {
+ && ContentType.APPLICATION_JSON.getMimeType()
+ .equals(ContentType.parse(contentTypeHeader[0].getValue()).getMimeType())) {
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
throw new WxErrorException(WxError.fromJson(responseContent));
}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/xml/XStreamTransformer.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/xml/XStreamTransformer.java
index 8c6ec52ad..578bf68c7 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/xml/XStreamTransformer.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/xml/XStreamTransformer.java
@@ -18,7 +18,7 @@ public class XStreamTransformer {
}
/**
- * xml -> pojo
+ * xml -> pojo.
*/
@SuppressWarnings("unchecked")
public static T fromXml(Class clazz, String xml) {
@@ -33,14 +33,14 @@ public class XStreamTransformer {
}
/**
- * pojo -> xml
+ * pojo -> xml.
*/
public static String toXml(Class clazz, T object) {
return CLASS_2_XSTREAM_INSTANCE.get(clazz).toXML(object);
}
/**
- * 注册扩展消息的解析器
+ * 注册扩展消息的解析器.
*
* @param clz 类型
* @param xStream xml解析器
@@ -50,7 +50,7 @@ public class XStreamTransformer {
}
/**
- * 会自动注册该类及其子类
+ * 会自动注册该类及其子类.
*
* @param clz 要注册的类
*/
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/AbstractDeviceBean.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/AbstractDeviceBean.java
index 5aaf5ea5e..d49999c50 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/AbstractDeviceBean.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/device/AbstractDeviceBean.java
@@ -5,6 +5,8 @@ import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import java.io.Serializable;
/**
+ * 设备抽象类.
+ *
* @author keungtung
* @date 14/12/2016
*/
diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/apache/ApacheMaterialNewsInfoRequestExecutor.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/apache/ApacheMaterialNewsInfoRequestExecutor.java
index 5298160f3..fe8dc580d 100644
--- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/apache/ApacheMaterialNewsInfoRequestExecutor.java
+++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/http/apache/ApacheMaterialNewsInfoRequestExecutor.java
@@ -22,9 +22,13 @@ import java.util.HashMap;
import java.util.Map;
/**
- * Created by ecoolper on 2017/5/5.
+ * httpclient 实现的素材请求执行器.
+ *
+ * @author ecoolper
+ * @date 2017/5/5
*/
-public class ApacheMaterialNewsInfoRequestExecutor extends MaterialNewsInfoRequestExecutor {
+public class ApacheMaterialNewsInfoRequestExecutor
+ extends MaterialNewsInfoRequestExecutor {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
public ApacheMaterialNewsInfoRequestExecutor(RequestHttp requestHttp) {
diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java
index 992844757..efb9d8560 100644
--- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java
+++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/util/SignUtils.java
@@ -19,16 +19,17 @@ import java.util.TreeMap;
/**
*
- * 签名相关工具类
+ * 签名相关工具类.
* Created by Binary Wang on 2017-3-23.
- * @author binarywang(Binary Wang)
*
+ *
+ * @author binarywang(Binary Wang)
*/
public class SignUtils {
private static final Logger log = LoggerFactory.getLogger(SignUtils.class);
/**
- * 请参考并使用 {@link #createSign(Object, String, String, boolean)}
+ * 请参考并使用 {@link #createSign(Object, String, String, boolean)}.
*/
@Deprecated
public static String createSign(Object xmlBean, String signKey) {
@@ -36,7 +37,7 @@ public class SignUtils {
}
/**
- * 请参考并使用 {@link #createSign(Map, String, String, boolean)}
+ * 请参考并使用 {@link #createSign(Map, String, String, boolean)}.
*/
@Deprecated
public static String createSign(Map params, String signKey) {
@@ -44,7 +45,7 @@ public class SignUtils {
}
/**
- * 微信支付签名算法(详见:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3)
+ * 微信支付签名算法(详见:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3).
*
* @param xmlBean Bean里的属性如果存在XML注解,则使用其作为key,否则使用变量名
* @param signType 签名类型,如果为空,则默认为MD5
@@ -57,27 +58,25 @@ public class SignUtils {
}
/**
- * 微信支付签名算法(详见:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3)
+ * 微信支付签名算法(详见:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=4_3).
*
- * @param params 参数信息
- * @param signType 签名类型,如果为空,则默认为MD5
- * @param signKey 签名Key
- * @param isIgnoreSignType 签名时,是否忽略signType
+ * @param params 参数信息
+ * @param signType 签名类型,如果为空,则默认为MD5
+ * @param signKey 签名Key
+ * @param ignoreSignType 签名时,是否忽略signType
* @return 签名字符串
*/
- public static String createSign(Map params, String signType, String signKey, boolean isIgnoreSignType) {
+ public static String createSign(Map params, String signType, String signKey, boolean ignoreSignType) {
SortedMap sortedMap = new TreeMap<>(params);
StringBuilder toSign = new StringBuilder();
for (String key : sortedMap.keySet()) {
String value = params.get(key);
boolean shouldSign = false;
- if (isIgnoreSignType && "sign_type".equals(key)) {
+ if (ignoreSignType && "sign_type".equals(key)) {
shouldSign = false;
} else if (StringUtils.isNotEmpty(value)
- && !Lists.newArrayList(
- "sign", "key", "xmlString", "xmlDoc", "couponList").contains(key)
- ) {
+ && !Lists.newArrayList("sign", "key", "xmlString", "xmlDoc", "couponList").contains(key)) {
shouldSign = true;
}
@@ -88,18 +87,18 @@ public class SignUtils {
toSign.append("key=").append(signKey);
if (SignType.HMAC_SHA256.equals(signType)) {
- return createHMACSha256Sign(toSign.toString(), signKey);
+ return createHmacSha256Sign(toSign.toString(), signKey);
} else {
return DigestUtils.md5Hex(toSign.toString()).toUpperCase();
}
}
- private static String createHMACSha256Sign(String message, String key) {
+ private static String createHmacSha256Sign(String message, String key) {
try {
- Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
+ Mac sha256 = Mac.getInstance("HmacSHA256");
SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "HmacSHA256");
- hmacSHA256.init(secretKeySpec);
- byte[] bytes = hmacSHA256.doFinal(message.getBytes());
+ sha256.init(secretKeySpec);
+ byte[] bytes = sha256.doFinal(message.getBytes());
return Hex.encodeHexString(bytes).toUpperCase();
} catch (NoSuchAlgorithmException | InvalidKeyException e) {
log.error(e.getMessage(), e);
@@ -109,7 +108,7 @@ public class SignUtils {
}
/**
- * 校验签名是否正确
+ * 校验签名是否正确.
*
* @param xmlBean Bean需要标记有XML注解
* @param signType 签名类型,如果为空,则默认为MD5
@@ -121,7 +120,7 @@ public class SignUtils {
}
/**
- * 校验签名是否正确
+ * 校验签名是否正确.
*
* @param params 需要校验的参数Map
* @param signType 签名类型,如果为空,则默认为MD5
diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceAbstractImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceAbstractImplTest.java
index 84a9156ba..9c293103b 100644
--- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceAbstractImplTest.java
+++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/WxPayServiceAbstractImplTest.java
@@ -2,6 +2,7 @@ package com.github.binarywang.wxpay.service.impl;
import com.github.binarywang.utils.qrcode.QrcodeUtils;
import com.github.binarywang.wxpay.bean.coupon.*;
+import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.order.WxPayAppOrderResult;
import com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult;
import com.github.binarywang.wxpay.bean.order.WxPayNativeOrderResult;
@@ -398,9 +399,43 @@ public class WxPayServiceAbstractImplTest {
this.logger.info(result);
}
+ /**
+ * @see {@link com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResultTest}
+ * @throws Exception
+ */
@Test
public void testParseOrderNotifyResult() throws Exception {
- // 请参考com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResultTest里的单元测试
+ // 请参考com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResultTest 里的单元测试
+
+ String xmlString = "\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " 1 \n" +
+ " \n" +
+ " \n" +
+ " 2 \n" +
+ " \n" +
+ " 10000 \n" +
+ " 100 \n" +
+ " \n" +
+ " 10001 \n" +
+ " 200 \n" +
+ " ";
+
+ WxPayOrderNotifyResult result = this.payService.parseOrderNotifyResult(xmlString);
+ System.out.println(result);
}
@Test