切换主题
登记簿开户
接口说明
登记簿开户 属于虚拟银行接口。调用方需按公共参数组装请求并完成签名;响应包含 sign 时,应先验签再解析 bizData。
| 接口名称 | 登记簿开户 |
|---|---|
| 请求方式 | POST |
| 正式地址 | https://pay.rscygroup.com/api/open/virtualBank/acct/addApply |
| 沙箱地址 | https://pay-test.rscygroup.com/api/open/virtualBank/acct/addApply |
| 签名方式 | MD5 ,按签名规则说明生成或校验 sign |
| 结果判定 | 先判断公共返回 code,成功后验签并解析 bizData;最终业务状态以业务字段、查询接口或异步通知为准 |
主体唯一标识规则 — 企业以营业执照号唯一标识;个人以身份证号唯一标识。
审核中记录限制 — 同一个主体(企业/个人)在任意时间点 只能存在一个审核中的开户记录(发起方或收款方任一角色)。
账户数量限制 — 同一个主体 只能开通一个账户(发起方或收款方中的一个)。
企业角色限制 — 企业主体只能选择 发起方或收款方其中一个角色开通账户,不可同时具备两种角色。
企业角色切换规则 — 若企业主体已开通为收款方,后续开通为发起方后,原收款方账户将不可再使用(视为被替换)。
个人主体角色限制 — 个人主体 只能作为收款方 开通账户,不允许开通为发起方。
流程图
处理要点:
请求前先将业务字段组装为 bizData JSON 字符串,再和公共参数一起参与签名。
响应或通知包含 sign 时,应先按签名规则验签,再解析 bizData。
code=000000 表示接口请求处理成功,不等同于所有异步业务流程最终完成。
请求参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 通道编码 | ifCode | 是 | String | cbhbCht | cbhbCht - 固定值 |
| 外部请求号 | outReqNo | 是 | String(32) | <SIGNATURE> | 外部请求号 |
| 账户角色 | acctRole | 是 | String | FQ | FQ - 发起方,JS - 收款方 |
| 开户资料 | subjectInfo | 是 | SubjectInfo | - | - |
| 开户结果通知链接 | notifyUrl | 否 | String | - | - |
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 主体类型 | entPerFlag | 是 | String | P | E - 企业(包含个体) P - 个人 |
| 企业类型 | entType | 否 | String | - | 02 - 非法人企业 03 - 个体工商户 |
| 电子记账簿类型 | eleAcctType | 是 | String | 1 | 1 - 基本户 |
| 法人/个人姓名 | idCardName | 是 | String | 张三 | - |
| 法人/个人身份证号 | idCardNo | 是 | String | <ID_NUMBER> | - |
| 法人/个人手机号 | idCardPhone | 是 | String | <MOBILE> | - |
| 法人/个人身份证人像面图片链接 | idCard1Img | 是 | String | - | 必须外部可以访问 |
| 法人/个人身份证国徽面图片链接 | idCard2Img | 是 | String | - | 必须外部可以访问 |
| 身份证有效期开始时间 | idCardEffectBegin | 是 | String | 2020-05-20 | 格式 yyyy-MM-dd; |
| 身份证有效期截止时间 | idCardEffectEnd | 是 | String | - | 格式 yyyy-MM-dd;长期填 “长期” |
| 身份证上的地址 | address | 是 | String | - | - |
| 绑定账户类型 | settAccountType | 否 | String | E | 主体为企业时,必填; 绑定账户类型; E - 对公 P - 对私(个体户可选) |
| - | companyAccountLicenseImg | - | - | - | - |
| 绑定账户号 | settAccountNo | 是 | String | 6217******** | 绑定银行账户;个人银行卡卡号或对公开户许可证账号 |
| 绑定账户名称 | settAccountName | 是 | String | 1AAC1231 | 绑定账户名称;个人姓名或对公营业执照名称 |
| 开户支行行号 | settAccountBankBranchCode | 是 | String | <DEMO_ID> | 开户支行行号 |
| 开户支行行名 | settAccountBankBranchName | 是 | String | xxxxx支行 | - |
| 银行卡预留手机号 | settAccountPhone | 否 | String | <MOBILE> | 主体为个人时,必填 |
| 绑定账户行内外标识 | bindAcctInnerFlag | 否 | String | 0 | 0 - 行外,不是渤海银行;1 - 行内,是渤海银行; |
| - | - | - | - | - | professionCbhbCht.json 4.68KB |
| 营业执照号 | licenseNo | 否 | String | 9142010XXXX | 主体为企业时,必填 |
| 营业执照名称 | licenseName | 否 | String | 张三科技 | 主体为企业时,必填 |
| 营业执照有效期开始时间 | licenseEffectBegin | 否 | String | 2025-11-11 | 主体为企业时,必填 |
| 营业执照有效期截止时间 | licenseEffectEnd | - | - | - | - |
| 营业执照地址 | licenseAddress | 否 | String | - | 主体为企业时,必填 |
| 营业执照图片链接 | licenseImg | 否 | String | - | 主体为企业时,必填 |
| 注册资金 | regCapital | 否 | String | - | 主体为企业时,必填 |
| 注册资金币种 | regCapCurr | 否 | String | CNY | 主体为企业时,必填 |
| 行业分类 | industryTpCd | 否 | String | B101 | 主体为企业时,必填 门类编码+后面对应的小类或者中类编码 行业分类.csv 通用取值,I6420 律所行业取值,L7221 |
| 是否用法人信息填充经办人 | agentUseCorpInfoFlag | 否 | String | 1 | 主体为企业时,默认值为 1 |
| - | - | 否,经办人不是法人时,必填 | - | - | - |
| 经办人身份证号 | agentIdNo | - | String | 43511xxxx | - |
| 经办人身份证有效期开始时间 | agentVisaDate | - | String | 2026-06-10 | 格式yyyy-MM-dd |
| 经办人身份证有效期截止时间 | agentLostDate | - | String | 2036-06-10 | 格式yyyy-MM-dd,若为长期,则传 长期 |
| 经办人手机号 | agentPhone | - | String | <DEMO_ID> | - |
| 经办人身份证人像面 | agentIdCard1Img | - | String | http://xxx | 必须外部可以访问 |
| 经办人身份证国徽面 | agentIdCard2Img | - | String | http://xxx | 必须外部可以访问 |
| 经办人授权书 | authLetterImg | - | String | http://xxxx | 必须外部可访问 示例模板a1e74b11-ec1d-3df4-a1e7-4b11ec1d3df4.pdf |
| 经办人多次使用说明 | agentReuseReasonDesc | 否, | String | - | 经办人使用超过5次时,必填 |
| 业务场景 | businessScenario | 否,发起方必填 | String | 4 | 业务场景: 1 - 公域电商; 2 - 私域经营; 3 - 线下连锁; 4 - 游戏类别; 5 - 特殊商户; |
| 业务场景说明 | businessSceneDesc | 否,发起方必填 | String | - | 用于xxxx线上店铺收款 |
| 补充文件说明 | extensionData | - | String | ["http://xxxx.jpg", "http://xxx.pdf"] | JSON的字符串,链接必须外网可访问 |
响应参数
| 字段名 | 变量名 | 必填 | 类型 | 示例值 | 描述 |
|---|---|---|---|---|---|
| 请求单号 | reqNo | 是 | String | REQ<DEMO_ID> | - |
| 外部请求单号 | outReqNo | 是 | Stirng | <SIGNATURE> | 同请求传过来的单号 |
| 状态 | state | 是 | Number | - | 5:待签约; 7:待平台预审; 更多状态信息见 附录1.1 |
请求示例
以下示例默认使用 MD5 作为演示模式。签名时先将公共参数按字段名升序排序并拼接为 key=value&key=value,再在原串末尾追加 &appSecret=... 后计算 MD5;生成 sign 后,实际请求体中不要传 appSecret。本页请求示例依赖签名规则说明中的公共签名实现。
bash
curl -X POST "https://pay.rscygroup.com/api/open/virtualBank/acct/addApply" \
-H "Content-Type: application/json" \
-d '{
"apiKey": "<CONFIGURED_VALUE>",
"bizData": "{\"ifCode\":\"cbhbCht\",\"String\":\"StringValue\",\"cbhbCht\":\"cbhbChtValue\",\"outReqNo\":\"OUTREQNO<DEMO_ID>\",\"acctRole\":\"ACCTROLE<DEMO_ID>\",\"subjectInfo\":\"subjectInfoValue\",\"SubjectInfo\":\"SubjectInfoValue\",\"entPerFlag\":\"entPerFlagValue\",\"eleAcctType\":\"ELEACCTTYPE<DEMO_ID>\",\"idCardName\":\"IDCARDNAME<DEMO_ID>\"}",
"sign": "<按签名规则生成>",
"signType": "MD5",
"reqId": "ADDAPPLY<DEMO_ID>",
"reqTime": "<DEMO_ID>",
"version": "1.0"
}'bash
curl -X POST "https://pay-test.rscygroup.com/api/open/virtualBank/acct/addApply" \
-H "Content-Type: application/json" \
-d '{
"apiKey": "<CONFIGURED_VALUE>",
"bizData": "{\"ifCode\":\"cbhbCht\",\"String\":\"StringValue\",\"cbhbCht\":\"cbhbChtValue\",\"outReqNo\":\"OUTREQNO<DEMO_ID>\",\"acctRole\":\"ACCTROLE<DEMO_ID>\",\"subjectInfo\":\"subjectInfoValue\",\"SubjectInfo\":\"SubjectInfoValue\",\"entPerFlag\":\"entPerFlagValue\",\"eleAcctType\":\"ELEACCTTYPE<DEMO_ID>\",\"idCardName\":\"IDCARDNAME<DEMO_ID>\"}",
"sign": "<按签名规则生成>",
"signType": "MD5",
"reqId": "ADDAPPLY<DEMO_ID>",
"reqTime": "<DEMO_ID>",
"version": "1.0"
}'复用签名规则说明中的 genSign / verifySign 通用方法。
java
Map<String, Object> biz = new LinkedHashMap<>();
biz.put("ifCode", "cbhbCht");
biz.put("String", "StringValue");
biz.put("cbhbCht", "cbhbChtValue");
biz.put("outReqNo", "OUTREQNO<DEMO_ID>");
biz.put("acctRole", "ACCTROLE<DEMO_ID>");
biz.put("subjectInfo", "subjectInfoValue");
biz.put("SubjectInfo", "SubjectInfoValue");
biz.put("entPerFlag", "entPerFlagValue");
biz.put("eleAcctType", "ELEACCTTYPE<DEMO_ID>");
biz.put("idCardName", "IDCARDNAME<DEMO_ID>");
Map<String, String> req = new LinkedHashMap<>();
req.put("apiKey", "<API_KEY>");
req.put("bizData", mapper.writeValueAsString(biz));
req.put("reqId", "ADDAPPLY" + System.currentTimeMillis());
req.put("reqTime", "<DEMO_ID>");
req.put("signType", "MD5");
req.put("version", "1.0");
req.put("sign", SignDemo.genSign(req, "MD5"));PHP 示例中的 SignDemo 类不在本页定义,推荐来自统一签名类实例。
php
<?php
require_once __DIR__ . '/SignDemo.php';
$demo = new SignDemo();
$biz = [
'ifCode' => 'cbhbCht',
'String' => 'StringValue',
'cbhbCht' => 'cbhbChtValue',
'outReqNo' => 'OUTREQNO<DEMO_ID>',
'acctRole' => 'ACCTROLE<DEMO_ID>',
'subjectInfo' => 'subjectInfoValue',
'SubjectInfo' => 'SubjectInfoValue',
'entPerFlag' => 'entPerFlagValue',
'eleAcctType' => 'ELEACCTTYPE<DEMO_ID>',
'idCardName' => 'IDCARDNAME<DEMO_ID>',
];
$req = [
'apiKey' => '<API_KEY>',
'bizData' => json_encode($biz, JSON_UNESCAPED_UNICODE),
'reqId' => 'ADDAPPLY' . time(),
'reqTime' => '<DEMO_ID>',
'signType' => 'MD5',
'version' => '1.0',
];
$req['sign'] = $demo->genSign($req);python
biz = {
'ifCode': 'cbhbCht',
'String': 'StringValue',
'cbhbCht': 'cbhbChtValue',
'outReqNo': 'OUTREQNO<DEMO_ID>',
'acctRole': 'ACCTROLE<DEMO_ID>',
'subjectInfo': 'subjectInfoValue',
'SubjectInfo': 'SubjectInfoValue',
'entPerFlag': 'entPerFlagValue',
'eleAcctType': 'ELEACCTTYPE<DEMO_ID>',
'idCardName': 'IDCARDNAME<DEMO_ID>',
}
req = {
'apiKey': '<API_KEY>',
'bizData': json.dumps(biz, ensure_ascii=False),
'reqId': f'ADDAPPLY{int(time.time())}',
'reqTime': '<DEMO_ID>',
'signType': 'MD5',
'version': '1.0',
}
req['sign'] = gen_sign(req, 'MD5')javascript
const biz = {
"ifCode": "cbhbCht",
"String": "StringValue",
"cbhbCht": "cbhbChtValue",
"outReqNo": "OUTREQNO<DEMO_ID>",
"acctRole": "ACCTROLE<DEMO_ID>",
"subjectInfo": "subjectInfoValue",
"SubjectInfo": "SubjectInfoValue",
"entPerFlag": "entPerFlagValue",
"eleAcctType": "ELEACCTTYPE<DEMO_ID>",
"idCardName": "IDCARDNAME<DEMO_ID>",
};
const req = {
apiKey: '<CONFIGURED_VALUE>',
bizData: JSON.stringify(biz),
reqId: 'ADDAPPLY' + Date.now(),
reqTime: '<DEMO_ID>',
signType: 'MD5',
version: '1.0',
};
req.sign = genSign(req, 'MD5');json
{
"apiKey": "<DEMO_ID>",
"sign": "<SIGNATURE>",
"signType": "MD5",
"bizData": "{\"ifCode\":\"cbhbCht\",\"outReqNo\":\"<SIGNATURE>\",\"subjectInfo\":{\"entPerFlag\":\"P\",\"eleAcctType\":\"1\",\"settAccountNo\":\"123456789\",\"settAccountName\":\"张三\",\"settAccountBankBranchCode\":\"<DEMO_ID>\",\"settAccountBankBranchName\":\"xxx银行\",\"idCardName\":\"张三\",\"idCardNo\":\"<ID_NUMBER>\",\"idCardEffectBegin\":\"2020-05-20\",\"idCardEffectEnd\":\"长期\",\"idCardPhone\":\"<MOBILE>\",\"address\":\"xxxx街道\",\"profession\":\"29900\",\"settAccountPhone\":\"<MOBILE>\",\"idCard1Img\":\"http://xxx.png\",\"idCard2Img\":\"http://xxx.png\"}}{\"eleAcctNo\":\"<DEMO_ID>\",\"subCode\":\"00\",\"eleAcctType\":\"1\",\"status\":\"03\"}",
"reqTime": "<DEMO_ID>",
"version": "1.0",
"reqId": "1511ff20-a701-4616-84c8-f72ad4abb2d2"
}响应示例
json
{
"code": "000000",
"msg": "请求成功",
"timestamp": "<DEMO_ID>",
"sign": "<SIGNATURE>",
"signType": "MD5",
"bizData": "{\"reqNo\":\"REQ<DEMO_ID>\",\"outReqNo\":\"<SIGNATURE>\",\"state\":5}"
}结果判定口径
公共状态:code=000000 表示接口请求处理成功;非 000000 时按 msg 排查签名、参数或业务校验问题。
业务状态:如响应 bizData 内存在 state、status、result、batchNo、orderNo、reqNo 等字段,应以对应业务字段作为后续处理依据。
验签顺序:响应或通知中返回 sign 时,先验签再解析和入库 bizData。
异步场景:同步成功通常只代表请求受理,最终结果以回调通知或查询接口为准。
错误处理
签名失败:核对 apiKey、signType、密钥、参数排序、bizData 字符串化方式和字符编码。
参数错误:按本页请求参数表检查必填项、枚举值、金额单位、时间格式和单号唯一性。
业务失败:读取 code、msg 和 bizData 内业务字段,按接口语义修正后再重试。
网络超时或响应未知:不要直接判定业务失败,使用查询接口或平台后台核实后再处理。
接入注意事项
reqId 应保证每次请求唯一,便于排查和幂等处理。
bizData 必须作为 JSON 字符串参与签名;实际请求体中不要传 appSecret。
生产环境与沙箱环境的应用、密钥和数据通常相互隔离,联调时请确认使用对应环境配置。
金额字段如无特殊说明,按源文档口径以“分”为单位。
字段枚举、状态流转和条件必填规则以本页参数说明为准;源文档未说明的场景请联系平台确认。
