开发指引

更新时间:2025.07.22

1. 概念说明

  • 资料项:资料项是收集商户资料的一个最小单元,比如“经营者/法定代表人姓名”。包含校验规则。

  • 校验规则:部分资料项会有一些填写要求,比如最长字数、最多上传图片数量等。

  • 关联规则:部分资料项的填写会有关联要求,比如只有当“证件持有人类型”选择”法人“时,”证件正面照片“才是必填。

 

2. 收集资料规则说明

查询尽调记录,记录中都会包含收集资料的规则

类型为字符串,存储内容结构为JSON,含义为要提交资料项的列表,每个资料项包含展示信息与校验规则

示例

这里给出一个说明的示例,旨在帮助研发同学先了解资料项的结构

1{
2  "record_fields": [
3    // 要求提交三个资料项,分别是经营证照证书类型,经营证照证书正面照片,经营证照证书注册号
4    {
5      "item_id": "130001",// 资料项ID,用于唯一的标识一个资料项
6      "field_name": "credential_type",// 资料项英文名(提交资料时需带上)
7      "name": "经营证照证书类型",// 资料项中文名,可用于页面展示(提交资料时需带上)
8      "type": 11,// 资料项类型 11-选择器(默认单选,通过check_rule的max_length判断是不是多选)
9      "tips": "",// 资料项填写提示,一般在资料项名下小字展示
10      "placeholder": "",// 输入框占位文案,用于在尚未填写时提示商户输入内容
11      "tooltip": "",// 叹号悬浮提示语,一般复杂资料项,会有叹号标识,鼠标悬浮在上面后会展示提示信息
12      "required": 1,// 是否必须提交 0-非必填 1-必填
13      "check_rule": {// 校验规则
14        // 这里表示枚举只能选一个
15        "min_length": 1,// 最小选择个数
16        "max_length": 1,// 最大选择个数
17        "enum_keys": [1, 2388, 2389],// 枚举可选的字段枚举值,与enum_values一一对应,提交资料时需提交enum_key
18        "enum_values": ["营业执照", "事业单位法人证书", "统一社会信用代码证书"]// 展示给商户看的枚举可选的字段列表
19      },
20      "need_encrypt":false // 提交内容不需要加密
21    },
22    {
23      "item_id": "130002",// 资料项ID,用于唯一的标识一个资料项
24      "field_name": "credential_front_photo",// 资料项英文名(提交资料时需带上)
25      "name": "证书正面照片",// 资料项中文名,可用于页面展示(提交资料时需带上)
26      "type": 2,// 资料项类型 2-图片
27      "tips": "",
28      "placeholder": "",// 输入框占位文案,用于在尚未填写时提示商户输入内容
29      "tooltip": "<p>1、请上传三证合一的主体证照彩色照片、彩色扫描件或加盖公章鲜章的复印件(暂不支持电子章)。个体工商户类型商户证照如为复印件,应加盖公章鲜章或有经营者的签字捺印;</p><p>2、需正面拍摄,露出证件四角且清晰、完整,所有字符清晰可识别,不得反光或遮挡。不得翻拍、截图、镜像、PS;</p><p>3、图片只支持JPG、BMP、PNG格式,文件大小不能超过2M。</p>",// 叹号悬浮提示语,一般复杂资料项,会有叹号标识,鼠标悬浮在上面后会展示提示信息
30      "required": 1,// 是否必须提交 0-非必填 1-必填
31      "need_encrypt":false, // 提交内容不需要加密
32      "check_rule": {// 文件校验规则
33        // 这里表示上传1张图片,格式必须为["png", "jpg", "jpeg"]内
34        "min_length": 1,// 最小列表长度,为0时不限制
35        "max_length": 1,// 最大列表长度,为0时不限制
36        "enum_file_exts": ["png", "jpg", "jpeg"],// 限制提交的文件后缀
37        "max_file_size": 2 // 限制文件提交大小,单位M
38        },
39      "need_encrypt": false // 提交内容不需要加密
40    },
41    {
42      "item_id": "130003",// 资料项ID,用于唯一的标识一个资料项
43      "field_name": "credential_license_number",// 资料项英文名(提交资料时需带上)
44      "name": "经营证照证书注册号",// 资料项中文名,可用于页面展示(提交资料时需带上)
45      "type": 1,// 资料项类型,不同资料项类型有不同的校验规则 1-文本
46      "tips": "",// 资料项填写提示,一般在资料项名下小字展示
47      "placeholder": "请输入经营证照证书注册号",// 输入框占位文案,用于在尚未填写时提示商户输入内容
48      "tooltip": "需要填写完整证书注册号",// 叹号悬浮提示语,一般复杂资料项,会有叹号标识,用于在鼠标悬浮在上面后展示提示信息
49      "required": 1,// 是否必须提交 0-非必填 1-必填
50      "check_rule": {// 字符串校验规则
51        "min_length": 1,// 字符串最小长度,为0时不限制
52        "max_length": 300, // 字符串最大长度,为0时不限制       
53        },
54      "relations": [
55        {"source_key": 130002, "source_value": "营业执照"} // 当130002资料项选择"营业执照"时,才展示这个资料项让商户填写
56      ],
57      "need_encrypt":true // 提交内容需要加密
58    } 
59  ]
60}

