Skip to content

获取授权验证码

概述 ​

本文按 APP 支付接口模版整理,保留原接口字段含义,并统一补充签名说明、正式/沙箱示例、多语言请求示例和结果判定口径。

接口说明 ​

获取授权验证码 属于虚拟银行接口。调用方需按公共参数组装请求并完成签名;响应包含 sign 时,应先验签再解析 bizData。

接口名称获取授权验证码
请求方式POST
正式地址https://pay.rscygroup.com/api/open/virtualBank/acct/sendMsg/cbhbCht
沙箱地址https://pay-test.rscygroup.com/api/open/virtualBank/acct/sendMsg/cbhbCht
签名方式MD5 ,按签名规则说明生成或校验 sign
结果判定先判断公共返回 code,成功后验签并解析 bizData;最终业务状态以业务字段、查询接口或异步通知为准

流程图 ​

处理要点:

  • 请求前先将业务字段组装为 bizData JSON 字符串,再和公共参数一起参与签名。

  • 响应或通知包含 sign 时,应先按签名规则验签,再解析 bizData。

  • code=000000 表示接口请求处理成功,不等同于所有异步业务流程最终完成。

请求参数 ​

字段名变量名必填类型示例值描述
请求单号reqNo是StringcbhbChtcbhbCht - 固定值
外部请求号outReqNo是String(32)<SIGNATURE>外部请求号
业务场景sceneType是StringOPEN_ENTOPEN - 登记簿开通MODIFY - 登记簿信息修改WHITE_SET - 白名单配置REFUND - 退款

响应参数 ​

字段名变量名必填类型示例值描述
验证码流水号smsFlowNo是String<ID_NUMBER>-
验证码发送手机号mobile是Stirng17324xxxx-
业务场景sceneType是StringOPEN_ENTOPEN - 登记簿开通MODIFY - 登记簿信息修改WHITE_SET - 白名单维护

请求示例 ​

以下示例默认使用 MD5 作为演示模式。签名时先将公共参数按字段名升序排序并拼接为 key=value&key=value,再在原串末尾追加 &appSecret=... 后计算 MD5;生成 sign 后,实际请求体中不要传 appSecret。本页请求示例依赖签名规则说明中的公共签名实现。

bash
curl -X POST "https://pay.rscygroup.com/api/open/virtualBank/acct/sendMsg/cbhbCht" \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "<CONFIGURED_VALUE>",
    "bizData": "{\"reqNo\":\"REQNO<DEMO_ID>\",\"String\":\"StringValue\",\"cbhbCht\":\"cbhbChtValue\",\"outReqNo\":\"OUTREQNO<DEMO_ID>\",\"sceneType\":\"sceneTypeValue\",\"OPEN_ENT\":\"OPEN_ENTValue\",\"smsFlowNo\":\"SMSFLOWNO<DEMO_ID>\",\"mobile\":\"<MOBILE>\",\"Stirng\":\"StirngValue\"}",
    "sign": "<按签名规则生成>",
    "signType": "MD5",
    "reqId": "CBHBCHT<DEMO_ID>",
    "reqTime": "<DEMO_ID>",
    "version": "1.0"
  }'
bash
curl -X POST "https://pay-test.rscygroup.com/api/open/virtualBank/acct/sendMsg/cbhbCht" \
  -H "Content-Type: application/json" \
  -d '{
    "apiKey": "<CONFIGURED_VALUE>",
    "bizData": "{\"reqNo\":\"REQNO<DEMO_ID>\",\"String\":\"StringValue\",\"cbhbCht\":\"cbhbChtValue\",\"outReqNo\":\"OUTREQNO<DEMO_ID>\",\"sceneType\":\"sceneTypeValue\",\"OPEN_ENT\":\"OPEN_ENTValue\",\"smsFlowNo\":\"SMSFLOWNO<DEMO_ID>\",\"mobile\":\"<MOBILE>\",\"Stirng\":\"StirngValue\"}",
    "sign": "<按签名规则生成>",
    "signType": "MD5",
    "reqId": "CBHBCHT<DEMO_ID>",
    "reqTime": "<DEMO_ID>",
    "version": "1.0"
  }'

复用签名规则说明中的 genSign / verifySign 通用方法。

java
Map<String, Object> biz = new LinkedHashMap<>();
biz.put("reqNo", "REQNO<DEMO_ID>");
biz.put("String", "StringValue");
biz.put("cbhbCht", "cbhbChtValue");
biz.put("outReqNo", "OUTREQNO<DEMO_ID>");
biz.put("sceneType", "sceneTypeValue");
biz.put("OPEN_ENT", "OPEN_ENTValue");
biz.put("smsFlowNo", "SMSFLOWNO<DEMO_ID>");
biz.put("mobile", "<MOBILE>");
biz.put("Stirng", "StirngValue");

