• 如何接入
  • 快速接入指南
  • SDK介绍
  • SDK接入示例
  • 接口规范

如何接入

若暂未开通开放银行平台开发者账号,请访问注册页进行帐号注册。

第一步:创建应用

开发者登录开放银行平台后,访问管理中心,创建自己所需要的应用。

说明:开放银行平台的数据传输使用SM3WithSM2的签名算法来验证数据可靠性,因此需要设置应用公钥用于验签。应用公钥可自主赋值或通过提供的自动生成密钥对工具随机生成。生成后请将私钥拷贝到本地并妥善保管,服务器不保存任何私钥数据!

1.为您的应用填写名字及上传喜欢的图标:

开放银行平台-创建应用-第一步

2.通过在线生成给应用设置密钥信息(与下面第3步二选一):

开放银行平台-创建应用-第二步1

3.可以选择自行生成密钥信息并填入(与上面第2步二选一):

开放银行平台-创建应用-第二步2

4.提交应用信息,创建成功:

开放银行平台-创建应用-第三步

第二步:签约产品

应用创建成功后,进入应用详情页面,可管理该应用的各项配置与信息。点击关联产品页面,维护已签约的产品(如果未签约任何产品,点击跳转产品库选择想要的产品申请签约)。

关联产品:

开放银行平台-关联产品

产品库:

开放银行平台-产品库

第三步:生成客户端证书(可选)

若开发者通过已创建应用调用API接口时需要校验客户端证书,请进入应用的「安全配置」标签页,生成并下载应用的客户端证书。

开放银行平台-生成客户端证书

第四步:调用服务

开发者可以自己编码实现对接,也可以直接使用我们提供的SDK进行接入。

自行编码实现

可参照接口规范,使用标准HTTPS协议进行对接。

SDK接入

我们提供以下开发语言的Server-Side SDK,你可以根据需要,选择使用。

  • Java
  • PHP
  • Python(含2.x/3.x两个版本)
  • C#
  • C/C++

开发者可以参照SDK接入示例中的说明,进行快速调用。

快速接入指南

开发者可以使用我们提供的多种开发语言的Server-Side SDK,只需要集成该SDK,几行代码就可以完成快速接入。

Server-Side SDK介绍

我们提供以下开发语言的Server-Side SDK,你可以根据需要,选择使用:

SDK使用注意事项

  • 所有开发语言的SDK中的代码仅为示例,供开发者参考。若开发者应用于生产环境中,需要自行进行定制修改,并考虑安全方面的问题。
  • SDK提供的接口对传入参数没有作检查和过滤,开发者在传入参数前,需要自行对传入的参数进行检查和过滤。请务必对传入参数进行安全性检查,防止出现XSS攻击等安全问题。
  • SDK示例中的应用ID(keyId)和请求报文签名私钥(priKey)等仅为示例,实际使用时需要向运营人员索取测试环境的应用ID和请求报文签名私钥并设置,否则使用SDK中示例的应用ID和请求报文签名私钥时,开放银行平台可能会返回“未配置密钥信息,请联系运营人员”。

Java

  1. 仅测试过JDK1.6及以上版本,建议使用JDK1.6及以上版本进行开发。
  2. 日期时间必须为北京时间,注意时区等设置。如果响应报文提示“请求已过期”等类似提示,请检查系统时间是否正确。

PHP

  1. 本SDK需要使用php_curl扩展作为http通讯使用、使用php_openssl扩展作为RSA签名验签使用。因此,请确保开发者系统运行的PHP环境中包含php_curl和php_openssl扩展。
  2. 若你的环境无法启用php_curl扩展,需要自行修改open_util.class.php文件中的getHttpPostResponse方法。若你的环境无法启用php_openssl扩展,需要自行修改open_core.class.php文件中的Signature方法。
  3. open_util.class.php文件中上方3个常量为客户端失败时(如网络异常等),返回的错误提示,非服务端返回内容。因此,你可以自己修改为需要的内容,也可以直接使用原有文件中的内容。
  4. 调试时,可以去掉open_util.class.php文件getHttpPostResponse方法中var_dump(curl_error($curl));和 var_dump(curl_getinfo($curl));两行前面的注释,来显示curl通讯过程中的信息。
  5. open_config.php中的参数为示例参数,开发者需要修改为自己的配置。开发者系统可以根据需要在其它地方初始化这些参数,只要在实例化OpenSDK类时,传入配置参数数组即可。
  6. 日期时间必须为北京时间,注意操作系统或php.ini中的时区和时间设置。如果响应报文提示“请求已过期”等类似提示,请检查系统时间是否正确。