资料项类型

type枚举值

资料项类型

校验规则

提交资料内容

1

文本

文本最小长度,文本最大长度

validor校验规则

字符串

2

图片

最小上传数量,最大上传数量

图片后缀名

目前所有资料项的文件后缀:

图片:jpeg,jpg,png, bmp, gif

图片最大大小

通过上传接口拿到的文件ID

11

选择器

最小选择数量,最大选择数量

是否是给定集合内的枚举值

给定范围内的枚举值,可能一个或多个

15

日期

固定结构,YYYY-MM-DD 结构的日期字符串

长期有效时为“长期”

资料规则结构解析

收集规则列表中一个资料项完整pb结构如下所示

1/*
2 * 资料项
3 **/
4message SubmissionItem
5{
6    optional uint64 item_id = 1; // 资料项唯一ID
7    optional string field_name = 2; // 资料项英文名
8    optional string name = 3; // 资料项名称
9    optional uint64 type = 4; // 资料项类型
10    optional string field_data = 5; // 资料项值(单值类型)
11    repeated string repeated_field_data = 6; // 资料项值(多值类型)
12    optional string tips = 7; // 填写指引
13    optional uint64 required = 8; // 是否必填,0非必填, 1必填
14    optional uint64 use_permanently_date = 9; // 日期类型是否可勾选“长期有效”,0不允许,1允许
15    optional SubmissionItemCheckRule check_rule = 10; // 资料项校验规则
16    repeated SubmissionItemRelation relations = 11; // 资料项关联关系
17    optional uint64 disabled = 12; // 是否允许修改内容,0可以修改,1禁止修改
18    optional uint64 hidden = 13; // 是否隐藏资料项,0或空值展示,1不展示
19    optional string placeholder = 14; // 输入占位文案
20    optional string tooltip = 15; // 悬浮提示语
21    optional bool need_encrypt = 16; // 是否需要加密,若为true,提交结果field_data字段的string或repeated_field_data字段里每个string都要加密
22  // 加密规则参考https://wechatpay-api.gitbook.io/wechatpay-api-v3/qian-ming-zhi-nan-1/min-gan-xin-xi-jia-mi
23
24}
25
26
27/*
28 * 资料项校验规则
29 **/
30message SubmissionItemCheckRule
31{
32    optional uint64 min_length = 1; // 允许的最小长度
33    optional uint64 max_length = 2; // 允许的最大长度
34    repeated string enum_keys = 3; // 允许的枚举值列表
35    repeated string enum_values = 4; // 允许的枚举描述列表
36    repeated string enum_file_exts = 5; // 允许的文件后缀名,不带点号
37    optional uint64 max_file_size = 6; // 允许的最大文件大小,单位M
38}
39
40/*
41 * 资料项关联规则,具体说明见后文
42 **/
43message SubmissionItemRelation
44{
45    optional uint64 source_key = 1; // 触发源的资料项,存的是资料项的item_id
46    optional string source_value = 2; // 触发源的值,表现为当source_key的资料项取xx值的时候,才显示本资料项
47    // 同source_key之间是“或”关系,不同source_key之间是“且”关系,或关系优先且关系
48}