Map<String, String> req = new LinkedHashMap<>();
req.put("apiKey", "<API_KEY>");
req.put("bizData", mapper.writeValueAsString(biz));
req.put("reqId", "CBHBCHT" + 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 = [
    'reqNo' => 'REQNO<DEMO_ID>',
    'String' => 'StringValue',
    'cbhbCht' => 'cbhbChtValue',
    'outReqNo' => 'OUTREQNO<DEMO_ID>',
    'sceneType' => 'sceneTypeValue',
    'OPEN_ENT' => 'OPEN_ENTValue',
    'smsFlowNo' => 'SMSFLOWNO<DEMO_ID>',
    'mobile' => '<MOBILE>',
    'Stirng' => 'StirngValue',
];

$req = [
    'apiKey' => '<API_KEY>',
    'bizData' => json_encode($biz, JSON_UNESCAPED_UNICODE),
    'reqId' => 'CBHBCHT' . time(),
    'reqTime' => '<DEMO_ID>',
    'signType' => 'MD5',
    'version' => '1.0',
];
$req['sign'] = $demo->genSign($req);
python
biz = {
    'reqNo': 'REQNO<DEMO_ID>',
    'String': 'StringValue',
    'cbhbCht': 'cbhbChtValue',
    'outReqNo': 'OUTREQNO<DEMO_ID>',
    'sceneType': 'sceneTypeValue',
    'OPEN_ENT': 'OPEN_ENTValue',
    'smsFlowNo': 'SMSFLOWNO<DEMO_ID>',
    'mobile': '<MOBILE>',
    'Stirng': 'StirngValue',
}
req = {
    'apiKey': '<API_KEY>',
    'bizData': json.dumps(biz, ensure_ascii=False),
    'reqId': f'CBHBCHT{int(time.time())}',
    'reqTime': '<DEMO_ID>',
    'signType': 'MD5',
    'version': '1.0',
}
req['sign'] = gen_sign(req, 'MD5')
javascript
const biz = {
  "reqNo": "REQNO<DEMO_ID>",
  "String": "StringValue",
  "cbhbCht": "cbhbChtValue",
  "outReqNo": "OUTREQNO<DEMO_ID>",
  "sceneType": "sceneTypeValue",
  "OPEN_ENT": "OPEN_ENTValue",
  "smsFlowNo": "SMSFLOWNO<DEMO_ID>",
  "mobile": "<MOBILE>",
  "Stirng": "StirngValue",
};
const req = {
  apiKey: '<CONFIGURED_VALUE>',
  bizData: JSON.stringify(biz),
  reqId: 'CBHBCHT' + Date.now(),
  reqTime: '<DEMO_ID>',
  signType: 'MD5',
  version: '1.0',
};
req.sign = genSign(req, 'MD5');
json
{
  "apiKey": "<DEMO_ID>",
  "sign": "<SIGNATURE>",
  "signType": "MD5",
  "bizData": "{\"reqNo\":\"REQXX456X456X456\", \"sceneType\":{\"OPEN\"}",
  "reqTime": "<DEMO_ID>",
  "version": "1.0",
  "reqId": "1511ff20-a701-4616-84c8-f72ad4abb2d2"
}

响应示例 ​

json
{
  "code": "000000",
  "msg": "请求成功",
  "timestamp": "<DEMO_ID>",
  "sign": "<SIGNATURE>",
  "signType": "MD5",
  "bizData": "{\"smsFlowNo\":\"<ID_NUMBER>\",\"mobile\":\"17324xxxx\",\"sceneType\":\"OPEN\"}"
}

结果判定口径 ​

  • 公共状态:code=000000 表示接口请求处理成功;非 000000 时按 msg 排查签名、参数或业务校验问题。

  • 业务状态:如响应 bizData 内存在 state、status、result、batchNo、orderNo、reqNo 等字段,应以对应业务字段作为后续处理依据。

  • 验签顺序:响应或通知中返回 sign 时,先验签再解析和入库 bizData。

  • 异步场景:同步成功通常只代表请求受理,最终结果以回调通知或查询接口为准。

错误处理 ​

  • 签名失败:核对 apiKey、signType、密钥、参数排序、bizData 字符串化方式和字符编码。

  • 参数错误:按本页请求参数表检查必填项、枚举值、金额单位、时间格式和单号唯一性。

  • 业务失败:读取 code、msg 和 bizData 内业务字段,按接口语义修正后再重试。

  • 网络超时或响应未知:不要直接判定业务失败,使用查询接口或平台后台核实后再处理。

接入注意事项 ​

  • reqId 应保证每次请求唯一,便于排查和幂等处理。

  • bizData 必须作为 JSON 字符串参与签名;实际请求体中不要传 appSecret。

  • 生产环境与沙箱环境的应用、密钥和数据通常相互隔离,联调时请确认使用对应环境配置。

  • 金额字段如无特殊说明,按源文档口径以“分”为单位。

  • 字段枚举、状态流转和条件必填规则以本页参数说明为准;源文档未说明的场景请联系平台确认。