接入点/ API point

https://api.zgchacha.com/api

HTTPS协议 GET POST

https://api.zgchacha.com/api?appkey=您申请的APPKEY&sign=您的签名&method=com.api.searchByUserId& params={"userId":"wuyvlunbixp"}

请求参数

公共请求参数

参数名称 类型 示例值 必须 描述
appkey String 698d51a19d8a121ce581499d7b701668 您申请的appkey(审核通过后才有)
sign String c60619079f115a38bca6cbb27bae12e123 通过密钥、appkey和请求参数按照一定规则加密后生成的签名
用于接口调用时的身份验证

业务请求参数

参数名称 类型 示例值 必须 描述
method String com.api.searchByUserId 调用的接口方法
param String {"userId":"wuyvlunbixp"} 查询参数

返回参数

公共返回参数

参数名称 类型 示例值 描述
code String 1000 1000:表示业务请求成功
0001:业务请求出错,一般是由于用户请求缺少必要参数所致
0002:服务器出错,此种情况可联系查查管理员进行查看
msg String 查询结果集成功 返回代码对应提示信息

业务返回参数

参数名称 类型 示例值 描述
total Integer 30 命中记录数

请求参数

公共请求参数

参数名称 类型 示例值 必须 描述
appkey String 698d51a19d8a121ce581499d7b701668 您申请的appkey(审核通过后才有)
sign String c60619079f115a38bca6cbb27bae12e123 通过密钥、appkey和请求参数按照一定规则加密后生成的签名
用于接口调用时的身份验证

业务请求参数

参数名称 类型 示例值 必须 描述
method String com.api.searchByPhone 调用的接口方法
param String {"phone":"13900000000"} 查询参数

返回参数

公共返回参数

参数名称 类型 示例值 描述
code String 1000 1000:表示业务请求成功
0001:业务请求出错,一般是由于用户请求缺少必要参数所致
0002:服务器出错,此种情况可联系查查管理员进行查看
msg String 查询结果集成功 返回代码对应提示信息

业务返回参数

参数名称 类型 示例值 描述
total Integer 30 命中记录数

请求示例

                        
				import java.io.UnsupportedEncodingException;
				import java.util.ArrayList;
				import java.util.Collections;
				import java.util.HashMap;
				import java.util.List;
				import java.util.Map;
				import org.apache.commons.codec.digest.DigestUtils;
				import org.springframework.util.StringUtils;
				import com.alibaba.fastjson.JSON;
				
				public class ApiDemo {
				    private static final String appkey ="您申请的appkey";
				    private static final String appSecret ="您申请的appSecret";
				    //接口请求服务地址 
				    private static final String server_url = "https://api.zgchacha.com/api";
				    
				    public static void main(String[] args) throws Exception{  
				        Map paramObj = new HashMap(); 
				        paramObj.put("method", "com.api.searchByUserId");
				    	paramObj.put("appkey", appkey);
				    	//业务请求参数map->string
				    	Map subparamObj= new HashMap();
				    	subparamObj.put("userId", "wuyvlunbixp");
				        String jsonString = JSON.toJSONString(subparamObj);
				    	paramObj.put("params", jsonString);
						//过滤空值
						Map sParaNew = paraFilter(subparamObj);
				        //获取待签名字符串
				        String preSignStr = createLinkString(sParaNew);
				        System.out.println("============待签名字符串参数:"+preSignStr);
				        //拼装appkey和method到preSignStr前面
				        preSignStr = "appkey="+appkey+"&method=com.api.searchByUserId&"+preSignStr;
				        preSignStr = appSecret+ preSignStr + appSecret;
				        String sign = DigestUtils.md5Hex(getContentBytes(preSignStr, "")).toUpperCase();
				        paramObj.put("sign", sign);
				        String result = HttpClientUtil.doPost(server_url,paramObj,"utf-8");
				        System.out.println("result:"+result);  
				    }  
				    
				    private static byte[] getContentBytes(String content, String charset) {
				        if (charset == null || "".equals(charset)) {
				            return content.getBytes();
				        }
				        try {
				            return content.getBytes(charset);
				        } catch (UnsupportedEncodingException e) {
				            throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
				        }
				    }
				    
				    /** 
				     * 除去数组中的空值和签名参数
				     * @param sArray 签名参数组
				     * @return 去掉空值与签名参数后的新签名参数组
				     */
				    private static Map paraFilter(Map sArray) {
				
				        Map result = new HashMap();
				
				        if (sArray == null || sArray.size() <= 0) {
				            return result;
				        }
				
				        for (String key : sArray.keySet()) {
				            Object value = sArray.get(key);
				            if (StringUtils.isEmpty(value)) {
				                continue;
				            }
				            result.put(key, value);
				        }
				
				        return result;
				    }
				    
				    /** 
				     * 把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
				     * @param params 需要排序并参与字符拼接的参数组
				     * @return 拼接后字符串
				     */
				    private static String createLinkString(Map params) {
				
				        List keys = new ArrayList(params.keySet());
				        Collections.sort(keys);//键排序
				
				        String prestr = "";
				
				        for (int i = 0; i < keys.size(); i++) {
				            String key = keys.get(i);
				            Object value = params.get(key);
				
				            if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符
				                prestr = prestr + key + "=" + value;
				            } else {
				                prestr = prestr + key + "=" + value + "&";
				            }
				        }
				
				        return prestr;
				    }
				}
						
                    

返回示例

    
                    
	    result:{
		  "msg": "查询结果集成功",
		  "total": 21,
		  "code": "1000"
		  }
    				
                    

API签名

调用API时需要对请求参数进行签名,查查服务器端会验证请求参数是否合法。
加密规则:
① 过滤业务请求参数中的空值
② 将过滤后的业务请求参数按照key排序,排序后,按照key1=value1&key2=value2拼接成新的字符串strParam
③ 在字符串strParam前面加上appkey和method,再把appSecret(您的密钥)夹在新生成的字符串strParam的两端
例如:strParam="appkey=yourappkey&method=com.api.searchByUserId&"+strParam;
preSignStr = appSecret+strParam+appSecret;
④ 使用MD5对preSignStr进行加密并全部转换为大写,最后得到的字符串即为签名