实名认证 API 文档

概述

实名认证功能支持多种认证方式,用于验证用户的真实身份。系统支持以下认证类型:

认证类型cert_type说明审核方式
身份证二要素IDENTITY_CARD大陆身份证API 自动认证
港澳居民证RESIDENCE_HK_MC港澳居民来往内地通行证API 自动认证
台湾居民证RESIDENCE_TAIWAN台湾居民来往大陆通行证API 自动认证
证件图片认证ID_CARD_MANUAL上传证件图片人工审核

业务流程图

认证状态流转

none 未认证 pending 审核中 verified 已认证 failed 认证失败 cancelled 已取消 提交人工审核 API认证成功 API认证失败 审核通过 审核拒绝 用户取消 可重新提交

证件图片认证流程

用户端 后台管理 1. 上传证件图片 POST /upload_image (最多5张) 2. 提交认证申请 POST /identity_verification/id_card cert_type=ID_CARD_MANUAL 3. 等待审核 identity_verification_status = "pending" 可选: 取消认证 POST /cancel 4. 查看认证结果 GET /user/info → identity_verification_status 查看待审核列表 获取 pending 状态的认证记录 审核通过 POST /approve 审核拒绝 POST /reject

用户端接口

1. 身份证认证 POST /user/identity_verification/id_card

功能说明

提交身份证认证申请。根据 cert_type 参数选择认证方式:

  • API 自动认证:IDENTITY_CARDRESIDENCE_HK_MCRESIDENCE_TAIWAN
  • 人工审核:ID_CARD_MANUAL

请求参数

参数类型必填说明
real_namestring真实姓名,最大50字符
id_card_numberstring身份证号码,18位
cert_typestring证件类型,见上方表格
upload_image_idsarray条件必填证件图片ID数组,ID_CARD_MANUAL 时必填

upload_image_ids 说明

  • 仅当 cert_type=ID_CARD_MANUAL 时必填
  • 数组长度:1-5 个
  • 图片必须是当前用户通过 /upload_image 接口上传的

请求示例

API 自动认证

{
  "real_name": "张三",
  "id_card_number": "110101199001011234",
  "cert_type": "IDENTITY_CARD"
}

人工审核认证

{
  "real_name": "张三",
  "id_card_number": "110101199001011234",
  "cert_type": "ID_CARD_MANUAL",
  "upload_image_ids": [123, 124, 125]
}

响应示例

API 认证成功

{
  "success": true,
  "message": "认证成功",
  "data": {
    "verification_type": "id_card_2",
    "status": "verified"
  }
}

人工审核已提交

{
  "success": true,
  "message": "证件图片认证已提交,请等待审核",
  "data": {
    "verification_type": "id_card_image",
    "status": "pending"
  }
}

错误响应

场景响应
已完成实名认证{"success": false, "message": "您已完成实名认证"}
有待审核的认证{"success": false, "message": "您有待审核的认证申请,请等待审核结果"}
图片不属于当前用户HTTP 403: 部分图片不属于当前用户
API 认证失败错误码 30020,message 为具体失败原因

2. 取消认证申请 POST /user/identity_verification/cancel

功能说明

取消当前用户待审核的证件图片认证申请。仅支持取消 ID_CARD_MANUAL 类型且状态为 pending 的认证。

请求参数

无需参数。

响应示例

取消成功

{
  "success": true,
  "message": "认证申请已取消"
}

错误响应

场景响应
没有待审核的认证错误码 30020,message: 没有待审核的证件图片认证

3. 获取认证信息 POST /user/identity_verification/info

功能说明

获取当前用户的实名认证信息(脱敏显示)。

请求参数

无需参数。

响应示例

{
  "data": {
    "id": 1,
    "user_id": 100,
    "verification_type": "id_card_2",
    "status": "verified",
    "real_name": "张*",
    "id_card_number": "110101********1234",
    "verified_at": "2024-01-15T10:30:00.000000Z"
  }
}

4. 获取认证历史 POST /user/identity_verification/history

功能说明

获取当前用户的所有认证历史记录。

请求参数

无需参数。

响应示例

{
  "data": [
    {
      "id": 2,
      "verification_type": "id_card_image",
      "status": "verified",
      "created_at": "2024-01-15T10:00:00.000000Z",
      "verified_at": "2024-01-15T12:00:00.000000Z"
    },
    {
      "id": 1,
      "verification_type": "id_card_2",
      "status": "failed",
      "failure_reason": "MISMATCH",
      "created_at": "2024-01-14T10:00:00.000000Z"
    }
  ]
}

关联接口

以下接口在创建/更新时也支持 ID_CARD_MANUAL 认证方式:

提现账户接口

POST /user/withdraw_account/create

创建提现账户时,如果用户未完成实名认证,可以使用 ID_CARD_MANUAL 方式提交认证。

POST /user/withdraw_account/update

