# 接口说明
# 3.1 接口 URL
调用 API 的服务 URL 地址,目前提供了以下 2 个环境:
调用环境 | 服务URL |
---|---|
测试环境(双方人员联调使用) | 线下沟通 |
正式环境 | 线下沟通 |
# 3.2 数据交互规范
使用 HTTPS 协议进行安全数据通信; x 使用 POST 方式发送请求;支持 application/json;application/x-www-form-
urlencoded
宜享花系统服务器端参数值和返回的数据均为 UTF-8 编码格式,返回数据使
- 用 JSON 格式;
- 所有请求响应参数均进行加密签名,加密签名参考加解密加验签demo
- 接口保持幂等性:重复请求请返回相同的结果(重点注意的接口在各个接口 文档有注明,其余接口也请保持该原则)
# 3.3 宜信调合作方接口参数
# 3.3.1 公共请求参数
参数名称 | 类型 | 是否必传 | 说明 | 备注 |
---|---|---|---|---|
appId | string | 是 | appId | 公共参数。appid,由合作方统一提供。 |
requestNo | string | 是 | 请求流水号 | 每次请求的唯一标识ID |
method | string | 是 | 方法名称 | 方法名称。决定具体调用的接口。 |
version | string | 是 | 接口版本 | 例:1.0 |
timestamp | long | 是 | 系统时间 | 公共参数。单位:毫秒(System.currentTimeMillis()),长度:13;该字段与服务方时间相差不能超过30分钟。 |
key | string | 是 | AES秘钥 | RSA公钥加密后的AES秘钥,每次请求随机生成,具体参考加解密加验签demo |
sign | string | 是 | RSA签名 | RSA签名,对公共请求参数中除sign字段的所有参数签名的结果。具体参考加解密加验签demo |
params | string | 是 | 密文业务数据 | 密文业务数据,为AES加密后的业务参数。具体参考加解密加验签demo |
ip | string | 是 | ip | 用户请求的ip |
# 3.3.2 响应参数
参数名称 | 类型 | 是否必传 | 说明 | 备注 |
---|---|---|---|---|
code | String | 是 | 响应返回码 | 参考3.5公共错误码 |
msg | string | 否 | 响应信息 | 参考3.5公共错误码,结果编码为“失败”时,此字段不为空 |
params | string | 是 | 密文业务数据 | AES加密后的业务数据,具体参考加解密加验签demo |
key | string | 是 | AES秘钥密文 | RSA公钥加密后的AES秘钥,每次响应随机生成,具体参考加解密加验签demo |
sign | string | 是 | RSA签名 | RSA签名,对公共响应参数中除sign字段的所有参数签名的结果。具体参考加解密加验签demo |
# 3.4 合作方调宜信方接口参数
采用 application/json 方式
# 3.4.1 公共请求参数
金额相关都以(分)为单位
参数名称 | 类型 | 是否必传 | 说明 | 备注 |
---|---|---|---|---|
appId | string | 是 | appId | 公共参数。appid,由合作方统一提供。 |
requestNo | string | 是 | 请求流水号 | 每次请求的唯一标识ID |
method | string | 是 | 方法名称 | 方法名称。决定具体调用的接口。 |
version | string | 是 | 接口版本 | 例:1.0 |
timestamp | long | 是 | 系统时间 | 公共参数。单位:毫秒(System.currentTimeMillis()),长度:13;该字段与服务方时间相差不能超过30分钟。 |
key | string | 是 | AES秘钥 | RSA公钥加密后的AES秘钥,每次请求随机生成,具体参考加解密加验签demo |
sign | string | 是 | RSA签名 | RSA签名,对公共请求参数中除sign字段的所有参数签名的结果。具体参考加解密加验签demo |
params | string | 是 | 密文业务数据 | 密文业务数据,为AES加密后的业务参数。具体参考加解密加验签demo |
ip | string | 是 | ip | 用户请求的ip |
# 3.4.2 响应参数
参数名称 | 值类型 | 是否必传 | 说明 | 备注 |
---|---|---|---|---|
code | String | 是 | 操作返回码 | 参考3.5公共错误码 |
msg | string | 是 | 操作信息 | 参考3.5公共错误码 |
params | string | 是 | 密文业务数据 | AES加密后的业务数据,具体参考加解密加验签demo |
key | string | 是 | AES秘钥密文 | RSA公钥加密后的AES秘钥,每次响应随机生成,具体参考加解密加验签demo |
sign | string | 是 | RSA签名 | RSA签名,对公共响应参数中除sign字段的所有参数签名的结果。具体参考加解密加验签demo |
# 3.5 公共错误码
code | Msg | 含义说明 |
---|---|---|
0000 | success | 成功,只有为0000才能进行业务结果的解析,后续接口文档不再说明code值 |
0001 | 业务处理失败 | 业务处理失败 |
0002 | 业务处理中 | 业务处理中 |
0003 | 参数不符合规范 | 参数不符合规范 |
0004 | 非法用户 | 非法用户 |
0014 | 用户信息错误 | 用户信息错误 |
0402 | 授信申请不存在 | 授信申请不存在 |
1006 | 借款申请不存在 | 借款申请不存在 |
0604 | 还款申请不存在 | 还款申请不存在 |
9999 | 系统异常 | 系统异常 |
9998 | 处理超时,请查询状态或稍后重试 | 处理超时,请查询状态或稍后重试 |
9995 | 操作拒绝:重复操作 | 操作拒绝:重复操作 |
8001 | 签名或验签失败 | 签名或验签失败 |
8002 | 加密失败 | 加密失败 |
8003 | 解密失败 | 解密失败 |
# 3.6 加解密验签
- 对称加密:AES 秘钥128位; 每次请求随机生成
- 非对称加密:RSA 秘钥2048位;
宜享花会提供统一 java 加解密加验签工具包。
# 3.6.1 宜信调用第三方请求流程
- 生成AES key 随机生成16位字符串作为AES秘钥
- 用第三方公钥加密AES key
- 加密业务参数 用第一步生成的AES key加密业务参数
- 签名(用宜信的私钥进行签名) sign外的参数用:a=1&b=2,方式拼接起来,用宜信私钥对拼接后的参数签名
- 发送http请求给第三方
封装请求第三方HTTP报文
{
"method": "check",
"appId": "weiedai",
"ip": "127.0.0.1",
"sign": "n8PnETfmmMmz2n90DjqW7e1bpUv+CSeNQNcBK6T8",
"requestNo": "req1234556",
"params": "5ReyXXciZ97os+bVHvmg8PneF1kc16XciZ97os+bVHvmg8PneF1kc16",
"version": "1.0",
"key": "d14jvN33H2wKE77+fmz2n90DjqW7e1bpUv+CSeNQNcBK6T8=",
"timestamp": "1670401416257"
}
2
3
4
5
6
7
8
9
10
11
# 3.6.2 宜信调用第三方响应流程
- 第三方返回的key解密 宜信私钥对key解密,得到AES key
- 第三方返回的业务参数解密 用解密后的AES key 解密业务参数 3.验签 去掉返回值中的sign,将其余参数用a=1&b=2的方式拼接,用第三方公钥加密后生成的sign与返回值中的sign做对比,对比一致方可通过
第三方 HTTP响应报文
{
"code": "code",
"msg": "11",
"sign": "n8PnETfmmM",
"key": "d14jvN33H2wKE77+fmz2n90DjqW7e1bpUv+CSeNQNcBK6T8=",
"params": "5ReyXXciZ97os+bVHvmg8PneF1kc16"
}
2
3
4
5
6
7
8
# 3.6.3 第三方调用宜信请求流程
- 生成AES key 随机生成16位字符串作为AES秘钥
- 用宜信公钥加密AES key
- 加密业务参数 用第一步生成的AES key加密业务参数
- 签名(用第三方的私钥进行签名) sign外的参数用:a=1&b=2,方式拼接起来,用第三方私钥对拼接后的参数签名
- 发送http请求给宜信
封装HTTP请求报文
{
"method": "check",
"appId": "weiedai",
"ip": "127.0.0.1",
"sign": "n8PnETfmmM",
"requestNo": "req1234556",
"params": "5ReyXXciZ97os+bVHvmg8PneF1kc16",
"version": "1.0",
"key": "d14jvN33H2wKE77+fmz2n90DjqW7e1bpUv+CSeNQNcBK6T8=",
"timestamp": "1670401416257"
}
2
3
4
5
6
7
8
9
10
11
12
# 3.6.4 第三方调用宜信响应流程
- 对宜信返回的key解密 第三方私钥对key解密,得到AES key
- 对宜信返回的业务参数解密 用解密后的AES key 解密业务参数
- 验签 去掉返回值中的sign,将其余参数用a=1&b=2的方式拼接,用宜信公钥加密后生成的sign与返回值中的sign做对比,对比一致方可通过
HTTP响应报文
{
"code": "code",
"msg": "11",
"sign": "n8PnETfmmM",
"key": "d14jvN33H2wKE77+fmz2n90DjqW7e1bpUv+CSeNQNcBK6T8=",
"params": "5ReyXXciZ97os+bVHvmg8PneF1kc16"
}
2
3
4
5
6
7
8
# 3.6.5 排序规则
- 请求参数排序
- 对公共请求参数中appId、method、ip、key、timstamp、requestNo、version以及密文业务参数params,根据字母ASCII码顺序对参数名称进行排序。例如:排序后的字符串为
appId=weiedai&ip=127.0.0.1&key=iIlQJU8ogC5tnWtmbg3QYppzlXmK3iXwBYg+N8AdcQA4jtiBwdfoZGPZSWwFOP86Ldi3i5Ebf1VCd38DmsqzYXdfT+d14jvN33H2wKE77+fmz2n90DjqrWcsDYGc1c693psZikaJV4FID5Y+vGBXFqW7e1bpUv+CSeNQNcBK6T8=&method=check¶ms=2rnJanXsKKch50DgmgbejlPKmodt9bN/ExkgilkWbhZVdDZiZDzbGvkpYx7Re34lH2t0gDIbpjYvGcaPAA7Te1mclEQuD9DGlZFJCSJ+cKjVMmV3/U/TbRqcV679t58+XOfgfAfSfRL6Y259San5LtZVLyLODSKCxJDh0h8rBpnjFsVc069gc27UDkRnlqlV8nN3pMQbITy8p2UROBdLkSx02E5ReyXXciZ97os+bVHvmg8PneF1kc16/aFp2poy&requestNo=req1234556×tamp=1670401416257&version=1.0
- 将排序好的参数名和参数值按照key1=value1&key2=value2的方式拼接,拼接后的字符串即为待签名字符串。拼装好的字符串需要采用utf-8编码。
- 排序后的请求字符串即为待签名字符串
- 响应参数排序
- 对公共响应参数中code、msg、key、业务参数密文params,根据字母ASCII码顺序对参数名称进行排序。例如:排序后的字符串为 code=0¶ms=xxxx&key=xxxx&msg=xxx。如果params为空则params与key不参与排序,即排序后的字符串为:code=0&msg=xxxx。
- 排序后的响应字符串即为待签名字符串