资料项关联规则说明

资料项关联规则可以出现在任意类型的资料项下,以法人证件反面照片为例

规则是列表中的枚举值按item_id聚合,相同item_id是或关系,不同item_id之间是且的关系,先处理或条件,再处理且条件,仅一层嵌套

比如下面这个例子:130014资料项仅当(130012资料项取值为"法人") 且(100077资料项取值为"身份证(中国大陆居民)" 或 "来往内地通行证(中国香港居民)")时才展示,不满足条件不展示给商户填写(必填的判断规则优先级在展示之后,只有展示了的资料项才校验是否必填)

也就是说,当本资料项存在relations列表时,需要寻找relations列表中的资料项,当商户选择了对应资料项的对应枚举值,满足条件时,才在页面展示本资料项供商户填写

1{
2      "item_id": "130014",// 资料项ID,用于唯一的标识一个资料项
3      "field_name": "certificate_back_photo",// 资料项英文名(提交资料时需带上)
4      "name": "证件反面照片",// 资料项中文名,可用于页面展示(提交资料时需带上)
5      "type": 2,// 资料项类型 2-图片
6      "tips": "请上传图片",
7      "placeholder": "",// 输入框占位文案,用于在尚未填写时提示商户输入内容
8      "tooltip": "",// 叹号悬浮提示语,一般复杂资料项,会有叹号标识,鼠标悬浮在上面后会展示提示信息
9      "required": 1,// 是否必须提交 0-非必填 1-必填
10      "need_encrypt":false // 提交内容不需要加密
11      "check_rule": {
12        // 这里表示上传1张图片,格式必须为["png", "jpg", "jpeg"]内
13        "min_list_length": 1,// 最小列表长度
14        "max_list_length": 1,// 最大列表长度
15        "enum_file_exts": ["png", "jpg", "jpeg"],// 限制提交的文件后缀
16        "max_file_size": 2 // 限制文件提交大小,单位M
17      },
18
19      // (130012资料项取值为"法人") 且(100077资料项取值为"身份证(中国大陆居民)" 或 "来往内地通行证(中国香港居民)")时才展示,不满足条件就不展示给商户填写
20      "relations": [
21        {"source_key": 130012, "source_value": "法人"},
22        {"source_key": 100077, "source_value": "身份证(中国大陆居民)"},
23        {"source_key": 100077, "source_value": "来往内地通行证(中国香港居民)"},
24      ]
25}

资料项关联规则补充说明

有时候返回的资料项的hidden属性为 1,此时不应该展示给商户看,但可能该资料项已经被预设了field_data,比如下发前已经默认判断商户的证件持有人是法人,此时不会让商户重新选择证件持有人类型,但其他依赖该资料项展示的资料项,依然要基于其内容进行判断。

各类型资料项示例

文本类型

1{
2      "item_id": "130003",// 资料项ID,用于唯一的标识一个资料项
3      "field_name": "credential_license_number",// 资料项英文名(提交资料时需带上)
4      "name": "证书注册号",// 资料项中文名,可用于页面展示(提交资料时需带上)
5      "type": 1,// 资料项类型,不同资料项类型有不同的校验规则 1-文本
6      "tips": "",// 资料项填写提示,一般在资料项名下小字展示
7      "placeholder": "请填写",// 输入框占位文案,用于在尚未填写时提示商户输入内容
8      "tooltip": "",// 叹号悬浮提示语,一般复杂资料项,会有叹号标识,鼠标悬浮在上面后会展示提示信息
9      "required": 1,// 是否必须提交 0-非必填 1-必填
10      "check_rule": {// 校验规则
11        "min_length": 1,// 字符串最小长度,为0时不限制
12        "max_length": 300 // 字符串最大长度,为0时不限制
13      },
14      "need_encrypt":true // 提交内容需要加密
15}