更新提现账户时,如果用户未完成实名认证,可以使用 ID_CARD_MANUAL 方式提交认证。

请求参数(认证相关):

参数类型必填说明
real_namestring真实姓名
id_card_numberstring证件号码
cert_typestring证件类型
upload_image_idsarray条件必填证件图片ID数组,ID_CARD_MANUAL 时必填,1-5个

注意:当 cert_type=ID_CARD_MANUAL 时,接口会返回 ok: false 并提示等待审核,不会立即创建/更新提现账户。用户需要等待审核通过后再次操作。


后台管理接口

注意:以下接口位于 /internal 路由组,使用内部 API 认证。

1. 审核通过 POST /internal/identity_verification/approve

功能说明

管理员审核通过证件图片认证申请。审核通过后:

  1. 认证记录状态更新为 verified
  2. 用户 is_identity_verified 更新为 true
  3. 用户 identity_verification_status 变为 verified

请求参数

参数类型必填说明
idinteger认证记录ID

请求示例

{
  "id": 123
}

响应示例

{
  "success": true,
  "message": "审核通过成功"
}

错误响应

场景响应
不是证件图片认证类型错误码 30020,message: 该认证记录不是证件图片认证类型
不是待审核状态错误码 30020,message: 该认证记录不是待审核状态

2. 审核拒绝 POST /internal/identity_verification/reject

功能说明

管理员审核拒绝证件图片认证申请。

请求参数

参数类型必填说明
idinteger认证记录ID
reasonstring拒绝原因,最大500字符

请求示例

{
  "id": 123,
  "reason": "证件图片不清晰,请重新上传"
}

响应示例

{
  "success": true,
  "message": "审核拒绝成功"
}

用户信息中的认证状态

identity_verification_status 字段

在用户信息接口 (/user/info) 返回中,新增 identity_verification_status 字段,前端只需判断此字段即可:

说明前端显示建议
none未提交认证"去认证"
pending审核中"审核中"
verified已认证"已认证"

响应示例

{
  "data": {
    "id": 100,
    "name": "用户名",
    "email": "user@example.com",
    "is_identity_verified": false,
    "identity_verification_status": "pending"
  }
}

数据模型

认证类型 (verification_type)

说明
id_card_2身份证二要素认证
mobile_3手机号三要素认证
bank_card银行卡认证
face_recognition人脸识别认证
id_card_image证件图片认证(人工审核)

认证状态 (status)

说明
pending待审核
verified已认证
failed认证失败
cancelled已取消

证件类型 (cert_type)

说明
IDENTITY_CARD大陆身份证
RESIDENCE_HK_MC港澳居民来往内地通行证
RESIDENCE_TAIWAN台湾居民来往大陆通行证
ID_CARD_MANUAL人工审核(证件图片)

完整调用流程示例

场景1:API 自动认证

1. POST /user/identity_verification/id_card
   Body: { "real_name": "张三", "id_card_number": "110101199001011234", "cert_type": "IDENTITY_CARD" }

2. 响应: { "success": true, "message": "认证成功", "data": { "status": "verified" } }

3. GET /user/info
   响应: { "data": { "identity_verification_status": "verified" } }

场景2:证件图片认证(人工审核)

1. POST /upload_image (上传证件正面)
   响应: { "data": { "id": 123 } }

2. POST /upload_image (上传证件反面)
   响应: { "data": { "id": 124 } }

3. POST /user/identity_verification/id_card
   Body: {
     "real_name": "张三",
     "id_card_number": "110101199001011234",
     "cert_type": "ID_CARD_MANUAL",
     "upload_image_ids": [123, 124]
   }
   响应: { "success": true, "message": "证件图片认证已提交,请等待审核", "data": { "status": "pending" } }

4. GET /user/info
   响应: { "data": { "identity_verification_status": "pending" } }

5. [后台] POST /admin_center/identity_verification/approve
   Body: { "id": 1 }

6. GET /user/info
   响应: { "data": { "identity_verification_status": "verified" } }

场景3:取消认证申请

1. (已提交人工审核认证,状态为 pending)

2. POST /user/identity_verification/cancel
   响应: { "success": true, "message": "认证申请已取消" }

3. GET /user/info
   响应: { "data": { "identity_verification_status": "none" } }

4. (可重新提交认证申请)

注意事项

  1. 图片上传:使用 /upload_image 接口上传证件图片,不会压缩原图
  2. 图片归属验证:系统会验证 upload_image_ids 中的图片是否属于当前用户
  3. 重复提交限制:用户有待审核的认证时,无法提交新的认证申请
  4. 取消后可重新提交:取消认证后,用户可以重新提交认证申请
  5. 审核拒绝后可重新提交:认证被拒绝后,用户可以重新提交认证申请

错误码

错误码错误名称说明
30020SystemUserIdentityVerificationFail实名认证相关错误

错误响应格式

{
  "code": 30020,
  "message": "具体错误信息"
}