📖 文档目录▾

大数据 API 调用说明

恒昌大数据开放平台(HC-BDOP)为开发者提供标准化的 REST 数据接口。本文档描述接口的调用方式、鉴权签名、 错误处理与配额规则,全部示例可直接复制运行。

API 版本 v1 REST / HTTPS 数据格式 JSON 编码 UTF-8 演示环境:数据为模拟数据
重要声明:恒昌大数据开放平台为演示性虚构平台。文中所有接口地址 api.wchc888.cn、AppKey/AppSecret、返回数据均为示例构造,仅用于说明 API 接入规范,不代表真实可用的数据服务。接入真实服务请联系文昌恒昌网络获取正式文档。

01平台概述

平台将多源异构数据清洗为标准化指标,通过统一网关对外提供 HTTP 接口。所有接口具备以下特征:

02快速开始

五步完成第一次调用:

  1. 注册开发者账号在开放平台控制台完成实名认证,一个主体可创建最多 5 个应用。
  2. 创建应用获取密钥系统颁发 AppKey(公开标识)与 AppSecret(服务端保密),Secret 仅在创建时完整显示一次。
  3. 获取访问令牌用 AppKey + AppSecret 调用 POST /oauth/token,换取 access_token。
  4. 携带令牌调用业务接口在请求头放置 Authorization: Bearer <access_token>。
  5. 处理返回结果校验业务码 code == 0 后读取 data 字段;记录 request_id 以便排查。
最简调用示例 · cURL
# 1. 获取令牌
curl -X POST "https://api.wchc888.cn/bigdata/v1/oauth/token" \
  -H "Content-Type: application/json" \
  -d '{
    "app_key": "hc_demo_9f3ac2",
    "app_secret": "********"
  }'

# 2. 调用业务接口
curl -G "https://api.wchc888.cn/bigdata/v1/enterprise/info" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." \
  -d "keyword=海南禾泰水产有限公司"

03认证与签名

平台提供两种鉴权方式,任选其一即可:

方式一:access_token 令牌(推荐,浏览器 / 移动端)

方式二:HMAC-SHA256 签名(服务端直连,免令牌)

适合服务间高并发调用。在请求头携带 X-HC-Key、X-HC-Timestamp、X-HC-Signature 三个字段。签名规则:

  1. 拼接待签名串格式:{HTTP_METHOD}\n{PATH}\n{TIMESTAMP}\n{排序后的 query 串或 body 的 MD5}。
  2. 参数排序query 参数按 key 的 ASCII 升序排列,形如 k1=v1&k2=v2;POST 请求使用请求体的 MD5 小写十六进制值。
  3. 计算签名以 AppSecret 为密钥对待签名串做 HMAC-SHA256,输出大写十六进制字符串。
  4. 时间容差服务器只接受与当前时间偏差 ±300 秒内的请求,防止重放。
签名算法 · Python 参考
import hashlib, hmac, time

APP_KEY    = "hc_demo_9f3ac2"
APP_SECRET = "your_app_secret"

def sign(method: str, path: str, params: dict) -> dict:
    ts = str(int(time.time()))
    query = "&".join(f"{k}={params[k]}" for k in sorted(params))
    raw = f"{method.upper()}\n{path}\n{ts}\n{query}"
    sign = hmac.new(APP_SECRET.encode(), raw.encode(), hashlib.sha256).hexdigest().upper()
    return {
        "X-HC-Key": APP_KEY,
        "X-HC-Timestamp": ts,
        "X-HC-Signature": sign,
    }
签名计算前请勿对参数值做 URL 编码;中文参数按 UTF-8 原始字节参与排序与拼接。签名失败统一返回 40002。

04通用规范

公共请求头

Header必填说明
Authorization二选一Bearer 令牌,与签名方式二选一
X-HC-Key / X-HC-Timestamp / X-HC-Signature二选一HMAC 签名三件套
Content-TypePOST 必填固定 application/json
Accept-Language否zh-CN(默认)/ en-US,影响描述性字段语言
X-Idempotency-Key否POST 类接口幂等键,建议使用 UUID,10 分钟内重放返回同一结果

统一返回结构

响应结构
{
  "code": 0,                // 业务码,0 = 成功
  "message": "success",     // 人类可读描述
  "request_id": "req_8f1e0a3b7c",  // 链路追踪 ID,反馈问题时必附
  "data": { }               // 业务数据,失败时为 null
}

