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 0 \ No newline at end of file