开放API接入文档

本文档面向外部开发者公开访问,用于接入身份证二要素、手机号三要素、人脸核身等实名认证能力。

Base URL: /common/openapi

接入指南

  1. 登录控制台,在 API 密钥管理页面创建密钥,获取 api_keyapi_secret
  2. 在对接产品页面查看可用产品编码,请求体中的 product_code 必须填写实际产品编码。
  3. 所有开放接口请求必须携带签名请求头。
  4. 所有认证产品统一调用 POST /common/openapi/verify,通过 product_code 区分产品。
禁止传入 package_id。系统会根据 product_code 自动匹配套餐,或在 use_package=false 时按余额扣费。

签名鉴权

公共请求头

Header说明示例
X-Api-KeyAPI密钥ak_xxxxxxxxxxxxxxxx
X-TimestampUnix时间戳,单位秒1700000000
X-Nonce随机字符串,建议16-32位a1b2c3d4e5f6g7h8
X-SignatureHMAC-SHA256签名e3b0c44298fc1c14...

签名算法

signature = HMAC-SHA256(api_key + timestamp + nonce, api_secret)

签名有效期默认 300 秒。服务端会校验时间戳、随机串和签名,避免重放请求。

认证接口

POST /common/openapi/verify

公共请求参数

参数必填类型说明
product_codestring认证产品编码,在控制台对接产品页面查看
use_packageboolean是否使用套餐自动扣减,默认 true;false 则按余额扣费
name条件string真实姓名,身份证相关认证必填
idcard条件string身份证号码,身份证相关认证必填
mobile条件string手机号三要素认证必填
return_urlstring人脸认证完成后的回跳地址
base64_image条件string仅腾讯云增强人脸认证必填,Base64 人脸图片,建议不超过 500KB
身份证二要素

验证姓名和身份证号码是否一致。

手机号三要素

验证姓名、身份证号码和手机号是否一致。

人脸认证

发起人脸流程,返回 certify_id 和 certify_url。

身份证二要素请求示例

{
  "product_code": "YOUR_PRODUCT_CODE",
  "use_package": true,
  "name": "张三",
  "idcard": "110101199001011234"
}

手机号三要素请求示例

{
  "product_code": "YOUR_PRODUCT_CODE",
  "use_package": true,
  "name": "张三",
  "idcard": "110101199001011234",
  "mobile": "13800138000"
}

人脸认证请求示例

{
  "product_code": "YOUR_PRODUCT_CODE",
  "use_package": true,
  "name": "张三",
  "idcard": "110101199001011234",
  "return_url": "https://your-site.com/callback"
}

通用响应示例

{
  "code": 0,
  "message": "success",
  "data": {
    "success": true,
    "message": "一致",
    "cost_time": 245,
    "charge_amount": 0,
    "is_charged": true,
    "package_used": true,
    "package_id_used": 10,
    "use_package": true
  }
}

人脸结果查询

POST /common/openapi/faceQuery

参数必填类型说明
certify_idstring人脸认证初始化接口返回的认证会话ID
product_codestring可选,用于与初始化记录校验一致性
人脸查询扣费方式沿用初始化时传入的 use_package 值,不可重复扣费,重复查询不收费。
{
  "certify_id": "8a8b5a3c7d9e4f2a1b6c8d0e4f6a8b2c",
  "product_code": "YOUR_PRODUCT_CODE"
}

余额查询

GET /common/openapi/getBalance

{
  "code": 0,
  "message": "success",
  "data": {
    "balance": 1000.50,
    "frozen_amount": 0,
    "total_recharge": 5000,
    "total_consume": 3999.50
  }
}

产品列表

GET /common/openapi/getProducts

获取当前账号可用的认证产品列表和价格信息。实际可用产品以控制台配置为准。

代码示例

cURL

api_key="ak_your_api_key"
api_secret="sk_your_api_secret"
timestamp=$(date +%s)
nonce=$(openssl rand -hex 8)
message="${api_key}${timestamp}${nonce}"
signature=$(echo -n "$message" | openssl dgst -sha256 -hmac "$api_secret" -hex | awk '{print $2}')

curl -X POST "https://your-domain.com/common/openapi/verify" \
  -H "X-Api-Key: $api_key" \
  -H "X-Timestamp: $timestamp" \
  -H "X-Nonce: $nonce" \
  -H "X-Signature: $signature" \
  -H "Content-Type: application/json" \
  -d '{"product_code":"YOUR_PRODUCT_CODE","use_package":true,"name":"张三","idcard":"110101199001011234"}'

Python

import hmac, hashlib, time, uuid, requests

api_key = "ak_your_api_key"
api_secret = "sk_your_api_secret"
base_url = "https://your-domain.com/common/openapi"

timestamp = str(int(time.time()))
nonce = uuid.uuid4().hex[:16]
signature = hmac.new(api_secret.encode(), (api_key + timestamp + nonce).encode(), hashlib.sha256).hexdigest()

headers = {
    "X-Api-Key": api_key,
    "X-Timestamp": timestamp,
    "X-Nonce": nonce,
    "X-Signature": signature,
    "Content-Type": "application/json",
}

resp = requests.post(base_url + "/verify", json={
    "product_code": "YOUR_PRODUCT_CODE",
    "use_package": True,
    "name": "张三",
    "idcard": "110101199001011234"
}, headers=headers)
print(resp.json())

错误码

错误码说明解决方案
AUTH_FAILED签名验证失败检查 API Key/Secret、时间戳和 nonce
INSUFFICIENT_BALANCE余额不足充值后重试
INSUFFICIENT_PACKAGE无可用套餐或套餐不包含该产品购买对应套餐或使用余额扣费
CHARGE_FAILED扣费失败或并发冲突稍后重试
PRODUCT_MISMATCHproduct_code 与认证记录不一致传入正确的 product_code
RECORD_NOT_FOUND未找到开放 API 认证记录检查 certify_id 是否正确
INVALID_PARAM参数无效检查请求参数,不要传 package_id
PRODUCT_NOT_FOUND产品不存在或已禁用检查 product_code 或联系管理员

SDK下载

可下载 SDK 或参考上方示例自行接入。

Python SDK · Go SDK · Java SDK · PHP SDK