分页、时间与编码

05接口列表

接口方法路径计费/次
获取访问令牌POST/oauth/token免费
企业工商信息查询GET/enterprise/info0.02 元
企业风险评分GET/enterprise/risk0.05 元
行业景气指数GET/industry/trend0.01 元
区域经济指标GET/region/economy0.01 元
舆情情感分析POST/nlp/sentiment0.003 元 / 条
数据报告任务POST/report/tasks2.00 元 / 份
报告任务状态GET/report/tasks/{task_id}免费
配额使用量查询GET/quota/usage免费

5.1 获取访问令牌

POST/oauth/token

使用 AppKey + AppSecret 换取 access_token。此接口无需鉴权,但同一 AppKey 每分钟最多请求 5 次。

参数位置必填类型说明
app_keybody是string平台颁发的应用标识
app_secretbody是string应用密钥,务必仅在服务端使用
grant_typebody否string固定 client_credentials,缺省等价
响应示例
{
  "code": 0,
  "message": "success",
  "request_id": "req_token_01hx92",
  "data": {
    "access_token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJoY19kZW1vIn0.dQw4w9WgXcQ",
    "token_type": "Bearer",
    "expires_in": 7200,
    "scope": "enterprise:r enterprise:risk industry:r region:r nlp:r report:w"
  }
}

5.2 企业工商信息查询

GET/enterprise/info

按企业名称或统一社会信用代码查询注册信息。两个定位参数至少传一个,同时传入时以 credit_code 优先。

参数必填类型说明
keyword条件必填string企业名称关键字,支持模糊匹配,≤ 60 字符
credit_code条件必填string统一社会信用代码,18 位精确匹配
with_shareholders否boolean是否返回股东列表,默认 false
page / page_size否int模糊匹配结果分页
请求示例
curl -G "https://api.wchc888.cn/bigdata/v1/enterprise/info" \
  -H "Authorization: Bearer $TOKEN" \
  -d "credit_code=91469005MA5T1234XA" \
  -d "with_shareholders=true"
响应示例
{
  "code": 0,
  "message": "success",
  "request_id": "req_ent_5521",
  "data": {
    "credit_code": "91469005MA5T1234XA",
    "name": "海南禾泰水产有限公司",
    "legal_person": "陈某某",
    "reg_capital_wan": 500.00,
    "establish_date": "2018-03-12",
    "status": "在营",
    "industry": "渔业 · 水产养殖",
    "address": "海南省文昌市××镇××路 12 号",
    "shareholders": [
      { "name": "陈某某", "ratio": 62.50 },
      { "name": "符某某", "ratio": 37.50 }
    ],
    "data_updated_at": "2026-09-10T08:00:00+08:00"
  }
}

5.3 企业风险评分

GET/enterprise/risk

输出 0-100 的综合风险分(越低越安全)及风险标签。适用于商务合作前的自动尽调。

参数必填类型说明
credit_code 或 keyword是string企业定位,同 5.2
dimensions否string逗号分隔:judicial,operation,finance,credit,默认全部
响应示例
{
  "code": 0,
  "message": "success",
  "request_id": "req_risk_0031",
  "data": {
    "credit_code": "91469005MA5T1234XA",
    "risk_score": 18,
    "risk_level": "低风险",
    "items": {
      "judicial":  { "score": 10, "lawsuits": 0, "dishonest": false },
      "operation": { "score": 22, "abnormal": false, "warnings": ["注册资本近一年未实缴到位"] },
      "finance":   { "score": 15, "tax_arrears": false },
      "credit":    { "score": 20, "blacklists": [] }
    },
    "evaluated_at": "2026-09-15T22:10:00+08:00"
  }
}

5.4 行业景气指数

GET/industry/trend

返回某行业按月(或按季)的景气指数序列,基准 100,>100 表示景气扩张。

参数必填类型说明
industry_code是string国标行业 2 位门类或 4 位大类代码,如 A01 农业
start_month是string起始月,格式 YYYY-MM,最多回溯 60 个月
end_month是string结束月,不晚于上一自然月
granularity否stringmonth(默认)/ quarter
响应示例
{
  "code": 0,
  "message": "success",
  "request_id": "req_trd_7788",
  "data": {
    "industry_code": "A01",
    "industry_name": "农业",
    "granularity": "month",
    "series": [
      { "period": "2026-07", "index": 103.4, "yoy": 2.1, "mom": 0.6 },
      { "period": "2026-08", "index": 104.1, "yoy": 2.8, "mom": 0.7 }
    ]
  }
}

