数据标签产品
修订日期: 2025.11.06
1. 接口规范
1.1 公共请求参数
| 字段名称 | 字段说明 | 类型 | 必填 | 示例 |
|---|---|---|---|---|
| app_id | 平台分配的接入应用ID | string | Y | op1234567723122 |
| timestamp | 当前请求时间戳, 单位毫秒 | long | Y | 1570318158852 |
| sign_type | 签名算法 | string | N | 默认MD5 |
| sign | 请求数据签名 | string | Y | C65FCAC2D3FB5E2D3D4AD93DD20C8C39 |
1.2 公共应答参数
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
|---|---|---|---|---|
| code | 应答状态码 | string | Y | 在具体接口说明 |
| message | 返回描述 | string | Y | 返回描述 |
| hint | 返回错误说明 | string | N | 返回错误说明指导 |
| seqno | 服务器日志标示 | string | Y | 查日志用到查问题尽量提供这个值 |
| payload | 应答内容 | object | N | 请求内容 |
| data_node | 服务节点 | string | N | 例: CN-South |
| time_cost | 处理耗时, 单位秒 | int | N | 例: 32 |
1.3 签名算法
参数排序: 按参数名 ASCII 码升序排列。
拼接明文: 格式为 key1=value1&key2=value2... 。
计算签名: sign = stringA + "&app_secret=" + appSecret,取 MD5(32位不区分大小写)。
注意事项:
- 空值参数不参与签名。
- 参数名区分大小写。
sign参数不参与签名验证。
签名示例:
A. 密钥参数:
app_id=op88641899bxxx
app_secret=XXXX
B. 请求参数:
park_uuid=40e06b24-7320-4a61-8d97-7ebccb364a87
plate=粤B660PP
enter_time=1563242533431
car_type=1
C. 参数排序后字符串拼接:
app_id=op88641899bxxx&car_type=1&enter_time=1563242533431&park_uuid=40e06b24-7320-4a61-8d97-7ebccb364a87&plate=粤B660PP&sign_type=MD5×tamp=1563242932357&app_secret=XXX
MD5签名结果:
8f0e8b809ac986be750e72540b1e8c6b
JAVA代码参考:
String appId = "opxxxxx";
String appSecret = "XXXXX";
Map<String, String> params = new TreeMap<>();
params.put("app_id",appId);
params.put("key_a","val_a");
params.put("key_b","val_b");
...
StringBuilder builder = new StringBuilder();
for (String key : params.keySet()) {
builder.append(key + "=" + map.get(key) + "&");
}
String encryptStr = builder.toString() + "app_secret=" + appSecret;
String sign = MD5.encryptHEX(encryptStr);
String paramStr= builder.toString()+"sign="+sign;
String url ="https://api.4pyun.com/gate/1.0/xxxxx?"+ paramStr;
Response response = Request.Get(url).execute();
2. 接口定义
2.1 用户标签查询接口
GET /gate/1.0/dataware/user/tags
根据提供的检索参数以及数据类型,返回相关类型的标签数据
说明:
1. 参数`mobile`/`plate`/`user_id`至少传入一个。
2. 传递参数`user_id`的时候`user_type`也必须传递!
请求参数
| 字段名称 | 字段说明 | 类型 | 必填 | 示例 |
|---|---|---|---|---|
| category | 标签类型 | string | Y | d52ca138-3843-4b14-ae6f-10e4a72e3ed2 |
| user_id | 检索参数 | string | N | fc6d149cdd0d46da3be3a5cdd69c70d9 |
| user_type | 检索参数类型 | string | N | MOBILE-手机号PLATE-车牌号码 |
| mobile | 手机号码 | string | N | DA283E75823102A40950EA07D7B483F9A12D4140B9C35EB72A95C9C604870635 |
| plate | 车牌号码 | string | N | DA283E75823102A40950EA07D7B483F9A12D4140B9C35EB72A95C9C604870635 |
| encrypt_type | 传入参数mobile/plate/user_id的加密方式 |
string | Y | AES-AES加密- 算法 AES/CBC/NoPadding- 向量IV=0x00000000000000000000000000000000 - 加密结果取HEX MD5-明文MD5小写HEXSHA256-明文SHA256小写HEX |
| nonce | 一次请求标识 | string | N | 用于区分不同请求 |
AES示例:
参数:
KEY=1234567890ABCDEF
PLAIN=13800138000
IV=0x00000000000000000000000000000000
CIPHER=AES/CBC/NoPadding
结果:
24E1F7641D992C58597DEEC09DFDE397
MD5:
参数:
PLAIN=13800138000
结果:
7945bd83237335e5376ff44d62e4f0ae
SHA256:
参数:
PLAIN=13800138000
结果:
a6942f9771d67f34034d2f1926988ed3fad3bf1b4e7cedb9a31f31398dea43bc
请求示例
{
"app_id": "op1234567723122",
"sign": "C65FCAC2D3FB5E2D3D4AD93DD20C8C39",
"mobile": "24E1F7641D992C58597DEEC09DFDE397",
"plate": "30D28C009196C158EDBE716F0B67D3B1",
"encrypt_type": "AES",
"category": "d52ca138-3843-4b14-ae6f-10e4a72e3ed2",
"nonce": "EezacaeKo5ne0vee7QueeB8x"
}
应答状态码
| 状态码 | 说明 |
|---|---|
| 1001 | 标签已查得 |
| 1002 | 标签未查得 |
| 1401 | 数据产品无权限 |
| 1403 | 请求应用无权限 |
| 1500/其他 | 接口处理异常 |
应答参数
当返回状态码为`1001`时返回该数据集合
| 字段名称 | 字段说明 | 类型 | 必填 | 备注 |
|---|---|---|---|---|
| tag | 应答内容 | array(tag) | Y | 查得标签集合 |
对象tag定义
| 参数名 | 类型 | 说明 |
|---|---|---|
| key | string | 标签KEY, 定义参考 |
| value | string | 标签数值 |
| description | string | 标签描述说明 |
应答应答
成功
{
"code" : "1002",
"data_node" : "CN-South\/HS2-1",
"payload" : {
"tag" : [
{
"key": "x_1",
"value": "321",
"description": "This is the description of x_1."
}
]
},
"seqno" : "2b58040f97a2c88695636d4d44c9b7b2",
"time_cost" : 7
}
失败
{
"code":"401",
"message":"签名错误",
"hint":"检查请求参数是否正确",
"seqno":"9ce2f9ac8816496d",
"data_node":"CN-South/HS3-3"
}