Commit d50648d3eb830a05f5bc72bbff33a5256480e0eb

Authored by 运维管理账户
1 parent cdf5fa66

rename

Showing 1 changed file with 0 additions and 126 deletions
common_components/11SHA1sign.md deleted 100644 → 0
1 -/*  
2 -Title: SHA1签名  
3 -*/  
4 -  
5 -  
6 -### 系统参数说明 ###  
7 -  
8 -|名称 |类型 |必选 |描述|  
9 -| :----------- | :------: | :------: | :------: |  
10 -|appId |string |Y |入驻服务开发者(SP)的应用唯一标识码,由开放平台统一分配并提供(一个SP可自行创建多个应用号)|  
11 -|timestamp |int |Y |当前Unix时间戳,请保证请求服务器时间正确,有些API接口是有时效性要求的|  
12 -|ver |string |Y |协议版本号,统一取值为1.0|  
13 -|sign |string |Y |验证码,生成规则详见下面的说明,其中app_key是由开放平台统一分配并提供的SP私钥|  
14 -  
15 -  
16 -### 签名描述 ###  
17 -  
18 -签名机制  
19 -SHA1 加密  
20 -  
21 -1. 对所有传入参数(含系统参数和接口参数)按照字段名的 ASCII 码从小到大排序(字典序)后,使用 URL 键值 对的格式。  
22 - (即 key1=value1&key2=value2…)拼接成字符串 string1,  
23 - 注意:值为空的参数不参与签名,所有请求参数值都需要进行URL编码。  
24 -2. 在 string1 最 后 拼 接 上 key=app_key得 到 stringSignTemp 字 符 串 , 并 对 stringSignTemp 进行 sha1 运算,再将得到的字符串所有字符转换为大写,  
25 - 得到 sign 值 signValue。  
26 -3. 对传入参数中所有键值对的 value 进行 urlencode 转码后重新拼接成字符串 string2。  
27 -4. 将 sign=signValue拼接到string2后面得到最终的 参数 字符串。  
28 -  
29 -  
30 -#### Java代码示例  
31 -  
32 -```java  
33 -  
34 - //生成get 方式 带签名的请求URL  
35 - public static void main(String[] args) {  
36 - String app_key = "xxxxxxxxxxx"; //开发者帐号对应的key. 请开发者谨慎保管此值。  
37 - Map<String, String> map = new HashMap<String,String>();  
38 -  
39 - map.put("appId","xxxxxxxxxx"); //开发者帐号对应的10位ID ,所有接口参数都必须有此参数。  
40 - map.put("param1_keyname", "Parm1_vaule"); //接口需要的参数1  
41 - map.put("param2_keyname", "Parm2_vaule"); //接口需要的参数2 。。。 等等  
42 -  
43 - String getUrl = buildURL("http://api.cnlive.com/open/api2/xxxxxxx",map, app_key);  
44 - System.out.println(getUrl);  
45 - }  
46 -  
47 - //生成post方式的请求参数签名  
48 - public static void main(String[] args) {  
49 - String app_key = "xxxxxxxxxxx"; //开发者帐号对应的key. 请开发者谨慎保管此值。  
50 - Map<String, String> map = new HashMap<String,String>();  
51 -  
52 - map.put("appId","xxxxxxxxxx"); //开发者帐号对应的10位ID ,所有接口参数都必须有此参数。  
53 - map.put("param1_keyname", "Parm1_vaule"); //接口需要的参数1  
54 - map.put("param2_keyname", "Parm2_vaule"); //接口需要的参数2 。。。 等等  
55 -  
56 - String post_param_signed = sign(map, app_key);  
57 - System.out.println(post_param_signed);  
58 - }  
59 -  
60 - /**  
61 - * 生成URL  
62 - * @param url  
63 - * @param params  
64 - * @param app_key  
65 - * @return  
66 - */  
67 - public static String buildURL(String url,Map<String,String> params,String app_key){  
68 - Map<String,String> map = order(params);  
69 - if(map.containsKey("sign")){  
70 - map.remove("sign");  
71 - }  
72 - String str = mapJoin(map,true,false);  
73 - String sign = SHA1.SHA1Digest(str+"&key="+app_key).toUpperCase();  
74 - map.put("sign", sign);  
75 - return url+"?"+mapJoin(map, false, true);  
76 - }  
77 -  
78 - /**  
79 - * Map key 排序  
80 - * @param map  
81 - * @return  
82 - */  
83 - private static Map<String,String> order(Map<String, String> map){  
84 - HashMap<String, String> tempMap = new LinkedHashMap<String, String>();  
85 - List<Entry<String, String>> infoIds = new ArrayList<Entry<String, String>>( map.entrySet());  
86 -  
87 - Collections.sort(infoIds, new Comparator<Entry<String, String>>() {  
88 - public int compare(Entry<String, String> o1,Entry<String, String> o2) {  
89 - return (o1.getKey()).toString().compareTo(o2.getKey());  
90 - }  
91 - });  
92 -  
93 - for (int i = 0; i < infoIds.size(); i++) {  
94 - Entry<String, String> item = infoIds.get(i);  
95 - tempMap.put(item.getKey(), item.getValue());  
96 - }  
97 - return tempMap;  
98 - }  
99 -  
100 - /**  
101 - * url 参数串连  
102 - * @param map  
103 - * @param keyLower  
104 - * @param valueUrlencode  
105 - * @return  
106 - */  
107 - private static String mapJoin(Map<String, String> map,boolean keyLower,boolean valueUrlencode){  
108 - StringBuilder stringBuilder = new StringBuilder();  
109 - for(String key :map.keySet()){  
110 - if(map.get(key)!=null&&!"".equals(map.get(key))){  
111 - try {  
112 - stringBuilder.append(key)  
113 - .append("=")  
114 - .append(valueUrlencode?URLEncoder.encode(map.get(key),"utf-8").replace("+", "%20"):map.get(key))  
115 - .append("&");  
116 - } catch (UnsupportedEncodingException e) {  
117 - e.printStackTrace();  
118 - }  
119 - }  
120 - }  
121 - if(stringBuilder.length()>0){  
122 - stringBuilder.deleteCharAt(stringBuilder.length()-1);  
123 - }  
124 - return stringBuilder.toString();  
125 - }  
126 -```  
127 \ No newline at end of file 0 \ No newline at end of file