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<String, String>(), 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<String, String>(), 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;
|
}
|
}
|
}
|