Python

  1. 下载的zip包中包含python2和python3两种版本的SDK,请根据开发者自己系统情况,选择合适的版本进行使用。
  2. 本SDK需要使用rsa扩展作为签名使用,请使用pip install rsa或其它方法进行安装。
  3. 若你的环境无法启用rsa扩展,需要自行修改signature函数。
  4. 日期时间必须为北京时间,注意操作系统的时间设置。如果响应报文提示“请求已过期”等类似提示,请检查系统时间是否正确。

C#

  1. 需要导入开源库BouncyCastle1.8.1,下载地址:http://www.bouncycastle.org/csharp/

C/C++

  1. 编译时需要有curl和openssl的lib库。
  2. 环境需带有cc或gcc,可自行下载安装。
  3. 在sdk所在路径,执行make即可编译产生可执行文件open。开发者也可以自行修改makefile文件来实现个性化需求。
  4. 请求的地址,需要在全局变量中进行定义:
/* 生产环境 */
char* postUrl ="https://open.cibfintech.com";

SDK接入示例(下载

你可以点击右上角的开发语言来切换各种开发语言的示例代码^_^

第一步:设置SDK密钥信息

本代码中的值仅为示例,实际使用请替换为开发者申请的真实KEYID及密钥

Java版SDK的配置可以在com.cib.fintech.dfp.open.sdk.config类中更改,或使用相应的setter进行设置。

Configure.setKeyId("KYONLYFORTEST012345678")
Configure.setPriKey("banjRKycYIVfdHQfh5Qb32DSOhAXCJ12j7/fhBbRa3U=");
// 若您调用的API接口需要验证客户端证书,请配置客户端证书的本地存放路径及证书的保护密码
Configure.setCertPath("yourCertPath");
Configure.setCertProtectionPwd("yourCertProtectionPwd");

第二步:准备请求参数

开发者根据请求资源,准备不同的参数集合。根据接口不同,可能包括HEADER请求参数、GET请求参数、POST请求参数三种参数。

Map<String, String> bodyParams = new HashMap<String, String>(8);
bodyParams.put("param", "value");

第三步:调用SDK方法

传入请求资源URI、请求方法,以及各位置的参数。返回值即为响应结果。

String response = OpenSdk.gateway("/api/testApi", ReqMethodEnum.POST, null, null, bodyParams);

SDK接入示例(下载

你可以点击右上角的开发语言来切换各种开发语言的示例代码^_^

第一步:设置SDK密钥信息

本代码中的值仅为示例,实际使用请替换为开发者申请的真实KEYID及密钥

PHP版SDK的配置可以在open_config.php文件中修改相应的KEYID和密钥信息。

注意:PHP使用标准PKCS1格式的RSA私钥。头部为“-----BEGIN RSA PRIVATE KEY-----”。
注意:PHP需要打开php_curl和php_openssl扩展。

$open_config['keyid'] = 'KYONLYFORTEST012345678';
$open_config['privateKey'] = '-----BEGIN RSA PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCLcuCIrwldp1Zw
t0IdBNyxQ93hcQowGVYI/QX4mLDCkW4vHVHQDu34eAsMTfhuMruqMxsg17Lhb9C2
aCMOJwHshmBP3k/e6jKiaAa831m5Be2/HTUENp48DVUBQgM9PGYuyeeT94t31W5D
ZUnZab8xjlPKYcfA09WckZtQQvi7ejaAuzgH9uWuKOOQFbvMguqaiZS2QhLxkDL1
EmCnr2w30mzCGpbIKcVKyhj45x+hGv3SWElrN/Fnh11G8+Agfys33JkREALX+K2Y
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
fGz4pRFD2iZXKzKlb65k0Q5KbWAYWDkGcCYyz2SxcYDUHnGbWWF2xymB7CIQl4IR
loarK9omIYM3F73c2etnrbdwHa43RcJThKxF2gMGSzgMjSqbOawrrkx8cqPEmhyq
B5ERoxZeaSnrDJpLqPXOD0vhG1RtUA2KCws2VikCgYBHmsH0FmnfrvYcnkVweYo0
oej98xMKCx3tpyXV/fbVXDVEqXXM4LQ1Qb7qeTMmfLJKNKvksQZk2guQoCyjN5sJ
6UOBMfhkYXUp/dy0zzAIh2NzjkXpocsp5ujWcV+rAHnrW6UFwRdDDSlM1ov+VLS0
KquHpZIjghtC0a4u6Dxxsw==
-----END RSA PRIVATE KEY-----';

第二步:准备请求参数

开发者根据请求资源,准备不同的参数集合。根据接口不同,可能包括HEADER请求参数、GET请求参数、POST请求参数三种参数。

// 实例化
$open = new OpenSDK($open_config);
// 组装参数等
$body_param_array = array('param' => 'value');

第三步:调用SDK方法

传入请求资源URI、请求方法,以及各位置的参数。返回值即为响应结果。

$result = $open->exec('/api/testApi', 'POST', null, null, $body_param_array);

SDK接入示例(下载

你可以点击右上角的开发语言来切换各种开发语言的示例代码^_^

第一步:设置SDK密钥信息

本代码中的值仅为示例,实际使用请替换为开发者申请的真实KEYID及密钥

Python2.x版SDK,可以在opensdk.py文件中的OpenSdkConfig类中修改KEYID和对应的私钥。

注意:Python2.x使用标准PKCS1格式的RSA私钥。头部为“-----BEGIN RSA PRIVATE KEY-----”。
注意:Python2.x需要安装rsa扩展,可以使用pip install rsa进行安装。

self.keyid = 'KYONLYFORTEST01234567890'
self.key = '''-----BEGIN RSA PRIVATE KEY-----
MIIEqQIBAAKCAQEAkgZvePcnldMCXBySUEVD9+F8r8HsKZqfwhQLDJNZB/Qefk8k
PN0BllFzVQqCEzMbNZFUmoJZzFcwpfeDvgammTY53cTqpTZK5F03Yxrvlub1arZs
KDrVw52dnKQJqK8Qmkt8yCa3CxamBHEeRCCDvrurq/EhJwWgZnCFCTKmNGXy9DLx
k9GTL69VJbYAIpU2q/3VCc21+TxH/drZAe3fu99KVZzoDMMMLQsDwjclbgFjLcRN
iV+Qhmun4MeI98n3dtiAU3eNiG4z1Jz6VLo1hrHI4HaTodcTk27hir7mlXeTkyX/
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
TcPcCXRfudkRqbRLEj01/leeyxjXM90lGJ4fVe+quEafVC/wuRhRJylMV2sh6ECd
xCLyIyEfFNYmulKXrBxUpW7+CMEu0m65e/HCgLyR5kDQ1WRl5TkNOm/lMtL+jCDg
in8CgYgCxSDLLUE9k93zjqoEw83wfZDJ8/DM+qKUN7ziH2kRZA7w5xrAd2wW7eCS
zHYi4mkQCYXkKlUlPJwbsQ0w2nt6r1CoqDLb6WaMfn/h1FcTBKl5Ig3ppfB+GciD
LeHyq6xJduaDRjgdQRKmGBvlVpnnNj99oEslCyZBL1kbHaAQTpljYVyl1+8s
-----END RSA PRIVATE KEY-----
'''

第二步:准备请求参数

开发者根据请求资源,准备不同的参数集合。根据接口不同,可能包括HEADER请求参数、GET请求参数、POST请求参数三种参数。

body_params = {'param': 'value'}

第三步:调用SDK方法

传入请求资源URI、请求方法,以及各位置的参数。返回值即为响应结果。

print(opensdk.opensdk(conf, '/api/testApi', 'POST', None, None, body_params))

SDK接入示例(下载

你可以点击右上角的开发语言来切换各种开发语言的示例代码^_^

第一步:设置SDK密钥信息

本代码中的值仅为示例,实际使用请替换为开发者申请的真实KEYID及密钥

Python3.x版SDK,可以在opensdk.py文件中的OpenSdkConfig类中修改KEYID和对应的私钥。

注意:Python3.x使用标准PKCS1格式的RSA私钥。头部为“-----BEGIN RSA PRIVATE KEY-----”。
注意:Python3.x需要安装rsa扩展,可以使用pip install rsa进行安装。

self.keyid = 'KYONLYFORTEST01234567890'
self.key = '''-----BEGIN RSA PRIVATE KEY-----
MIIEqQIBAAKCAQEAkgZvePcnldMCXBySUEVD9+F8r8HsKZqfwhQLDJNZB/Qefk8k
PN0BllFzVQqCEzMbNZFUmoJZzFcwpfeDvgammTY53cTqpTZK5F03Yxrvlub1arZs
KDrVw52dnKQJqK8Qmkt8yCa3CxamBHEeRCCDvrurq/EhJwWgZnCFCTKmNGXy9DLx
k9GTL69VJbYAIpU2q/3VCc21+TxH/drZAe3fu99KVZzoDMMMLQsDwjclbgFjLcRN
iV+Qhmun4MeI98n3dtiAU3eNiG4z1Jz6VLo1hrHI4HaTodcTk27hir7mlXeTkyX/
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
TcPcCXRfudkRqbRLEj01/leeyxjXM90lGJ4fVe+quEafVC/wuRhRJylMV2sh6ECd
xCLyIyEfFNYmulKXrBxUpW7+CMEu0m65e/HCgLyR5kDQ1WRl5TkNOm/lMtL+jCDg
in8CgYgCxSDLLUE9k93zjqoEw83wfZDJ8/DM+qKUN7ziH2kRZA7w5xrAd2wW7eCS
zHYi4mkQCYXkKlUlPJwbsQ0w2nt6r1CoqDLb6WaMfn/h1FcTBKl5Ig3ppfB+GciD
LeHyq6xJduaDRjgdQRKmGBvlVpnnNj99oEslCyZBL1kbHaAQTpljYVyl1+8s
-----END RSA PRIVATE KEY-----
'''

第二步:准备请求参数

开发者根据请求资源,准备不同的参数集合。根据接口不同,可能包括HEADER请求参数、GET请求参数、POST请求参数三种参数。

body_params = {'param': 'value'}

第三步:调用SDK方法

传入请求资源URI、请求方法,以及各位置的参数。返回值即为响应结果。

print(opensdk.opensdk(conf, '/api/testApi', 'POST', None, None, body_params))

SDK接入示例(下载

你可以点击右上角的开发语言来切换各种开发语言的示例代码^_^

第一步:设置SDK密钥信息

本代码中的值仅为示例,实际使用请替换为开发者申请的真实KEYID及密钥

C#版SDK可以在Com.Cib.Fintech.Dfp.Open.Sdk.Config.Configure类中修改对应的KEYID和私钥。

注意:C#版SDK使用PKCS8格式的RSA私钥,并且不包含头部“-----BEGIN PRIVATE KEY-----”和尾部“-----END PRIVATE KEY-----”的标识符以及换行。
注意:C#版SDK需要导入开源库BouncyCastle1.8.1,下载地址:http://www.bouncycastle.org/csharp/

Configure.KeyId ="KYONLYFORTEST012345678";
Configure.PriKey = "-----BEGIN RSA PRIVATE KEY----- MIIEqQIBAAKCAQEAkgZvePcnldMCXBySUEVD9+F8r8HsKZqfwhQLDJNZB/Qefk8k PN0BllFzVQqCEzMbNZFUmoJZzFcwpfeDvgammTY53cTqpTZK5F03Yxrvlub1arZs KDrVw52dnKQJqK8Qmkt8yCa3CxamBHEeRCCDvrurq/EhJwWgZnCFCTKmNGXy9DLx k9GTL69VJbYAIpU2q/3VCc21+TxH/drZAe3fu99KVZzoDMMMLQsDwjclbgFjLcRN iV+Qhmun4MeI98n3dtiAU3eNiG4z1Jz6VLo1hrHI4HaTodcTk27hir7mlXeTkyX/ **************************************************************************************** **************************************************************************************** **************************************************************************************** **************************************************************************************** **************************************************************************************** **************************************************************************************** **************************************************************************************** **************************************************************************************** **************************************************************************************** **************************************************************************************** TcPcCXRfudkRqbRLEj01/leeyxjXM90lGJ4fVe+quEafVC/wuRhRJylMV2sh6ECd xCLyIyEfFNYmulKXrBxUpW7+CMEu0m65e/HCgLyR5kDQ1WRl5TkNOm/lMtL+jCDg in8CgYgCxSDLLUE9k93zjqoEw83wfZDJ8/DM+qKUN7ziH2kRZA7w5xrAd2wW7eCS zHYi4mkQCYXkKlUlPJwbsQ0w2nt6r1CoqDLb6WaMfn/h1FcTBKl5Ig3ppfB+GciD LeHyq6xJduaDRjgdQRKmGBvlVpnnNj99oEslCyZBL1kbHaAQTpljYVyl1+8s -----END RSA PRIVATE KEY-----"

第二步:准备请求参数

开发者根据请求资源,准备不同的参数集合。根据接口不同,可能包括HEADER请求参数、GET请求参数、POST请求参数三种参数。

Dictionary<String, String> bodyParams = new Dictionary<String, String>();
bodyParams.Add("param", "value");

第三步:调用SDK方法

传入请求资源URI、请求方法,以及各位置的参数。返回值即为响应结果。

String response = OpenSDK.gateway("/api/testApi", ReqMethodEnum.Post , null, null, bodyParams);

SDK接入示例

你可以点击右上角的开发语言来切换各种开发语言的示例代码^_^

第一步:设置SDK密钥信息

本代码中的值仅为示例,实际使用请替换为开发者申请的真实KEYID及密钥

C/C++版SDK,可以参考Example.c中的编码。将KEYID和RSA私钥作为char*类型的全局参数进行定义即可。

注意:C/C++使用标准PKCS1格式的RSA私钥。头部为“-----BEGIN RSA PRIVATE KEY-----”。

进入sdk所在路径,执行make即可编译产生可执行文件open。

char* keyId = "KYONLYFORTEST012345678";
char* priKey = "-----BEGIN RSA PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCFPUk4XHdBQhkW
XPuTNSwjn+X5VFbYPPAjgCZexsAUwiehjgzGMRy83D13nXnhTxu+ohpUpHSD3pa6
IkaRxrhStcbZANthY3pbeDkSuq573ellxgPujCqaMjkV3fVBJ8OAH2rZXm9aA+Fr
/qYOm7NAcIQuLWTLfvOq5w7ocLqM39yH5Lrf6K+b3eS9G4vmR1TA4f3J3A+qojRe
FG8WsWYHoCPVbwSLDpB6b4gQQ4TPVWJQesD8x3fEI1dx+U9qVu7wMivjJM2z28yM
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
****************************************************************************************
5LkzX1V1IYZ29qjlRnf23nFQFOCXp61PFX0weY88dXw4YL3TdxwY1HrgFnrh9qfT
3IcB95UU457K2kEl9/eQFTaiHg1xHMKuO2L8SpHupgkvlKRQ8aakt8Grus4gl6vq
b4NsIBofmZAjFeEtu08eWfXbHbSA87KPBwUcO7UCgYAmiBi8aBckhqyp+kfNnRum
8tMATlz6x/HtFWKBxc5+BLa5SXSmadf8LEKiZQpY3tcyyTm9/omlQ/TBW91riVHE
T+iJfjhkvDMHbsy4Ux2k5zLdcieAkceppETcp6wMUjX1uf8tJzQQrBtTz2Llpml/
-----END RSA PRIVATE KEY-----";

第二步:准备请求参数

开发者根据请求资源,准备不同的参数集合。根据接口不同,可能包括HEADER请求参数、GET请求参数、POST请求参数三种参数。

/* 变量定义与初始化 */
pOpenRequest pRequest = alloc_open_request();
pCibClient pClient = alloc_cib_client("/api/testApi", keyId, priKey, "POST");

/* 变量赋值 */
add_param(pRequest, "param", "value");

第三步:调用SDK方法

传入请求资源URI、请求方法,以及各位置的参数。返回值即为响应结果。

pOpenResponse pResponse = gateway(pClient,pRequest);

注意事项

  • 系统返回的应答或通知消息可能会由于升级增加参数,请验证通知签名或处理应答报文时注意允许这种情况。
  • 应用密钥需要严格保密。如因开发者的应用密钥泄露而导致的安全问题,损失需要由开发者自行承担。
  • 所有接口报文统一使用UTF-8编码。
  • 本文档为接口接入指南,相应的交易或对应接口参数等信息,请参考产品介绍中的相应章节。

通讯方式

  • 本系统与开发者间的通讯方式为HTTPS协议方式。
  • 请求报文格式为application/x-www-form-urlencoded或application/json。
  • 本系统返回给开发者的数据分为两种:当为普通报文时,HTTP头部Content-Type值为application/json,数据为JSON格式字符串;当为文件时,HTTP头部Content-Type值为application/octet-stream,数据为文件内容。
  • 所有通信报文使用UTF-8编码。

    流程图如下:

开放银行平台通讯方式流程图

应用密钥

  • 本系统采用标准的SM3WithSM2算法用于通讯间的签名、验签。
  • 本系统使用SM2私钥作为应用密钥。以下为一个私钥的示例:
Q0upIqUatcyfTt97BXLA7LoMOyE/yKb/z3NOksLMbmk=
                            

注意事项:

  • 应用密钥请勿与测试环境密钥一致。
  • 生产上建议定期更换应用密钥。
  • 开发者需要严格保密自己的应用密钥,不能将应用密钥放置在可公开获取的地方,比如客户端中等。由于泄露应用密钥而导致的任何风险,需要开发者自行承担。
  • 对于应用密钥,本系统服务器上没有保存副本,开发者若遗失,只能进行重置操作。

服务调用签名/字段加密算法

签名

开发者发送给本系统的所有请求,都需要进行签名,以确保是开发者系统发出的交易指令,具体的签名规则如下:

  • 将有效的GET或POST参数组成“参数键=参数值”的格式,如order_amount=100;
  • 将1步中所有的“参数键=参数值”按参数键以字典序进行排序;
  • 使用英文半角的&符号将2步中排序后的字符串连接起来,如key1=value1&key2=value2…,注意字符串最后没有&
  • 在字符串前部附加KEYID&TIMESTAMP&NONCE&METHOD&URI格式字符串,其中TIMESTAMP为当前时间,格式如 20160516120000;NONCE为请求随机数,需确保每次请求时不重复,最大长度为32,允许包含数字、大小写英文字母;METHOD为HTTP方法,使用大写,如GET、POST等;URI为当前请求的资源地址,如/v1/open(域名之后,?之前)等。拼装后的报文格式类似如下:
KY0123456789012345678900&20160516120000&025e119557284840a52ec6a404123456&POST&/v1/open&channel=PAY_CIBEPAY&order_amount=100
                            
  • 使用应用私钥,以SM3WithSM2算法签名上述字符串,得到的结果(Base64编码的)即为签名值;
  • 以KEYID_TIMESTAMP_NONCE作为用户名,5步中得到的签名值作为密码,在发送请求时,作为HTTP BASIC认证的username和password即可。

字段加密

本系统支持敏感字段数据加密功能:涉及敏感数据字段的接口,需要在开发者本地加密后,将密文传输给开放银行平台。

  • 加密内容为敏感字段数据明文;
  • 加密算法为:SM4,密码器类型为:SM4/CBC/PKCS5Padding(算法/模式/补码方式),初始向量全部为0;

响应报文验签算法

本系统支持对请求响应报文进行签名,并将签名值随同响应报文返回。

  • 签名内容为时间戳请求随机数报文内容
  • 签名值、请求随机数及时间戳在返回的Headers中,分别是SignatureNonceTimestamp
  • 开发者对响应报文验签使用应用的响应报文验签公钥,以SM3WithSM2算法对接收的时间戳+请求随机数+报文数据进行验签操作。

回调通知验签算法

本系统已对发出的回调通知报文进行签名,开发者收到回调通知时需进行验签操作,以确保报文未被篡改。

  • 签名内容为各部分以符号&拼接:应用ID&时间戳&随机值&报文内容
  • 应用ID、时间戳及随机值在返回的Headers中,分别是KeyidTimestampNonce
  • 报文内容在返回的body中;
  • 签名值、回调通知标识、回调通知版本号在返回的Headers中,分别是SignatureCallback-TypeVersion
  • 开发者将收到的回调通知报文按签名内容规则拼接后,使用应用的响应报文验签公钥,以SM3WithSM2算法进行验签操作。

接入

环境地址

环境类型URL
生产环境https://open.cibfintech.com

错误处理

以下为本系统通用的错误信息:

注:若错误码不为OPEN前缀,则为相应服务的异常,请在所调用服务的API文档相关章节中查看。

code说明
OPEN25001验签失败
OPEN25002请求过期
OPEN25003未配置密钥信息
OPEN25004超过调用频率限制
OPEN25005随机数无效
OPEN25101输入参数格式错误
OPEN25102输入参数不合法
OPEN25201没找到对应的请求资源
OPEN25202没找到对应的开发者信息
OPEN25203该请求无权限访问
OPEN25204请求参数未找到
OPEN25205没有找到对应的服务
OPEN25206权限不足
OPEN25207文件不存在或传输异常
OPEN25213密钥重置失败
OPEN25216余额不足
OPEN25301调用后端服务出现异常
OPEN25303后端服务返回未知异常
OPEN25999系统繁忙,如为交易类接口,请先确认交易结果后再处理