5.5 区域经济指标

GET/region/economy

查询行政区划级别的宏观经济指标。区域编码遵循 GB/T 2260,如文昌市为 469005。

参数必填类型说明
region_code是string6 位行政区划代码,支持一次一个
year否int年份,缺省返回最近一个完整年度
indicators否string逗号分隔:gdp,fiscal,population,industry_structure,默认全部
请求 + 响应示例
curl -G "https://api.wchc888.cn/bigdata/v1/region/economy" \
  -H "Authorization: Bearer $TOKEN" \
  -d "region_code=469005" -d "year=2025"
响应示例
{
  "code": 0,
  "message": "success",
  "request_id": "req_reg_2049",
  "data": {
    "region_code": "469005",
    "region_name": "文昌市",
    "year": 2025,
    "gdp_yi": 342.76,
    "gdp_yoy": 6.8,
    "fiscal_revenue_yi": 28.15,
    "population_wan": 55.8,
    "industry_structure": { "primary": 38.2, "secondary": 16.4, "tertiary": 45.4 },
    "source": "演示数据 · 非官方统计"
  }
}

5.6 舆情情感分析

POST/nlp/sentiment

批量分析文本情感倾向。单次最多 50 条,单条 ≤ 500 字,按成功处理的条数计费。

参数必填类型说明
texts是string[]待分析文本数组,1-50 条
with_keywords否boolean是否抽取关键词,默认 false
domain否string领域模型:general(默认)/ ecommerce / news
请求示例
curl -X POST "https://api.wchc888.cn/bigdata/v1/nlp/sentiment" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "texts": ["羊绒衫质量很好,穿着很暖和", "物流太慢,包装破损"],
    "with_keywords": true,
    "domain": "ecommerce"
  }'
响应示例
{
  "code": 0,
  "message": "success",
  "request_id": "req_nlp_9a2c",
  "data": {
    "results": [
      {
        "label": "positive", "score": 0.9641,
        "probabilities": { "positive": 0.9641, "neutral": 0.0302, "negative": 0.0057 },
        "keywords": ["质量", "暖和"]
      },
      {
        "label": "negative", "score": 0.9123,
        "probabilities": { "positive": 0.0110, "neutral": 0.0767, "negative": 0.9123 },
        "keywords": ["物流", "包装破损"]
      }
    ],
    "billed_count": 2
  }
}

5.7 数据报告任务(异步)

POST/report/tasks

提交报告生成任务后立即返回 task_id。任务完成或失败时通过 Webhook 回调,也可用轮询接口查询。

参数必填类型说明
template_code是string模板:enterprise_profile / region_report / industry_review
params是object模板入参,如 {"region_code":"469005","year":2025}
format否stringpdf(默认)/ xlsx
callback_url否stringHTTPS 回调地址,未填则只可轮询
提交与查询
# 提交任务
curl -X POST "https://api.wchc888.cn/bigdata/v1/report/tasks" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "template_code": "region_report",
    "params": { "region_code": "469005", "year": 2025 },
    "format": "pdf",
    "callback_url": "https://your-app.example.com/hc-callback"
  }'

# 查询状态(GET /report/tasks/{task_id},免费)
curl "https://api.wchc888.cn/bigdata/v1/report/tasks/task_20260917_7f3e" \
  -H "Authorization: Bearer $TOKEN"
任务完成响应
{
  "code": 0,
  "message": "success",
  "request_id": "req_task_7f3e",
  "data": {
    "task_id": "task_20260917_7f3e",
    "status": "SUCCEEDED",
    "progress": 100,
    "file_url": "https://files.wchc888.cn/demo/region_469005_2025.pdf",
    "file_size": 1048576,
    "expire_at": "2026-09-24T00:00:00+08:00"
  }
}

06错误码

HTTP 状态码表示传输层结果(200 成功、401 未认证、429 限流、500 服务异常);业务错误通过 code 字段区分:

