private String genSign(String method, String url, Map<String, String> opt) {
        String gather = method + url;
        TreeMap<String, String> sortOpt = new TreeMap<String, String>(opt);
        NavigableSet<String> keySet = sortOpt.navigableKeySet();
        Iterator<String> it = keySet.iterator();
        while (it.hasNext()) {
            String key = it.next();
            String value = sortOpt.get(key);
            gather += key + "=" + value;
        }
        
        gather += secretKey;
        
        logger.info("sign source content: " + gather);
        
        String encodedGather;
        try {
//            encodedGather = new URLCodec("utf8").encode(gather);
            encodedGather = URLEncoder.encode(gather, "utf8");
        } catch (UnsupportedEncodingException ex) {
            throw new ChannelException("wrong params are seted: " + gather, CHANNEL_SDK_PARAM);
        }
        String sign = DigestUtils.md5Hex(encodedGather);
        
        return sign;
	}