更新时间:2025-06-24 09:26:21
| 日期 | 版本 | 修订内容摘要 |
|---|---|---|
| 2023-08-18 | v2.0.0 | 更新接口文档 |
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-two-auth |
| 并发说明 | 50QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交
| 参数名 | 是否必须 | 说明 |
|---|---|---|
| appId | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | 是 | 姓名 |
| cardNo | 是 | 银行卡号 |
响应 body 数据为 JSON 格式
| 字段名 | 类型 | 说明 |
|---|---|---|
| chargeStatus | int | 1:收费;0:不收费 |
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| data | Object | |
| orderNo | String | 业务唯一流水号。例:628291418130630 |
| handleTime | String | 查询时间 例:2018-04-09 15:05:01 |
| remark | String | 备注,例:一致 |
| result | String | 返回结果: 01-认证一致(收费) 02-认证不一致(收费) 03-认证不确定(不收费) 04-认证失败(不收费) |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
4.响应返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011669167345100317", "handleTime": "2022-11-23 09:35:45", "result": "01", "remark": "认证一致", "bankName": "上海银行", "cardType": "首发纪念版IC卡", "cardCategory": "借记卡" }, "code": "200000" }
5.失败返回实体
复制成功{ "chargeStatus": 0, "message": "姓名格式错误", "code": "400001" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-three-auth |
| 并发说明 | 50QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 是否必须 | 说明 |
|---|---|---|
| appId | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | 是 | 姓名 |
| idNum | 是 | 身份证号码 |
| cardNo | 是 | 银行卡号 |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| chargeStatus | int | 1:收费;0:不收费 |
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| data | Object | |
| orderNo | String | 业务唯一流水号。例:628291418130630 |
| handleTime | String | 查询时间 例:2018-04-09 15:05:01 |
| remark | String | 备注,例:一致 |
| result | String | 返回结果: 01-认证一致(收费) 02-认证不一致(收费) 03-认证不确定(不收费) 04-认证失败(不收费) |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
| innerresult | String | result具体解释: 0101-认证一致;0201-不一致,认证未通过;0301-认证不确定;0401-认证失败 |
4.响应返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011669168041100319", "handleTime": "2022-11-23 09:47:21", "result": "01", "remark": "认证一致", "bankName": "上海银行", "cardType": "首发纪念版IC卡", "cardCategory": "借记卡", "innerresult": "0101" }, "code": "200000" }
5.失败返回实体
复制成功{ "chargeStatus": 0, "message": "姓名格式错误", "code": "400001" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-three-auth-detail |
| 并发说明 | 50QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | String | 是 | 姓名 |
| idNum | String | 是 | 身份证号码 |
| cardNo | String | 是 | 银行卡号 |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| chargeStatus | int | 1:收费;0:不收费 |
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| data | Object | |
| orderNo | String | 业务唯一流水号。例:628291418130630 |
| handleTime | String | 查询时间 例:2018-04-09 15:05:01 |
| remark | String | 备注,例:一致 |
| result | String | 返回结果:返回 01(认证一致),02,05,06,07 时收费,其他不收费 |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
4.响应返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011669168074100320", "handleTime": "2022-11-23 09:47:54", "result": "01", "remark": "认证信息匹配", "bankName": "上海银行", "cardType": "首发纪念版IC卡", "cardCategory": "借记卡" }, "code": "200000" }
5.失败返回实体
复制成功{ "chargeStatus": 0, "message": "姓名格式错误", "code": "400001" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-three-auth-precision |
| 并发说明 | 200QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | String | 是 | 姓名 |
| idNum | String | 是 | 证件号 |
| cardNo | String | 是 | 银行卡号 |
| idType | String | 否 | 证件类型(02军官证、03护照、05土兵证、06内地居民来往港澳通行证、07台湾同胞来往内地通行证、10警官证、15港澳居民来往内地通行证(回乡证)) |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| chargeStatus | int | 1:收费;0:不收费 |
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| data | Object | |
| orderNo | String | 业务唯一流水号。例:628291418130630 |
| handleTime | String | 查询时间 例:2018-04-09 15:05:01 |
| remark | String | 备注,例:一致 |
| result | String | 返回结果: 01-认证一致(收费) 02-认证不一致(收费) 03-认证不确定(不收费) 04-认证失败(不收费) |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
4.响应返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011733987920100027", "handleTime": "2024-12-12 15:18:40", "result": "01", "remark": "验证通过", "bankName": "中国农业银行", "cardType": "金穗通宝卡(银联卡)", "cardCategory": "借记卡" }, "code": "200000" }
5.失败返回实体
复制成功{ "chargeStatus":0, "message":"失败", "data": null, "code":"500" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 请求格式 | |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-auth |
| 并发说明 | 50QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | String | 是 | 姓名 |
| idNum | String | 是 | 身份证号码,限单个 |
| cardNo | String | 是 | 银行卡号,限单个 |
| mobile | String | 是 | 银行预留手机号码,限单个,仅支持国内号码,11 位 |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| chargeStatus | String | 是否收费,枚举值:1 :收费 0:不收费 |
| data | Object | |
| data>>orderNo | String | 业务唯一流水号 |
| data>>handleTime | String | 查询时间。样例:2018-04-09 15:05:01 |
| data>>result | String | 认证结果。01:一致 02:不一致 03:认证不确定 04:认证失败。01、02 收费 |
| data>>bankName | String | 银行卡所属银行。样例:招商银行 |
| data>>cardType | String | 银行卡类型 样例:金穗借记卡 |
| data>>cardCategory | String | 银行卡类别 样例:借记卡 |
| data>>remark | String | 备注。样例:信息认证未通过(验证不一致) |
| data>>innerresult | String | result具体解释: 0101-认证一致;0201-不一致,认证未通过;0301-认证不确定;0401-认证失败 |
4.成功返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011670055041630705", "handleTime": "2022-12-03 16:10:42", "result": "01", "remark": "认证一致", "bankName": "中国银行", "cardType": "借记IC个人普卡", "cardCategory": "借记卡", "innerresult": "0101" }, "code": "200000" }
5.失败返回实体 DEMO
复制成功{ "chargeStatus": 0, "message": "姓名格式错误", "code": "400001" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-auth-detail |
| 并发说明 | 50QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | String | 是 | 姓名 |
| idNum | String | 是 | 身份证号码,限单个 |
| cardNo | String | 是 | 银行卡号,限单个 |
| mobile | String | 是 | 银行预留手机号码,限单个,仅支持国内号码,11 位 |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| chargeStatus | String | 是否收费,枚举值:1 :收费 0:不收费 |
| data | Object | |
| orderNo | String | 业务唯一流水号 |
| handleTime | String | 查询时间。样例:2018-04-09 15:05:01 |
| result | String | 认证结果代码。01:认证一致 02:认证不一致 03:认证不确定 04:认证失败 05:手机号码不匹配 06:身份证号码不匹配 07:姓名不匹配 01, 02, 05, 06, 07 的代码收费,其他不收费 |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
| remark | String | 备注。样例:信息认证未通过(验证不一致) |
4.成功返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011670055041630705", "handleTime": "2022-12-03 16:10:42", "result": "01", "remark": "认证一致", "bankName": "中国银行", "cardType": "借记IC个人普卡", "cardCategory": "借记卡" }, "code": "200000" }
5.失败返回实体 DEMO
复制成功{ "chargeStatus": 0, "message": "姓名格式错误", "code": "400001" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 请求格式 | |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-auth-precision |
| 并发说明 | 2000QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | String | 是 | 姓名 |
| idNum | String | 是 | 证件号,限单个 |
| cardNo | String | 是 | 银行卡号,限单个 |
| mobile | String | 是 | 银行预留手机号码,限单个,仅支持国内号码,11 位 |
| idType | String | 否 | 证件类型(02军官证、03护照、05土兵证、06内地居民来往港澳通行证、07台湾同胞来往内地通行证、10警官证、15港澳居民来往内地通行证(回乡证)) |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| chargeStatus | String | 是否收费,枚举值:1 :收费 0:不收费 |
| data | Object | |
| orderNo | String | 业务唯一流水号 |
| handleTime | String | 查询时间。样例:2018-04-09 15:05:01 |
| result | String | 认证结果。01:一致 02:不一致 03:认证不确定 04:认证失败。01、02收费 |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
| remark | String | 备注。样例:信息认证未通过(验证不一致) |
4.成功返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011670055041630705", "handleTime": "2022-12-03 16:10:42", "result": "01", "remark": "认证一致", "bankName": "中国银行", "cardType": "借记IC个人普卡", "cardCategory": "借记卡" }, "code": "200000" }
5.失败返回实体 DEMO
复制成功{ code: "500000", success: false, message: "系统异常", chargeStatus: 0 }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-auth-secret |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| param | String | 是 | 加密之后的参数。将参数按照如下格式拼接,name=张三&idnum=123456789012345678&cardnum=6225123456780000&mobilenum=18600000000;然后使用 AppKey MD5 之后的前 16 位做密钥,后 16 位做向量,进行 AES/CBC/PKCS5Padding 模式加密 |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| chargeStatus | String | 是否收费,枚举值:1 :收费 0:不收费 |
| data | Object | |
| orderNo | String | 业务唯一流水号 |
| handleTime | String | 查询时间。样例:2018-04-09 15:05:01 |
| result | String | 认证结果。01:一致 02:不一致 03:认证不确定 04:认证失败。01、02 收费 |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
| remark | String | 备注。样例:信息认证未通过(验证不一致) |
4.成功返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "021670056350630361", "handleTime": "2022-12-03 16:32:30", "result": "01", "remark": "认证一致", "bankName": "中国银行", "cardType": "借记IC个人普卡", "cardCategory": "借记卡" }, "code": "200000" }
5.失败返回实体 DEMO
复制成功{ "message":"数据解密异常" "code":"500002" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-three-auth-type |
| 并发说明 | 50QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 是否必须 | 说明 |
|---|---|---|
| appId | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | 是 | 姓名 |
| idNum | 是 | 身份证号码 |
| cardNo | 是 | 银行卡号 |
| idType | 否 | 证件类型(默认身份证) 02:军官证 03:护照 05:士兵证 06:内地居民来往港澳通行证 07:台湾同胞来往内地通行证 09:外国人永久居住证 10:警官证 15:港澳居民来往内地通行证(回乡证) 18:台湾居民居住证 19:港澳居民居住证 20:外国护照 |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| chargeStatus | int | 1:收费;0:不收费 |
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| data | Object | |
| orderNo | String | 业务唯一流水号。例:628291418130630 |
| handleTime | String | 查询时间 例:2018-04-09 15:05:01 |
| remark | String | 备注,例:一致 |
| result | String | 返回结果: 01-认证一致(收费) 02-认证不一致(收费) 03-认证不确定(不收费) 04-认证失败(不收费) |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
4.响应返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011669168041100319", "handleTime": "2022-11-23 09:47:21", "result": "01", "remark": "认证一致", "bankName": "上海银行", "cardType": "首发纪念版IC卡", "cardCategory": "借记卡" }, "code": "200000" }
5.失败返回实体
复制成功{ "chargeStatus": 0, "message": "姓名格式错误", "code": "400001" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 请求格式 | |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-auth-type |
| 并发说明 | 50QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | String | 是 | 姓名 |
| idNum | String | 是 | 身份证号码,限单个 |
| cardNo | String | 是 | 银行卡号,限单个 |
| mobile | String | 是 | 银行预留手机号码,限单个,仅支持国内号码,11 位 |
| idType | String | 否 | 证件类型(默认身份证) 02:军官证 03:护照 05:士兵证 06:内地居民来往港澳通行证 07:台湾同胞来往内地通行证 09:外国人永久居住证 10:警官证 15:港澳居民来往内地通行证(回乡证) 18:台湾居民居住证 19:港澳居民居住证 20:外国护照 |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| chargeStatus | String | 是否收费,枚举值:1 :收费 0:不收费 |
| data | Object | |
| orderNo | String | 业务唯一流水号 |
| handleTime | String | 查询时间。样例:2018-04-09 15:05:01 |
| result | String | 认证结果。01:一致 02:不一致 03:认证不确定 04:认证失败。01、02 收费 |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
| remark | String | 备注。样例:信息认证未通过(验证不一致) |
4.成功返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011670055041630705", "handleTime": "2022-12-03 16:10:42", "result": "01", "remark": "认证一致", "bankName": "中国银行", "cardType": "借记IC个人普卡", "cardCategory": "借记卡" }, "code": "200000" }
5.失败返回实体 DEMO
复制成功{ "chargeStatus": 0, "message": "姓名格式错误", "code": "400001" }
1.协议说明
| 名称 | 说明 |
|---|---|
| 协议 | HTTPS POST |
| 编码格式 | UTF8 |
| 请求格式 | |
| 返回类型 | application/json |
| URL | https://wsauth.253.com/open/bankcard/card-five-auth |
| 并发说明 | 50QPS(特殊需求联系运营) |
2.请求参数
请求参数 Body 以 multipart/form-data 方式提交。
| 参数名 | 类型 | 是否必须 | 说明 |
|---|---|---|---|
| appId | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| appKey | String | 是 | 请在https://www.chuanglan.com/ 登录后获取 |
| name | String | 是 | 姓名 |
| idNum | String | 是 | 身份证号码,限单个 |
| cardNo | String | 是 | 银行卡号,限单个 |
| mobile | String | 是 | 银行预留手机号码,限单个,仅支持国内号码,11 位 |
3.响应内容
响应 body 数据为 JSON 格式。
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | String | 响应 code 码。200000:成功,其他失败。 |
| message | String | 响应 code 码解释 |
| chargeStatus | String | 是否收费,枚举值:1 :收费 0:不收费 |
| data | Object | |
| orderNo | String | 业务唯一流水号 |
| handleTime | String | 查询时间。样例:2018-04-09 15:05:01 |
| result | String | 认证结果。 01:认证信息匹配 02:认证信息不匹配 03:无法验证 04:认证失败。01、02、03收费 |
| bankName | String | 银行卡所属银行。样例:招商银行 |
| cardType | String | 银行卡类型 样例:金穗借记卡 |
| cardCategory | String | 银行卡类别 样例:借记卡 |
| remark | String | 备注。样例:信息认证未通过(验证不一致) |
| bankAccountType | String | 卡类型:0:暂不支持银行 1:疑似 I 类 2:II 类 3:III 类 4:Ⅱ类或Ⅲ类 5:贷记卡 7:未知类型 |
4.成功返回实体 DEMO
复制成功{ "chargeStatus": 1, "message": "成功", "data": { "orderNo": "011717495039100001", "handleTime": "2024-06-04 17:57:19", "result": "01", "remark": "认证信息匹配", "bankName": "上海银行", "cardType": "首发纪念版IC卡", "cardCategory": "借记卡", "bankAccountType": "1" }, "code": "200000" }
5.失败返回实体 DEMO
复制成功{ code: "500000", success: false, message: "系统异常", chargeStatus: 0 }
MD5加密工具类
复制成功public class MD5Utils { // 全局数组 private final static String[] strDigits = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f","g","h","j","?","~" }; private static MD5Utils mD5Util; public static MD5Utils getInstance() { if (mD5Util == null) { synchronized (MD5Utils.class) { if (mD5Util == null) { mD5Util = new MD5Utils(); } } } return mD5Util; } // 返回形式为数字跟字符串 private String byteToArrayString(byte bByte) { int iRet = bByte; // System.out.println("iRet="+iRet); if (iRet < 0) { iRet += 256; } int iD1 = iRet / 16; int iD2 = iRet % 16; return strDigits[iD1] + strDigits[iD2]; } // 转换字节数组为16进制字串 private String byteToString(byte[] bByte) { StringBuffer sBuffer = new StringBuffer(); for (int i = 0; i < bByte.length; i++) { sBuffer.append(byteToArrayString(bByte[i])); } return sBuffer.toString(); } public String getMD5Code(String strObj) { String resultString = null; try { resultString = new String(strObj); MessageDigest md = MessageDigest.getInstance("MD5"); // md.digest() 该函数返回值为存放哈希值结果的byte数组 resultString = byteToString(md.digest(strObj.getBytes())); } catch (NoSuchAlgorithmException ex) { ex.printStackTrace(); } return resultString; } public static void main(String[] args) { // e10adc3949ba59abbe56e057f20f883e System.out.println(MD5Utils.getInstance().getMD5Code("1542971941chuanglan_data_key_test")); } }
AES加解密工具类
复制成功package com.chuanglan; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.io.ByteArrayOutputStream; public class AESUtils { private static final String charset = "utf-8"; /** * <p> Title: EncryptCbcIv</br> * <p>Description: aes 带向量的加密 </br> * * @param * @return String * @author * @version 2018年12月4日 */ public static String EncryptCbcIv(String sSrc, String sKey, String ivStr) throws Exception { try { if (sSrc == null || sSrc.length() == 0 || sSrc.trim().length() == 0) { return null; } if (sKey == null) { throw new Exception("encrypt key is null"); } if (sKey.length() != 16) { throw new Exception("encrypt key length error"); } if (ivStr.length() != 16) { throw new Exception(" iv encrypt key length error"); } Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec skeySpec = new SecretKeySpec(sKey.getBytes(charset), "AES"); IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes(charset));//new IvParameterSpec(getIV()); cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); byte[] encrypt = cipher.doFinal(sSrc.getBytes("utf-8")); return AesBase64.encode(encrypt); } catch (Exception ex) { throw new Exception("decrypt errot", ex); } } /** * <p> Title: DecryptCbcIv</br> * <p>Description: aes带向量的解密 </br> * * @param * @return String * @author * @version 2018年12月4日 */ public static String DecryptCbcIv(String sSrc, String sKey, String ivStr) throws Exception { try { if (sSrc == null || sSrc.length() == 0 || sSrc.trim().length() == 0) { return null; } if (sKey == null) { throw new Exception("decrypt key is null"); } if (sKey.length() != 16) { throw new Exception("decrypt key length error"); } if (ivStr.length() != 16) { throw new Exception(" iv decrypt key length error"); } byte[] Decrypt = AesBase64.decode(sSrc); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec skeySpec = new SecretKeySpec(sKey.getBytes(charset), "AES"); IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes(charset));//new IvParameterSpec(getIV()); cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);//使用解密模式初始化 密 byte[] decrypt = cipher.doFinal(Decrypt); return new String(decrypt, charset); } catch (Exception ex) { throw new Exception("decrypt errot", ex); } } public static class AesBase64 { private static char[] base64EncodeChars = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'}; private static byte[] base64DecodeChars = new byte[]{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1}; private AesBase64() { } public static String encode(byte[] data) { StringBuffer sb = new StringBuffer(); int len = data.length; int i = 0; int b1, b2, b3; while (i < len) { b1 = data[i++] & 0xff; if (i == len) { sb.append(base64EncodeChars[b1 >>> 2]); sb.append(base64EncodeChars[(b1 & 0x3) << 4]); sb.append("=="); break; } b2 = data[i++] & 0xff; if (i == len) { sb.append(base64EncodeChars[b1 >>> 2]); sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); sb.append(base64EncodeChars[(b2 & 0x0f) << 2]); sb.append("="); break; } b3 = data[i++] & 0xff; sb.append(base64EncodeChars[b1 >>> 2]); sb.append(base64EncodeChars[((b1 & 0x03) << 4) | ((b2 & 0xf0) >>> 4)]); sb.append(base64EncodeChars[((b2 & 0x0f) << 2) | ((b3 & 0xc0) >>> 6)]); sb.append(base64EncodeChars[b3 & 0x3f]); } return sb.toString(); } public static byte[] decode(String str) { byte[] data = str.getBytes(); int len = data.length; ByteArrayOutputStream buf = new ByteArrayOutputStream(len); int i = 0; int b1, b2, b3, b4; while (i < len) { /* b1 */ do { b1 = base64DecodeChars[data[i++]]; } while (i < len && b1 == -1); if (b1 == -1) { break; } /* b2 */ do { b2 = base64DecodeChars[data[i++]]; } while (i < len && b2 == -1); if (b2 == -1) { break; } buf.write((int) ((b1 << 2) | ((b2 & 0x30) >>> 4))); /* b3 */ do { b3 = data[i++]; if (b3 == 61) { return buf.toByteArray(); } b3 = base64DecodeChars[b3]; } while (i < len && b3 == -1); if (b3 == -1) { break; } buf.write((int) (((b2 & 0x0f) << 4) | ((b3 & 0x3c) >>> 2))); /* b4 */ do { b4 = data[i++]; if (b4 == 61) { return buf.toByteArray(); } b4 = base64DecodeChars[b4]; } while (i < len && b4 == -1); if (b4 == -1) { break; } buf.write((int) (((b3 & 0x03) << 6) | b4)); } return buf.toByteArray(); } } }
参数生成测试类
复制成功public class BankFourSecretTest { public static void main(String[] args) throws Exception { String name = "小明"; String idnum = "362528xxxxxxxx0035"; String cardnum = "620522xxxxxxxxxx"; String mobilenum = "1376764xxxx"; String appKey = "MDdyKxxx"; String splicingParam = "name=" + name + "&idnum=" + idnum + "&cardnum=" + cardnum + "&mobilenum=" + mobilenum; String md5Code = MD5Utils.getInstance().getMD5Code(appKey); String sKey = md5Code.substring(0, 16); String ivStr = md5Code.substring(16, 32); String param = AESUtils.EncryptCbcIv(splicingParam, sKey, ivStr); System.out.println(param); } }
code码解释见:code码解释