code含义排查建议
0成功—
40001AppKey 无效或被禁用检查 key 是否正确、应用是否被停用
40002签名校验失败核对排序规则、密钥与时间戳偏差
40003access_token 无效或过期重新获取令牌并重放原请求
40004scope 权限不足在控制台为应用开通对应接口权限
41001缺少必填参数对照接口参数表补齐,message 会指出字段名
42001参数格式错误检查类型、日期格式与枚举取值
42002数据不存在企业名/信用代码/区域编码无匹配记录
42901触发 QPS 限流按 Retry-After 头退避重试,或升级套餐
42902当日 / 当期配额用尽充值或升级,可先查 /quota/usage
50001平台内部错误携带 request_id 联系技术支持
50002上游数据源暂不可用指数退避重试,通常数分钟内恢复
推荐重试策略:仅对 42901 与 5xxxx 做自动重试,最多 3 次,间隔 1s / 3s / 9s;4xxxx 系列属于调用方问题,重试无意义。

07限流与配额

套餐QPS 上限配额并发任务数SLA
免费体验版51,000 次 / 天1—
基础版2050 万次 / 月399.9%
专业版100500 万次 / 月1099.95%
专属集群定制不限定制99.99%
配额查询 GET /quota/usage · 响应示例
{
  "code": 0, "message": "success", "request_id": "req_qta_0007",
  "data": {
    "plan": "basic",
    "qps_limit": 20,
    "daily":  { "used": 3120, "limit": 500000, "reset_at": "2026-09-18T00:00:00+08:00" },
    "monthly":{ "used": 45201, "limit": 500000, "reset_at": "2026-10-01T00:00:00+08:00" },
    "tasks_running": 1
  }
}

08Webhook 回调通知

异步任务(报告生成)与账单告警通过 Webhook 推送。要求回调地址为 HTTPS 且 30 秒内响应 2xx。

验签方式

每个回调请求携带 X-HC-Signature 头,其值 = HMAC-SHA256(请求原始 body, AppSecret) 的大写十六进制。消费方须用同样的方式重算并比对,防止伪造回调。

回调报文示例
POST /hc-callback HTTP/1.1
Host: your-app.example.com
X-HC-Event: report.completed
X-HC-Signature: 3F9A1C...(演示值)

{
  "event": "report.completed",
  "event_id": "evt_01hx93kq",
  "created_at": "2026-09-17T21:40:12+08:00",
  "data": {
    "task_id": "task_20260917_7f3e",
    "status": "SUCCEEDED",
    "file_url": "https://files.wchc888.cn/demo/region_469005_2025.pdf",
    "cost": 2.00
  }
}

09SDK 与多语言示例

以下为常用语言的完整调用示例(演示地址,替换为真实地址与密钥即可):

Python(requests)

python
import requests

BASE = "https://api.wchc888.cn/bigdata/v1"
APP_KEY, APP_SECRET = "hc_demo_9f3ac2", "your_app_secret"

def get_token():
    r = requests.post(f"{BASE}/oauth/token",
                      json={"app_key": APP_KEY, "app_secret": APP_SECRET}, timeout=10)
    r.raise_for_status()
    return r.json()["data"]["access_token"]

def query_region(code: str, year: int):
    headers = {"Authorization": f"Bearer {get_token()}"}
    r = requests.get(f"{BASE}/region/economy",
                     headers=headers, params={"region_code": code, "year": year}, timeout=10)
    body = r.json()
    if body["code"] != 0:
        raise RuntimeError(f'[{body["code"]}] {body["message"]} (request_id={body["request_id"]})')
    return body["data"]

if __name__ == "__main__":
    print(query_region("469005", 2025))

PHP(cURL,兼容 PHP 7.3+)

php
<?php
$base  = "https://api.wchc888.cn/bigdata/v1";
$appKey = "hc_demo_9f3ac2";
$appSecret = "your_app_secret";

function hcPost($url, array $payload): array {
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 15,
        CURLOPT_HTTPHEADER     => ["Content-Type: application/json"],
        CURLOPT_POSTFIELDS     => json_encode($payload, JSON_UNESCAPED_UNICODE),
    ]);
    $body = curl_exec($ch);
    if ($body === false) { throw new RuntimeException(curl_error($ch)); }
    curl_close($ch);
    return json_decode($body, true);
}

$token = hcPost("$base/oauth/token",
    ["app_key" => $appKey, "app_secret" => $appSecret]
)["data"]["access_token"];

$ch = curl_init("$base/enterprise/info?keyword=" . urlencode("海南禾泰水产有限公司"));
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ["Authorization: Bearer {$token}"],
]);
var_dump(json_decode(curl_exec($ch), true));

Node.js(原生 fetch,Node 18+)

