API根地址: https://api.wangdiangongju.com
请求方式: 均采用 POST
- appKey: 应用Key,参见用户中心,长度通常为10位
- appSecret: 密钥,参见用户中心,长度固定32位,自行保管好,严禁泄露,否则后果自负
- timestamp: 毫秒时间戳,鉴权会验证,前后10分钟内有效
- sign: 签名串,详见下方签名算法
参数 appKey、timestamp、sign 需放在请求头中传递
数据体采用请求体body形式传递,统一为JSON格式,示例如下:
{
"itemLink": "商品链接",
"keyword": "关键词",
"wangwang": "tb1234567890"
}
签名算法:
- 数据体转成字符串,key根据字典序顺序排序,然后按照 key1+value1+key2+value2... 转化为字符串,针对null数据,同样保留
上述示例数据将会拼接为 itemLink商品链接keyword关键词wangwangtb1234567890 - 拼接appKey、接口地址、appSecret、timestamp、data, 其中接口地址为完整的地址去掉前面的服务地址
如照妖镜验号的完整接口地址为https://api.wangdiangongju.com/api/wangwang/check
,则此处用于签名的接口地址为/api/wangwang/check
- 将拼接好的数据串进行MD5加密,得到签名sign
Java签名以及接口调用示例(基于java11)
import com.alibaba.fastjson.JSON;
import org.apache.commons.codec.digest.DigestUtils;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.Map;
import java.util.TreeMap;
public class Api {
public void api() throws IOException, InterruptedException {
String host = "https://api.wangdiangongju.com";
String apiUrl = "/api/wangwang/check";
String appKey = "1000012345";
String appSecret = "AbcdEfgH01234567AbcdEfgH01234567";
long timestamp = System.currentTimeMillis();
Map<String, Object> bodyData = new TreeMap<>();
bodyData.put("wangwang", "12412341235");
StringBuilder dataStr = new StringBuilder();
for (Map.Entry<String, Object> entry : bodyData.entrySet()) {
dataStr.append(entry.getKey()).append(entry.getValue());
}
String sign = DigestUtils.md5Hex((appKey + apiUrl + appSecret + timestamp + dataStr)
.getBytes(StandardCharsets.UTF_8));
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(host + apiUrl))
.timeout(Duration.ofSeconds(300))
.setHeader("Content-Type", "application/json")
.setHeader("appKey", appKey)
.setHeader("timestamp", String.valueOf(timestamp))
.setHeader("sign", sign)
.POST(HttpRequest.BodyPublishers.ofString(JSON.toJSONString(bodyData)))
.build();
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_1_1)
.followRedirects(HttpClient.Redirect.ALWAYS)
.connectTimeout(Duration.ofSeconds(5))
.build();
HttpResponse<byte[]> response = client.send(request, HttpResponse.BodyHandlers.ofByteArray());
String responseStr = new String(response.body(), StandardCharsets.UTF_8);
JSONObject responseJSON = JSON.parseObject(responseStr);
boolean success = responseJSON.getBooleanValue("success");
int code = responseJSON.getIntValue("code");
String message = responseJSON.getString("message");
Object data = responseJSON.get("data");
}
}
返回数据结构示例:
{
//success表示本次请求是否成功,bool类型
"success": true,
//code为请求状态值,0表示成功,其他表示失败,具体参见下方错误码表格,int类型
"code": 0,
//message表示失败消息,会返回对应错误原因,string类型
"message": null,
//timestamp为当前时间戳,long型
"timestamp": 1682600000000,
//具体的数据体,可以是map,可以是list
"data": {}
}
错误码说明:
code | 描述 |
---|---|
100000 | 系统异常,请联系客服处理 |
100001 | appKey异常 |
100002 | appKey非法 |
100003 | 签名参数异常 |
100004 | 时间非法 |
100005 | API权限已停用 |
100006 | IP受限 |
100007 | API参数有误 |
100008 | 签名验证未通过 |
100101 | 该API不存在或已停用 |
100102 | 该API当前处于维护中,暂不可用 |
100103 | 您当前已关闭该API |
100104 | API的消耗积分配置有误,请联系客服 |
100105 | 积分不足 |
100201 | 非法调用 |
100202 | 请求参数非法 |
200001 | 排名查询失败 |
300001 | 旺旺不存在 |