From 123e5ef9737360ee487a06f299363738302547cc Mon Sep 17 00:00:00 2001 From: ukid Date: Fri, 23 Oct 2015 14:33:32 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A5=A8=E6=8D=AE=E9=AA=8C=E8=AF=81=E6=96=B9?= =?UTF-8?q?=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../weixin/common/util/crypto/WxCryptUtil.java | 1 - .../java/me/chanjar/weixin/mp/api/WxMpService.java | 12 +++++++++++- .../me/chanjar/weixin/mp/api/WxMpServiceImpl.java | 8 ++++---- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java index 9be54b55..a9ebfc2c 100755 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/crypto/WxCryptUtil.java @@ -248,7 +248,6 @@ public class WxCryptUtil { } } toSign.append("key=" + signKey); - System.out.println(toSign.toString()); String sign = DigestUtils.md5Hex(toSign.toString()) .toUpperCase(); return sign; diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java index b583798e..b9c8d2fd 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpService.java @@ -11,7 +11,6 @@ import me.chanjar.weixin.mp.bean.result.*; import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; @@ -738,4 +737,15 @@ public interface WxMpService { * @return */ WxMpPayCallback getJSSDKCallbackData(String xmlData); + + /** + *
+     * 计算Map键值对是否和签名相符,
+     * 按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值对的 格式(即 key1=value1&key2=value2...)拼接成字符串
+     * 
+ * @param kvm + * @param signature + * @return + */ + public boolean checkJSSDKCallbackDataSignature(Map kvm, String signature); } diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java index da4252fd..2e4f1967 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpServiceImpl.java @@ -5,8 +5,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -76,7 +74,6 @@ import me.chanjar.weixin.mp.util.http.MaterialVoiceAndImageDownloadRequestExecut import me.chanjar.weixin.mp.util.http.QrCodeRequestExecutor; import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.http.Consts; import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; @@ -937,5 +934,8 @@ public class WxMpServiceImpl implements WxMpService { return new WxMpPayCallback(); } - + @Override + public boolean checkJSSDKCallbackDataSignature(Map kvm, String signature) { + return signature.equals(WxCryptUtil.createSign(kvm, wxMpConfigStorage.getPartnerKey())); + } }