javascript
const BASE = "https://api.wchc888.cn/bigdata/v1";
const APP_KEY = "hc_demo_9f3ac2";
const APP_SECRET = "your_app_secret";

async function main() {
  const tokenRes = await fetch(`${BASE}/oauth/token`, {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ app_key: APP_KEY, app_secret: APP_SECRET }),
  }).then(r => r.json());

  const token = tokenRes.data.access_token;

  const res = await fetch(`${BASE}/industry/trend?industry_code=A01&start_month=2026-07&end_month=2026-08`, {
    headers: { Authorization: `Bearer ${token}` },
  }).then(r => r.json());

  if (res.code !== 0) throw new Error(`[${res.code}] ${res.message} (${res.request_id})`);
  console.table(res.data.series);
}

main().catch(console.error);

Java 11+(HttpClient)

java
import java.net.URI;
import java.net.http.*;
import java.time.Duration;

public class HcBigDataDemo {
    static final String BASE = "https://api.wchc888.cn/bigdata/v1";
    static final HttpClient CLIENT = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10)).build();

    public static void main(String[] args) throws Exception {
        String tokenReq = "{\"app_key\":\"hc_demo_9f3ac2\",\"app_secret\":\"your_app_secret\"}";
        HttpResponse<String> tokenRes = CLIENT.send(HttpRequest.newBuilder()
                .uri(URI.create(BASE + "/oauth/token"))
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(tokenReq)).build(),
                HttpResponse.BodyHandlers.ofString());

        String token = tokenRes.body().split("\"access_token\":\"")[1].split("\"")[0];

        HttpResponse<String> res = CLIENT.send(HttpRequest.newBuilder()
                .uri(URI.create(BASE + "/enterprise/risk?keyword=" +
                        java.net.URLEncoder.encode("海南禾泰水产有限公司", "UTF-8")))
                .header("Authorization", "Bearer " + token)
                .GET().build(), HttpResponse.BodyHandlers.ofString());

        System.out.println(res.body());
    }
}

10最佳实践

11在线调试控制台

选择接口、填入参数即可体验请求与返回全过程。以下均为前端模拟,不发真实网络请求,返回数据为预置的演示 JSON。

API Playground

POST /oauth/token 免鉴权,其余接口模拟携带 Bearer 令牌
待发送

12常见问题

AppSecret 泄露了怎么办?
立即登录控制台对该应用执行「重置密钥」。旧 Secret 保留 10 分钟宽限期后强制失效,期间新 Secret 已可并行使用,业务无感切换。重置后建议同时更换所有部署环境中的密钥配置。
返回的数据多久更新一次?
不同数据集频率不同:企业工商类 T+1 更新;司法涉诉类实时(延迟 ≤ 10 分钟);行业景气与区域经济类按官方发布节奏,一般为月度 / 年度。每个接口响应中的 data_updated_at 字段为该条数据的最准更新时间。
可以内网部署或私有化吗?
专业版以上客户可申请「专属集群」私有化交付,数据不出客户网络。私有化版本接口路径与公共版完全一致,仅需替换 BASE 地址并使用离线授权文件。
429 限流后应该怎么退避?
优先读取响应头 Retry-After(秒);若无则采用指数退避 1s → 3s → 9s,最多 3 次。不要固定间隔高频重试,否则会被临时封禁 10 分钟(返回 40001)。
接口调用失败会计费吗?
业务码非 0 的请求不计费、不扣配额;HTTP 层超时但服务端实际执行成功的请求以平台侧日志为准,可在控制台「调用明细」中核对争议记录并申诉。
支持批量导出或数据订阅吗?
支持。企业工商与区域经济数据集可申请 /dataset/export 批量导出(另计费),或通过 Webhook 订阅每日增量变更。联系商务开通后会在文档中追加对应章节。

13更新日志

v1.3.0

新增企业风险评分 dimensions 维度筛选;舆情分析新增 ecommerce 领域模型;Webhook 增加 quota.warning 事件。

v1.2.0

报告任务支持 xlsx 输出与回调通知;统一响应新增 request_id;错误码拆分 42002(数据不存在)。

v1.1.0

新增 HMAC-SHA256 服务端直连签名;分页上限由 50 提升至 100。

v1.0.0

开放平台上线,发布企业工商、区域经济、行业景气、舆情分析首批接口。

技术支持:0898-63229998 · 邮箱 cdjwhh@qq.com · 反馈问题时请附上 request_id。再次提醒:本平台与全部数据为演示用途虚构内容。