接口概述
一句话说明
usedcar.sellerphone 是「给一辆车取出售人电话」的接口:
先用 usedcar.list 拿到车辆的 dataId,再调本接口,
返回该车辆的出售人联系手机号。适合车源详情页的「联系出售人 / 电话咨询」按钮。
| 请求地址 | https://api.xujian.tech/openapi/usedcar/sellerphone |
|---|---|
| 请求方式 | GET(dataId 放 Query String;也可用别名 infoid) |
| 鉴权方式 | 请求头 X-API-Key |
| 接口编码 | usedcar.sellerphone |
| 收费类型 | PER_CALL(按次计费,0.2000 元/次) |
| 计费特殊规则 | 查得计费:dataId 无效、未查询到电话、或号码暂不可用时,返回失败且不扣费 |
| 响应格式 | JSON,Content-Type: application/json;charset=UTF-8 |
| 是否需要授权 | 否(无需授权,API Key 有效且余额充足即可调用) |
| 典型用途 | 车源详情页「联系出售人」、电话咨询转化、CRM 线索归集 |
快速开始
# 用 usedcar.list 返回的车辆 dataId 拉取该车辆的出售人电话
curl -s -G "https://api.xujian.tech/openapi/usedcar/sellerphone" \
--data-urlencode "dataId=60335237" \
-H "X-API-Key: 你的APIKey"
dataId 从哪里来
dataId 是 usedcar.list
车源列表返回的车辆数据 ID(字段名 dataId),必填。
也可以直接传别名 infoid,两者等价。如果传的不是列表返回的 dataId,
或该车辆没有可用的出售人电话,接口会返回失败且不计费。
请求参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
X-API-Key | String | 是 | 开发者 API Key |
| 参数名 | 类型 | 必填 | 默认值 | 示例 | 说明 |
|---|---|---|---|---|---|
dataId | String | 是 | — | 60335237 | 车辆数据 ID,取 usedcar.list 返回的 dataId;
缺失或取到参数时空返回失败且不计费 |
infoid | String | 否 | — | 60335237 | dataId 的历史别名,口径完全一致;仅当 dataId 为空时生效,
新接入请直接用 dataId |
响应参数
| 字段 | 类型 | 说明 |
|---|---|---|
dataId | String | 本次查询使用的车辆数据 ID(原样回显) |
phone | String | 出售人联系手机号(号码可用且取到时返回) |
apiCode | String | 接口编码 usedcar.sellerphone |
apiName | String | 接口名称 |
chargeType | String | 计费类型 |
balance | BigDecimal | 调用完成后(已扣费)的账户余额(元) |
costMs | Long | 本次调用耗时(毫秒) |
号码可用性与数据说明
出售人电话由上游实时返回,且为虚拟号码(隐私号 / 中间号),并非出售人的真实直拨号码; 其有效期较短,请在用户实际使用(点击「联系出售人」)前实时查询, 不要长期缓存或提前批量拉取后反复使用,否则很可能拿到已失效、无法接通的号码。
还需注意两点:不是所有车辆都能查到号码(部分车源上游未收录电话,会走失败分支且不收费); 并且并非所有号码都正确——数据来自互联网公开信息,可能存在空号、错号、停用或登记有误的情况, 平台不保证号码的可用性与准确性,调用方在展示给用户前应做拨打校验与适当提示。
当号码暂不可用(如已失效)时,接口会直接返回失败且不计费。
响应示例
成功(code = 0)
{
"code": 0,
"msg": "success",
"data": {
"dataId": "60335237",
"phone": "17882983314",
"apiCode": "usedcar.sellerphone",
"apiName": "二手车出售人电话查询",
"chargeType": "PER_CALL",
"balance": 99.8000,
"costMs": 410
}
}
失败(号码暂不可用)—— 不收费
{
"code": 500,
"msg": "未查询到可用的出售人电话(号码暂不可用),本次调用不计费",
"data": null
}
失败(缺少 dataId)—— 不收费
{
"code": 500,
"msg": "dataId 不能为空(取 usedcar.list 返回的车辆 dataId)",
"data": null
}
错误码与常见失败原因
| code | msg(示例) | 处理建议 |
|---|---|---|
| 0 | success | 调用成功 |
| 500 | 缺少请求头 X-API-Key | 补充 X-API-Key |
| 500 | API Key 无效 / API Key 已停用 | 检查 Key 或重新启用 |
| 500 | 客户不存在或已停用 | 联系平台(可联系微信xujian_cq) |
| 500 | 接口不存在或已停用 | 确认 usedcar.sellerphone 当前是否维护中 |
| 500 | 余额不足,请先充值。可联系微信xujian_cq | 充值后重试,余额不足不扣费 |
| 500 | 二手车服务未启用 / 二手车服务未配置(上游凭证缺失) | 平台侧配置问题,联系平台处理;不计费 |
| 500 | dataId 不能为空(取 usedcar.list 返回的车辆 dataId) | 补齐 dataId(取 usedcar.list 返回的 dataId);不计费 |
| 500 | 未查询到可用的出售人电话(号码暂不可用),本次调用不计费 | 该车辆号码暂不可用,换其他车辆或稍后重试;不计费 |
| 500 | 数据服务暂时不可用(请求上游超时或网络异常),本次调用不计费 | 稍后重试;不计费 |
多语言代码示例
Java(Hutool)
String body = HttpRequest.get("https://api.xujian.tech/openapi/usedcar/sellerphone")
.form("dataId", "60335237")
.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");
System.out.println("车辆 " + data.getStr("dataId") + " 出售人电话:" + data.getStr("phone"));
System.out.println("提示:号码可能出现空号/停用,展示前请做拨打校验");
Python
import requests
def get_seller_phone(api_key: str, data_id: str) -> str | None:
"""按车辆 dataId 取出售人电话;查不到返回 None 且不扣费"""
resp = requests.get(
"https://api.xujian.tech/openapi/usedcar/sellerphone",
params={"dataId": data_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"]["phone"]
if __name__ == "__main__":
phone = get_seller_phone("你的APIKey", "60335237")
if phone:
print("出售人电话:", phone, "(请做拨打校验后再展示)")
JavaScript(浏览器 / Node 18+)
const params = new URLSearchParams({ dataId: "60335237" });
const resp = await fetch(`https://api.xujian.tech/openapi/usedcar/sellerphone?${params}`, {
headers: { "X-API-Key": API_KEY },
});
const { code, msg, data } = await resp.json();
if (code === 0) {
console.log("出售人电话:", data.phone, "(展示前请做拨打校验)");
} else {
console.warn("查询失败(不收费):", msg);
}
常见问题(FAQ)
usedcar.sellerphone 接口怎么收费?
usedcar.sellerphone 的收费类型为 PER_CALL(按次计费),当前单价 0.2000 元/次,调用前校验余额,余额不足返回「余额不足,请先充值。可联系微信xujian_cq」且不扣费;充值可可联系微信xujian_cq。扣费金额、交易前后余额均记录于交易流水中。
dataId 必填吗?从哪里来?
dataId必填,它来自 usedcar.list
车源列表返回的车辆数据 ID(字段名 dataId)。不传或用错(不是列表返回的 dataId)
会直接返回失败且不计费;也可以用别名 infoid 传入,两者等价。
号码一定能打通吗?数据准确吗?
都不能保证。四点提醒:① 该号码为虚拟号码(隐私号 / 中间号),并非出售人真实直拨号码; ② 其有效期较短,请在用户实际点击「联系出售人」前实时查询, 不要长期缓存或提前批量拉取后反复使用;③ 不是所有车辆都能查到号码——部分车源上游未收录电话,会走失败分支且不收费; ④ 并非所有号码都正确——数据来自互联网公开信息,可能存在空号、错号、停用或登记有误的情况。 当号码暂不可用(如已失效)时,接口会返回失败且不计费。 调用方在展示给用户前应做拨打校验与适当提示,平台不保证号码的可用性与准确性。
没有查到电话会扣费吗?
不会。接口采用「先预鉴权、查到可用电话后再扣费」的两段式流程, dataId 无效、未查询到电话、或号码暂不可用(已失效)时,返回失败且不扣费、不写扣费流水。
调用需要签名或加密吗?
不需要。XAPI 的接口仅校验请求头 X-API-Key,不做签名、时间戳或加密。