图片类型

1{
2      "item_id": "130002",// 资料项ID,用于唯一的标识一个资料项
3      "field_name": "credential_front_photo",// 资料项英文名(提交资料时需带上)
4      "name": "证书正面照片",// 资料项中文名,可用于页面展示(提交资料时需带上)
5      "type": 2,// 资料项类型 2-图片
6      "tips": "请上传图片",
7      "placeholder": "",// 输入框占位文案,用于在尚未填写时提示商户输入内容
8      "tooltip": "",// 叹号悬浮提示语,一般复杂资料项,会有叹号标识,鼠标悬浮在上面后会展示提示信息
9      "required": 1,// 是否必须提交 0-非必填 1-必填
10      "check_rule": {
11        // 这里表示上传1张图片,格式必须为["png", "jpg", "jpeg"]内
12        "min_length": 1,// 最小列表长度
13        "max_length": 1,// 最大列表长度
14        "enum_file_exts": ["png", "jpg", "jpeg"],// 限制提交的文件后缀
15        "max_file_size": 2 // 限制文件提交大小,单位M
16      },
17      "need_encrypt":false // 提交内容不需要加密
18} 

选择器类型

1{
2      "item_id": "130001",// 资料项ID,用于唯一的标识一个资料项
3      "field_name": "credential_type",// 资料项英文名(提交资料时需带上)
4      "name": "证书类型",// 资料项中文名,可用于页面展示(提交资料时需带上)
5      "type": 11,// 资料项类型,不同资料项类型有不同的校验规则 11-选择器
6      "tips": "",// 资料项填写提示,一般在资料项名下小字展示
7      "placeholder": "",// 输入框占位文案,用于在尚未填写时提示商户输入内容
8      "tooltip": "",// 叹号悬浮提示语,一般复杂资料项,会有叹号标识,鼠标悬浮在上面后会展示提示信息
9      "required": 1,// 是否必须提交 0-非必填 1-必填
10      "check_rule": {// 校验规则
11        "min_length": 1,// 最小选择个数
12        "max_length": 1,// 最大选择个数
13        "enum_keys": [1, 2388, 2389],// 枚举可选的字段枚举值,与enum_values一一对应,提交资料时需提交enum_key
14        "enum_values": ["营业执照", "事业单位法人证书", "统一社会信用代码证书"]// 展示给商户看的枚举可选的字段列表
15      },
16      "need_encrypt":false // 提交内容不需要加密
17}

日期类型

1{
2      "item_id": "130006",// 资料项ID,用于唯一的标识一个资料项
3      "field_name": "credential_end_date",// 资料项英文名(提交资料时需带上)
4      "name": "经营证照有效期结束日期",// 资料项中文名,可用于页面展示(提交资料时需带上)
5      "type":  15,// 资料项类型,不同资料项类型有不同的校验规则 15-日期
6      "tips": "",// 资料项填写提示,一般在资料项名下小字展示
7      "placeholder": "",// 输入框占位文案,用于在尚未填写时提示商户输入内容
8      "tooltip": "",// 叹号悬浮提示语,一般复杂资料项,会有叹号标识,鼠标悬浮在上面后会展示提示信息
9      "required": 1,// 是否必须提交 0-非必填 1-必填
10      "use_permanently_date": 1,// 日期类型是否可勾选“长期有效”,0不允许,1允许
11      "enum_check_rule": {
12        // 这里表示枚举只能从enum_values里面选一个
13        "min_length": 0,// 最小列表长度,为0时不限制
14        "max_length": 0// 最大列表长度,为0时不限制
15      },
16      "need_encrypt":false // 提交内容不需要加密
17}

3. 商户端提交的资料结果格式

根字段名

字段类型

字段描述

必填

备注

record_fields

