修正toJoinString可能签名错误的bug

This commit is contained in:
jinyu 2015-12-28 16:41:53 +08:00
parent d8ca042894
commit 92a847ecac
3 changed files with 17 additions and 11 deletions

View File

@ -3,7 +3,7 @@ package com.foxinmy.weixin4j.jssdk;
/**
* JSSDK接口列表
*
* @className JSSDKAPIs
* @className JSSDKAPI
* @author jy
* @date 2015年12月23日
* @since JDK 1.7

View File

@ -111,7 +111,7 @@ public class JSSDKConfigurator {
signMap.put("jsapi_ticket", this.ticketTokenHolder.getAccessToken());
signMap.put("url", url);
String sign = DigestUtil.SHA1(MapUtil
.toJoinString(signMap, false, true));
.toJoinString(signMap, false, false));
if (StringUtil.isBlank(config.getString("appId"))) {
config.put("appId", Weixin4jConfigUtil.getWeixinAccount().getId());
}
@ -122,9 +122,20 @@ public class JSSDKConfigurator {
throw new WeixinException("jsapilist not be empty");
}
config.put("timestamp", timestamp);
config.put("noncestr", noncestr);
config.put("nonceStr", noncestr);
config.put("signature", sign);
config.put("jsApiList", apis.toArray());
return config.toJSONString();
}
public static void main(String[] args){
Map<String, String> signMap = new HashMap<String, String>();
signMap.put("timestamp", "1451291129");
signMap.put("noncestr", "FXlt1mmwNrU30AIGGNrdLcdO");
signMap.put("jsapi_ticket", "kgt8ON7yVITDhtdwci0qeQdDHdx7JYipird9HNRuaHAIXFpvYh0mz9vuWOjdZb8a3ftvHZKfqcLzrx_pTFOZ3Q");
signMap.put("url", "http://wx.jdxg.doubimeizhi.com/apprise/share");
String sign = DigestUtil.SHA1(MapUtil
.toJoinString(signMap, false, false));
System.err.println(sign);
}
}

View File

@ -2,7 +2,7 @@ package com.foxinmy.weixin4j.util;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
@ -36,13 +36,7 @@ public class MapUtil {
*/
public static String toJoinString(Object object, boolean encoder,
boolean lowerCase, Map<String, String> extra) {
Map<String, String> map = new TreeMap<String, String>(
new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
Map<String, String> map = new HashMap<String, String>();
JSONObject obj = null;
if (object instanceof String) {
obj = JSONObject.parseObject(object.toString());
@ -72,6 +66,7 @@ public class MapUtil {
public static String toJoinString(Map<String, String> map, boolean encoder,
boolean lowerCase) {
map.remove("sign");
map = new TreeMap<String, String>(map);
StringBuilder sb = new StringBuilder();
Set<Map.Entry<String, String>> set = map.entrySet();
try {