申请黑犀API

请求地址 https://www.heixi.com
签名算法可以看 签名算法

公共参数

名称 类型 必须 描述
oem String 此值为系统标识,默认传0即可
userId String 对应用户ID
timestamp String 时间戳描述,如1573119077
client String 客户端号,传0即可
ver String 版本号,传1即可
format String 返回数据格式,默认json,可选json、xml
signkey String 接口签名字段

请求参数

名称 类型 必须 描述
buyer String 查询旺旺名称

响应示例

{
"msg":"获取成功", //状态数据
"score":1862, //查询后用户剩余积分
"scoreCost":0, //查询消耗的积分
"code":0, // 0为成功标识,500为异常标识,可以看msg提示
"data":{ // 查询结果
"userAge":"6.9年", //淘龄
"weekAve":1.8, //周平均jiaoyui
"monthAve":7.7, //月平均交易笔数
"buyer":"hz0799", //查询旺旺
"cheater":1, //被标记为骗子次数
"downright":1, //被标记为降权次数
"major":"服饰鞋包", //主营
"shopCity":"保密", //店铺地址
"shopCredit":5, //店铺信誉
"shopDeposit":1000, //保证金
"shopName":"d[s229737027]", //店铺名称
"shopPraise":100, //店铺好评率
"shopReg":"2019-04-29", //店铺注册时间
"shopType":1, //店铺类型,1为个人店铺,2为天猫店铺
"times":16, //查询次数
"userAlipay":1, //1为个人实名认证,2为企业认证
"userCity":"保密", //用户地址
"userCredit":655, //用户信誉
"userPraise":100, //用户好评率
"userReg":"2012-12-10", //用户注册时间
"userSex":"男", //用户性别
"userVip":"普通会员", //用户vip等级
"userVitality":875, //用户活跃度
"userVitalityLevel":9 //用户活跃度等级
},
"dayCost":1, //用户消耗vip查询次数
"dayRemain":109, //用户剩余vip查询次数
"is_cache":true //是否为缓存,当天查询的相同旺旺会有该表示,当天重复查不扣取积分
}

签名算法

为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,TOP服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝,签名大体过程如下:

  • 对所有API请求参数(包括公共参数和业务参数,但除去signkey参数),根据参数名称的ASCII码表的顺序排序。如:foo:1, bar:2, foo_bar:3, foobar:4排序后的顺序是bar:2, foo:1, foo_bar:3, foobar:4。

  • 将排序好的参数名和参数值拼装在一起,根据上面的示例得到的结果为:bar=2&foo=1&foo_bar=3&foobar=4&。
    把拼装好的字符串采用utf-8编码,使用签名算法对编码后的字节流进行摘要,签名时要加上对应用户的秘钥key,再进行摘要,如:signkey = md5(Urlencode(bar=2&foo=1&foo_bar=3&foobar=4&)+key);

  • 将签名得到的参数添加到请求参数中

调用示例

  • java

public void credit(String buyer,String userId,String key) throws IOException {
HttpClient client = HttpClients.createDefault();
Map<String,Object> map = new HashMap<>();
map.put("oem",0);
map.put("userId",userId);
map.put("timestamp",System.currentTimeMillis()/1000);
map.put("client",0);
map.put("ver",2);
map.put("format","json");
map.put("buyer",buyer);
String uri = "/api/credit";
List<Map.Entry<String, Object>> list = new ArrayList<>(map.entrySet());
list.sort(Comparator.comparing(Map.Entry::getKey));
String para = uri+ "?";
for (Map.Entry<String,Object> item:list)
{
para += item.getKey() + "=" + item.getValue() + "&";
}
String signkey = md5(URLEncoder.encode(para, "UTF-8") + key);
para = para + "signkey="+signkey;
String url = "https://www.heixi.com"+para;
HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
String res = EntityUtils.toString(response.getEntity());
System.out.println(res);
}
  • python

import requests
import hashlib
import time
from functools import reduce
from urllib import parse
def credit(userId, key, buyer):
param = {"oem": 0, "userId": userId, "timestamp": str(int(time.time())), "client": 0,
"ver": 4, "format": "json", "buyer": buyer}
path = "/api/credit"
sortParam = sorted(param.items(), key=lambda item: item[0])
sortParam = path + "?" + reduce(lambda x, y: x + "&" + y, map(lambda item: item[0] + "=" + str(item[1])), param)
url = "https://www.heixi.com" + path
signkey = hashlib.md5((parse.quote(sortParam + "&", "") + key).encode(encoding="utf-8")).hexdigest()
param["signkey"] = signkey
response = requests.get(url, param)
print(response.content)