cy
2022-06-27 161509b9f823511cf33041caaf25ce726999e39b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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;
     }
    }
}