接口概述
一句话说明
usedcar.sellerinfo 是「给一辆车取出售人/车商资料」的接口:
先用 usedcar.list 拿到车辆的 dataId 与经销商 dId,再调本接口,
返回该车辆出售人/车商的完整主体资料。适合车源详情页的「车商资质 / 门店信息」模块。
| 请求地址 | https://api.xujian.tech/openapi/usedcar/sellerinfo |
|---|---|
| 请求方式 | GET(dataId 与 dId 放 Query String;也可用别名 infoid / dealerId / dealerid) |
| 鉴权方式 | 请求头 X-API-Key |
| 接口编码 | usedcar.sellerinfo |
| 收费类型 | PER_CALL(按次计费,0.0100 元/次) |
| 计费特殊规则 | 查得计费:dataId / dId 缺失或非法、未查询到信息时,返回失败且不扣费 |
| 响应格式 | JSON,Content-Type: application/json;charset=UTF-8 |
| 是否需要授权 | 否(无需授权,API Key 有效且余额充足即可调用) |
| 典型用途 | 车源详情页车商资质展示、门店/地址展示、信任背书、C2C 撮合 |
快速开始
# 用 usedcar.list 返回的车辆 dataId + dId 拉取该车辆的出售人/车商信息
curl -s -G "https://api.xujian.tech/openapi/usedcar/sellerinfo" \
--data-urlencode "dataId=60323428" \
--data-urlencode "dId=142990" \
-H "X-API-Key: 你的APIKey"
dataId 与 dId 从哪里来
dataId 与 dId 都是 usedcar.list
车源列表返回的车辆字段(字段名分别为 dataId 与 dId),两者都必填。
dataId 也可用别名 infoid;dId 也可用别名
dealerId / dealerid。若传的不是列表返回的 ID,或该车没有可查询的出售人信息,
接口会返回失败且不计费。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
X-API-Key | String | 是 | 开发者 API Key |
| 参数名 | 类型 | 必填 | 默认值 | 示例 | 说明 |
|---|---|---|---|---|---|
dataId | String | 是 | — | 60323428 | 车辆数据 ID,取 usedcar.list 返回的 dataId;
缺失或取到参数时空返回失败且不计费 |
infoid | String | 否 | — | 60323428 | dataId 的历史别名,口径完全一致;仅当 dataId 为空时生效 |
dId | String | 是 | — | 142990 | 经销商 ID,取 usedcar.list 返回的 dId;
缺失或取到参数时空返回失败且不计费 |
dealerId / dealerid | String | 否 | — | 142990 | dId 的别名,口径完全一致;仅当 dId 为空时生效 |
响应参数
| 字段 | 类型 | 说明 |
|---|---|---|
dataId | String | 本次查询使用的车辆数据 ID(原样回显) |
dealerId | String | 本次查询使用的经销商 ID(原样回显) |
result | Object | 出售人/车商信息主体,仅包含下列固定字段子集(不会返回上游 {@code result} 的全部原始字段):
dealer(dealerid / dealername / address / cid / cname / pid / pname /
description / kindid / dealerimg / businessclass)与
member(dealername / membername);若上游未提供某字段,对应值为 null 或省略该 key |
apiCode | String | 接口编码 usedcar.sellerinfo |
apiName | String | 接口名称 |
chargeType | String | 计费类型 |
balance | BigDecimal | 调用完成后(已扣费)的账户余额(元) |
costMs | Long | 本次调用耗时(毫秒) |
富文本安全提示
返回的 result.dealer.description 字段可能含 HTML 富文本。
调用方在网页 / App 展示前务必做安全转义或富文本净化,避免 XSS 注入。
本接口只返回上述固定字段子集,若上游未提供某字段,对应值为 null 或省略该 key。
响应示例
成功(code = 0)
{
"code": 0,
"msg": "success",
"data": {
"dataId": "60323428",
"dealerId": "142990",
"result": {
"dealer": {
"dealerid": 142990,
"dealername": "示例二手车经纪有限公司",
"address": "重庆市南岸区六公里二手车市场A8区",
"cid": 500100,
"cname": "重庆",
"pid": 500000,
"pname": "重庆",
"description": "<p>诚信经营,欢迎现场看车试车验车</p>",
"kindid": 3,
"dealerimg": "https://example.com/escimg/xxx.jpg",
"businessclass": ["车辆置换", "价格评估", "车辆寄售", "试乘试驾"]
},
"member": {
"dealername": "示例二手车",
"membername": "张某某"
}
},
"apiCode": "usedcar.sellerinfo",
"apiName": "二手车出售人信息查询",
"chargeType": "PER_CALL",
"balance": 99.9900,
"costMs": 380
}
}
失败(缺少 dId)—— 不收费
{
"code": 500,
"msg": "dealerId 不能为空(取 usedcar.list 返回的 dId)",
"data": null
}
失败(查不到出售人信息)—— 不收费
{
"code": 500,
"msg": "未查询到该车辆的出售人信息,请核对 dataId 与 dealerId 后重试;本次调用不计费",
"data": null
}
错误码与常见失败原因
| code | msg(示例) | 处理建议 |
|---|---|---|
| 0 | success | 调用成功 |
| 500 | 缺少请求头 X-API-Key | 补充 X-API-Key |
| 500 | API Key 无效 / API Key 已停用 | 检查 Key 或重新启用 |
| 500 | 客户不存在或已停用 | 联系平台(可联系微信xujian_cq) |
| 500 | 接口不存在或已停用 | 确认 usedcar.sellerinfo 当前是否维护中 |
| 500 | 余额不足,请先充值。可联系微信xujian_cq | 充值后重试,余额不足不扣费 |
| 500 | 二手车服务未启用 / 二手车服务未配置(上游凭证缺失) | 平台侧配置问题,联系平台处理;不计费 |
| 500 | dataId 不能为空(取 usedcar.list 返回的车辆 dataId) | 补齐 dataId;不计费 |
| 500 | dealerId 不能为空(取 usedcar.list 返回的 dId) | 补齐 dId(取 usedcar.list 返回的 dId);不计费 |
| 500 | 未查询到该车辆的出售人信息,请核对 dataId 与 dealerId 后重试;本次调用不计费 | 核对两个 ID 是否取自同一辆车的列表返回;不计费 |
| 500 | 数据服务暂时不可用(请求上游超时或网络异常),本次调用不计费 | 稍后重试;不计费 |
多语言代码示例
Java(Hutool)
String body = HttpRequest.get("https://api.xujian.tech/openapi/usedcar/sellerinfo")
.form("dataId", "60323428")
.form("dId", "142990")
.header("X-API-Key", apiKey)
.timeout(15000)
.execute()
.body();
JSONObject json = JSONUtil.parseObj(body);
if (json.getInt("code") != 0) {
System.out.println("查询失败(不收费):" + json.getStr("msg"));
return;
}
JSONObject data = json.getJSONObject("data");
JSONObject result = data.getJSONObject("result");
System.out.println("车商:" + result.getByPath("dealer.dealername"));
System.out.println("地址:" + result.getByPath("dealer.address"));
System.out.println("联系人:" + result.getByPath("member.membername"));
// 注意:description 含 HTML,展示前请做净化
Python
import requests
def get_seller_info(api_key: str, data_id: str, d_id: str) -> dict | None:
"""按车辆 dataId + 经销商 dId 取出售人/车商信息;查不到返回 None 且不扣费"""
resp = requests.get(
"https://api.xujian.tech/openapi/usedcar/sellerinfo",
params={"dataId": data_id, "dId": d_id},
headers={"X-API-Key": api_key},
timeout=20,
)
result = resp.json()
if result.get("code") != 0:
print("查询失败(不收费):", result.get("msg"))
return None
return result["data"]["result"]
if __name__ == "__main__":
info = get_seller_info("你的APIKey", "60323428", "142990")
if info:
dealer = info["dealer"]
print("车商:", dealer.get("dealername"), "| 地址:", dealer.get("address"))
JavaScript(浏览器 / Node 18+)
const params = new URLSearchParams({ dataId: "60323428", dId: "142990" });
const resp = await fetch(`https://api.xujian.tech/openapi/usedcar/sellerinfo?${params}`, {
headers: { "X-API-Key": API_KEY },
});
const { code, msg, data } = await resp.json();
if (code === 0) {
const { dealer, member } = data.result;
console.log("车商:", dealer.dealername, "| 联系人:", member.membername);
} else {
console.warn("查询失败(不收费):", msg);
}
常见问题(FAQ)
usedcar.sellerinfo 接口怎么收费?
usedcar.sellerinfo 的收费类型为 PER_CALL(按次计费),当前单价 0.0100 元/次,调用前校验余额,余额不足返回「余额不足,请先充值。可联系微信xujian_cq」且不扣费;充值可可联系微信xujian_cq。扣费金额、交易前后余额均记录于交易流水中。
dataId 和 dId 必填吗?从哪里来?
两个都必填:dataId 来自 usedcar.list
返回的车辆数据 ID,dId 来自同一接口返回的经销商 ID。不传或传错(不是列表返回的 ID)
会直接返回失败且不计费;dataId 也可用别名 infoid,
dId 也可用别名 dealerId / dealerid。
返回的信息里有 HTML 吗?要怎么处理?
有。车商简介(description 等字段)可能含 HTML 富文本,调用方在展示前务必做
安全转义或富文本净化,避免 XSS;平台仅透传原始内容,不保证其结构稳定,建议兼容字段缺失 / 类型变化。
没有查到信息会扣费吗?
不会。接口采用「先预鉴权、查到信息后再扣费」的两段式流程,
dataId / dId 缺失、未查询到信息、或上游不可用时,返回失败且不扣费、不写扣费流水。
调用需要签名或加密吗?
不需要。XAPI 的接口仅校验请求头 X-API-Key,不做签名、时间戳或加密。