package cn.ksource.core.weixin.service; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import cn.ksource.core.util.ConvertUtil; import cn.ksource.core.util.HttpCharset; import cn.ksource.core.util.HttpUtil; import cn.ksource.core.util.JsonUtil; import cn.ksource.core.weixin.SHA1; import cn.ksource.core.weixin.WeiXinConstants; import cn.ksource.core.weixin.service.WeiXinCoreService; import cn.ksource.web.controller.wechat.util.WechatConstants; @Service public class WeiXinCoreServiceImpl implements WeiXinCoreService { Logger logger = Logger.getLogger(this.getClass()); @Cacheable(value="WeiXinCache") public String getAccess_token() { String url = WechatConstants.GET_TOKEN_URL; logger.info("获取token----------"+url); System.out.println("获取token----------"+url); String valString = HttpUtil.doGet(url, new HashMap(), HttpCharset.UTF8); Map map = JsonUtil.json2Map(valString); return ConvertUtil.obj2Str(map.get("access_token")); } @Cacheable(value="jsApiTicketCache") public String getJsApiTicket() { String url = WechatConstants.GET_JSAPITICKET_URL+getAccess_token(); String valString = HttpUtil.doGet(url, new HashMap(), HttpCharset.UTF8); Map map = JsonUtil.json2Map(valString); return ConvertUtil.obj2Str(map.get("ticket")); } @Override public boolean checkLegitimacy(HttpServletRequest request) { String token = WeiXinConstants.token; String signature = request.getParameter("signature"); String timestamp = request.getParameter("timestamp"); String nonce = request.getParameter("nonce"); String echostr = request.getParameter("echostr"); ArrayList list = new ArrayList(); list.add(token); list.add(timestamp); list.add(nonce); /* * 运用Collections的sort()方法对其进行排序 sort()方法需要传 连个参数,一个是需要进行排序的Collection 另一个是一个Comparator */ String resultStr = ""; Collections.sort(list, new SpellComparator()); for (int i = 0; i < list.size(); i++) { resultStr += list.get(i); } resultStr = new SHA1().getDigestOfString(resultStr.getBytes()); logger.info(request.getQueryString()); logger.info(resultStr); return StringUtils.equalsIgnoreCase(signature, resultStr); } /** * 排序比较器 */ class SpellComparator implements Comparator { public int compare(Object o1, Object o2) { try { // 取得比较对象的汉字编码,并将其转换成字符串 // String s1 = new String(o1.toString().getBytes("GB2312"), "ISO-8859-1"); // String s2 = new String(o2.toString().getBytes("GB2312"), "ISO-8859-1"); String s1 = o1.toString(); String s2 = o2.toString(); // 运用String类的 compareTo()方法对两对象进行比较 return s1.compareTo(s2); } catch (Exception e) { e.printStackTrace(); } return 0; } } }