Array<Object>

资料项数组

必填

 

资料项数组

示例数据

1// 四类资料项类型均给出示例
2{
3    	"record_fields": [
4        { // 字符串类型
5            "item_id": 130004,
6            "field_name": "credential_registration_address",
7            "name": "证书注册地址",
8            "type": 1,
9            "field_data": "ri8U5FUSmHh1peGNBUvG+VwGHl31ymiLms5V1yhTbBWUApJDInme1b+ndtrlAielJYpQE41sSxj46ePMto2mySBIJjgCIyChLCTQ580M5pNKglAkjTnXwzJXyPhpyzkpdeFfUDjWc+qd6G4UwrL70br/EEqfQbGNaUKX6jAGjB8wd8wndImMB3iB2vUuAOL+6giLWCBBaC50QRfCTDlGi0c41Gt92tCrRSI7pWzU1cxxJwng7M53/J5PhI+eikLqbhUYlRPHYl6j0ouRItWHCRORYKuz6enluXyFwUCaaR3IeINSM8CwjHp6spnTIo70UaRJWAcZ0jQp/lwX2JVxaw=="// 加密后的地址
10        },
11        { // 日期类型
12            "item_id": 130005,
13            "field_name": "credential_start_date",
14            "name": "经营证照有效期开始日期",
15            "type": 15,
16            "field_data": "2020-01-03"
17        },
18        { // 日期类型——长期
19            "item_id": 130006,
20            "field_name": "credential_end_date",
21            "name": "经营证照有效期结束日期",
22            "type": 15,
23            "field_data": "长期"
24        },
25        { // 选择器类型——多选
26            "item_id": 130068,
27            "field_name": "account_opening_purpose",
28            "name": "开户目的",
29            "type": 11,
30            "repeated_field_data": [
31                "1",
32                "2"
33            ]
34        },
35        { // 选择器类型——单选
36            "item_id": 100077,
37            "field_name": "certificate_type",
38            "name": "证件类型",
39            "type": 11,
40            "field_data": "68"
41        },
42        { // 图片类型
43            "item_id": 130013,
44            "field_name": "certificate_front_photo",
45            "name": "证件正面照片",
46            "type": 2,
47            "field_data": "V1_B1JjMhCA3714g4Gbs_hDBh4PbttbD2HZt3pLGMZ_mVUn-szjdkQSiyXMnEIUr-kDDHYM5lMVFuQ1D1sCPOC-pcbhCQxYfQ9hsKcnyfisSnBL"
48        },
49        { // 图片类型
50            "item_id": 130014,
51            "field_name": "certificate_back_photo",
52            "name": "证件反面照片",
53            "type": 2,
54            "field_data": "V1_aF69-5OeYw4LBJnCeed10x4PbttbD2HZc57Kb6fhhi7dHYuwpHDzASWilEIUr-kDDBKiBx2w_0268DLMgNQb1lbhCQxYfQ9hsKcnyfisSnBL"
55        }
56	]
57}

4. 订阅通知说明

尽调回调通知JSON结构

触发时机:发起尽调,审核通过,审核驳回时,都会发起订阅通知。

通知消息示例:

1消息主题id:20007
2消息主题:尽调通知
3商户号:00000000000
4商户全称:测试商户号
5业务发生时间:2024-11-01 12:00:00 // 尽调单据最近更新时间
6业务单据:xxx // 尽调单据号
7业务状态:DUE_DILIGENCE_STATE_COLLECTING // 状态枚举见下文
8备注:

状态枚举说明:

1DUE_DILIGENCE_STATE_COLLECTING--新增待填写单据
2DUE_DILIGENCE_STATE_AUDITING--单据审核中
3DUE_DILIGENCE_STATE_REJECTED--单据已驳回
4DUE_DILIGENCE_STATE_EXPIRED--单据已过期
5DUE_DILIGENCE_STATE_CANCELLED--单据已终止
6DUE_DILIGENCE_STATE_FINISHED--单据已完成

5. 尽调单据状态扭转图