
银账通接口(银盛存管)
版本说明
| 版本 | 日期 | 修改 | 审核 | 说明 |
|---|---|---|---|---|
| V3.0 | 2019-03-05 | 陈伟龙&张海松 | 何彦霖 | 银账通产品升级3.0版本,初稿 |
| V3.1 | 2019-04-01 | 陈伟龙 | 何彦霖 | 增加内部转账功能,以及补充商户进件接口功能 |
| V3.2 | 2019-04-23 | 陈刚 | 卢伟强 | 修改图片上传接口图片类型备注、商户进件接口客户类型备注 |
| V3.3 | 2019-07-12 | 王万琳 | 卢伟强 | 商户进件异步通知和查询接口返回数据修改和新增userCode字段 |
| V3.4 | 2019-11-20 | 孙秀丽 | 卢伟强 | 新增卡Bin查询接口和子商户自动审核功能 |
| V3.5 | 2020-02-26 | 孙秀丽 | 卢伟强 | 新增错误码说明 |
| V3.6 | 2020-03-25 | 孙秀丽 | 卢伟强 | 完善充值申请接口及排版更新 |
| V3.7 | 2020-04-20 | 孙秀丽 | 卢伟强 | 根据风控规则完善必传图片 |
| 补充证件,营业执照有效期 | ||||
| V3.8 | 2020-05-11 | 孙秀丽 | 卢伟强 | 增加个人及商户通知手机号修改,支持平台参与内部转账 |
| V3.9 | 2020-06-18 | 孙秀丽 | 卢伟强 | 支持小微,个体商户绑卡充值。 |
| V4.0 | 2020-07-31 | 孙秀丽 | 卢伟强 | 增加转账电子回单 |
| V4.1 | 2020-08-18 | 钟凡 | 吴浪 | 统一用户号长度为30,新增消息码列表,新增商户报备,报备查询以及商户进件(活体) |
| V4.2 | 2020-09-08 | 钟凡 | 吴浪 | 优化旧商户进件接口,新增钱包付款码(申码)和钱包付款码(反扫申请)接口 |
| V4.3 | 2020-11-09 | 王万琳 | 吴浪 | 新增订单分账信息查询接口 |
| V4.4 | 2022-04-27 | 王天蛟 | 温智贤 | 新增修改商户结算卡和修改商户结算方式接口 |
目录
1.概述
本文档为银账通系统的对外接入的技术指南,方便商户快速接入。
本文档的目标读者为技术人员
银账通保留对该文档的最终解释权与修改权
2.接口通讯
2.1交互方式
消息请求基于 HTTP/HTTPS 的 POST 方式。
Content-Type 设置" application/x-www-form-urlencoded;charset=UTF-8 "。
2.2报文结构
报文统一以key/value方式,如下:
timeStamp=“时间戳, msg=“加密业务数据”, src=“消息来源”, version=“版本号”,sign=“签名数据”, check=“AES密钥密文”, certId=“商户号”, msgCode=“消息码”
参数说明:
| 参数 | 说明 | 是否必填 | 取值说明 |
|---|---|---|---|
| src | 消息来源 | M | 固定值为02 |
| msgCode | 消息码 | M | 参见2.3消息码列表 |
| version | 版本号 | M | 统一填写为1.0 |
| timeStamp | 时间戳 | M | 格式:yyyy-MM-dd HH:mm:ss |
| sign | 签名数据 | M | 参见7.2.2签名方案 |
| msg | 加密业务数据 | M | 在“4.2后台接口”章节中,定义的是msg的明文详细内容。是json格式字符串,例如用户信息余额查询的请问报文如下 {"appSecret":"qY2Q+f7ptLK2/y6tUDMLn42swYklNmstSwEYmCy/DQM=","appUserCode":"zj-05","isSearchBalance":"Y"} msg为对以上数据加密处理后得到结果 Msg生成的方式具体参见7.2.1 AES加密流程 |
| norce | 随机字符串 | M | 比如uuid |
| certId | 商户号 | M | 具体接入时银账通提供的商户号 |
| check | AES密钥密文 | M | 参见7.2.1 中的RSA公钥加密流程 |
以用户信息余额查询报文举例,报文示例如下
{timeStamp=2018-12-16 10:59:16, msg=yC6+sCdO54gddxPHRHyshX7yie0Qiv7mBiHpW64RGvzuMMq//h4R1v8hqA2n+qwSIISuCUJ7FnKmcKetBo6wxUyQm/5KNyicYYbmSL8wkGO/MKVn08LyILt2/LeftQ5R3NKXIyYaYMS8p2OjOlShZZFt2HZDK3PVvrC2v43GMBop973M1ZlSqjv/UiE+eup3,
norce=cf262c0aa38243979377f04d39865c25,
src=02,
version=1.0, sign=MeQLeL31IwO75hC/GtY3W0M29SCjVUqlm68nOuL7HGFJlNq8FkB1eqfHUenM1O2mn8r5sedEYWbuUUiJi5mgIN5RIHaRP39O8kWwCk7/Al/S+H8gBP9BGU8TdplYGJOzszcD6J3T4To3+3EbRLfJ7/nJaI/UOQvGhNdqA0ng1/s=, check=bjCQfmaGoRhUGZDBoPPXvQjvZaLwMAxC3tLDFyCydcF1Kv6Qj4oH5ggPXoXZ66BHuU4aM73MSHmwgdYxhp1x1VRMPWWw9awlCBI4FYBc/8wClygtiz/l6MAIZk8JfmGXrMADYBlifEXgZ+oQkrVa9tYV8x8idI8hll/yDqE0IXw=,
certId=s0005,
msgCode=searchUser
}
msg加密业务数据明文内容为:
{"appSecret":"qY2Q+f7ptLK2/y6tUDMLn42swYklNmstSwEYmCy/DQM=","appUserCode":"zj-05","isSearchBalance":"Y"}
2.3消息码列表
| 接口名称 | 消息码 |
|---|---|
| 获取token | getYsToken |
| 图片上传 | uploadPicture |
| 商户进件 | merchant/registry |
| 商户进件查询 | query/merchant/registry |
| 商户报备 | channelReport |
| 商户报备查询 | queryReportResult |
| 商户报备查询(带第三方商户号返回) | queryReportResultV1 |
| 根据银盛商户号查询应用商户号 | queryYsUserCodeByMercId |
| 商户修改结算方式 | changeSettleType |
| 商户修改结算卡 | changeSettleCard |
2.4 系统对接前的准备工作及注意事项
测试环境可联系商户对接人员获取app密钥及App用户号及证书。
测试环境对接完成可联系对接人员获取线上证书及相关密钥。
3.产品介绍
3.1场景介绍
适用于商家调用银账通的API接口,在合作商户app或网站上实现用户及商户开户、绑卡、充值、提现、支付、解绑卡等功能。
3.2 功能描述
本文档描述银账通开发项目与合作商户相关系统之间的报文格式、接口规范及安全规范。
3.3 业务流程
银账通合作商户的接入方式,根据业务模式进行接入:
不验证:用户在交易过程中,银盛不进行任何验证,所有验证交由合作商户完成。
短信验证:用户在交易过程中,银盛下发短信验证码进行短信验证。
4 接口说明
描述:第三方app后台直接请求银账通后台接口
4.1报文规范
请求参数是否必填,M表示必填,O表示选填
4.2后台接口
4.2.1 获取token
该接口用户商户进件接口调用之前获取token
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/getYsToken
生产 url: https://yzt.ysepay.com:8443/api/getYsToken
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| userCode | 商户号的用户号 | M | String | 30 | 商户用户号 |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | 结果提示信息 |
| data | 业务参数 | M | Object | - | 参数集合 |
data
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| token | token值 | M | String | 256 | 操作成功时返回 |
4.2.2 图片上传
该接口用于商户进件流程获取token之后进行图片上传,不同类型商户需上传图片类型请参考附表2
注:此接口直接用form表单形式提交图片。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/uploadPicture
生产 url:https://yzt.ysepay.com:8443/api/uploadPicture
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| userCode | 商户用户号 | M | String | 30 | 平台商用户号,每个商户需保证唯一生成,同一个商户多张图片上传则需一致 |
| picType | 图片类型 | M | String | 2 | 图片类型(00:公民身份证正面;19:营业执照;20:税务登记证;30:公民身份证反面;31互联网业务商户协议;32授权书;33:手持身份证正扫面照;34门头照;35:结算银行卡正面照;36:结算银行卡反面照;37:开户许可证;38:收单业务商户协议;50:经营场所图1;51:经营场所图2;) |
| token | 获取的token值 | M | String | 200 | 获取的token值 |
| file | 选择图片文件 | M | String | 100 | 选择图片文件 |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | |
| data | 业务参数 | M | Object | - | 参数集合 |
data
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| picId | 图片id | M | String | 20 | 操作成功时返回 |
4.2.3 商户进件
该接口用于入驻平台的企业,小微及个人商户进件
商户进件流程说明:
获取token
进行图片上传
调用商户进件接口完成进件。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/merchant/registry
生产 url: https://yzt.ysepay.com:8443/api/merchant/registry
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| userCode | 商户用户号 | M | String | 30 | 平台唯一标识,和图片上传的userCode一致 |
| custname | 商户名称 | M | String | 30 | 商户名称(公司名称或姓名) |
| custAnotherName | 商户简称 | O | String | 30 | 商户简称(自动报备必传) |
| certifitype | 证件类型 | M | String | 2 | 00-身份证 暂时只支持身份证 |
| certifino | 证件号码 | M | String | 20 | 证件号码 |
| mobile | 通知手机号 | M | String | 11 | 通知手机号 |
| 邮箱 | M | String | 30 | 邮箱 | |
| notifyType | 通知类型 | O | String | 2 | 1:邮件2:短信 3:短信+邮件 不填默认不通知 |
| custflag | 客户类型 | M | String | 2 | 客户类型(2:个人商户(小微商户),3:个体商户,4:企业商户) |
| province | 商户所在省 | O | String | 10 | 商户所在省(自动报备必传) |
| city | 商户所在市 | O | String | 10 | 商户所在市(自动报备必传) |
| area | 商户所在区 | O | String | 10 | 商户所在区(自动报备必传) |
| companyAddress | 商户详细地址 | O | String | 60 | 商户详细地址(自动报备必传) |
| legalname | 法人姓名 | M | String | 30 | 企业法人名字,需和身份证号码、法人手机号码匹配,当客户类型为小微商户时,企业法人可固定传姓名 |
| certifiEffect | 法人证件生效期(格式:yyyyMMdd) | O | String | 8 | 法人证件生效期(格式:yyyyMMdd)(自动报备必传) |
| certifiDate | 法人证件有效期 | M | String | 8 | 法人姓名不为空时必填,格式:yyyyMMdd,例如:20220918 为空时默认长期有效 |
| bankCerNo | 银行预留证件号码 | M | String | 20 | 银行预留证件号码 |
| banktype | 银行行别 | M | String | 10 | 银行行别 。例:北京银行 |
| companyNo | 企业证照号码 | M | String | 20 | 企业证照号码(企业商户或个体商户则填营业执照注册号,个人则填写身份证号即可) |
| bsLicenseEffect | 企业证件生效期(格式:yyyyMMdd) | O | String | 8 | 企业证件生效期(自动报备必传,小微商户不传) |
| validtime | 企业营业执照有效期 | M | String | 8 | 格式:yyyyMMdd,例如:20220918,长期传29991231 |
| bankCity | 银行所在市 | M | String | 20 | 银行所在市 |
| contactPhone | 法人手机号码 | M | String | 11 | 法人手机号码 |
| bankCerType | 银行预留证件类型 | M | String | 2 | 只能是00身份证 |
| bankAccountName | 结算户名 | M | String | 30 | 结算户名 |
| bankAccountType | 银行账户类型 | M | String | 2 | 银行账户类型(11:个人借记卡12:个人贷记卡13:个人存折21:对公借记卡22:对公贷记卡23:对公存折 24:单位结算卡) |
| bankProvinc | 银行所在省 | M | String | 30 | 银行所在省 |
| bankAccountNo | 结算账号 | M | String | 20 | 结算账号 |
| companyCerttype | 企业证照类型 | M | String | 2 | 企业时必填,19:营业执照;20:税务登记证 |
| settleAccountType | 结算方式 | M | String | 2 | 结算方式 0:平台内;1:银行卡 |
| bankname | 银行行名 | M | String | 60 | 银行行名,具体到分行。例:北京银行XX分行,可固定按附表《新行号》填写对应支行 |
| bankMobile | 银行预留手机号 | M | String | 11 | 银行预留手机号 |
| picIds | 图片ID集合 | M | String | 128 | 图片ID集合:多个图片id,中间以逗号“,”分割,注意是对应图片上传接口返回的picId密文 |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | 请求结果提示 |
4.2.4 商户进件查询
该接口用于进行商户进件状态查询
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/query/merchant/registry
生产 url: https://yzt.ysepay.com:8443/api/query/merchant/registry
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| userCode | 商户用户号 | M | String | 30 | 平台用户号 |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | |
| data | 业务参数 | M | Object | - | 参数集合 |
data
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| custFlag | 客户类型 | M | String | 20 | 客户类型 |
| custName | 商户名称 | M | String | 10 | 商户名称 |
| userCode | 商户用户号 | M | String | 18 | 商户用户号 |
| state | 商户审核 | M | String | 2 | 04:生效;03:待审核;09:审核失败 |
| ysUserCode | 银盛商户号 | M | String | 22 | 后续交易使用的商户号 |
| mobile | 通知手机号 | M | String | 11 | 手机号码 |
| note | 返回信息 | M | String | 200 | 如果底层有返回异常信息则返回,如果没有则为空 |
4.2.5 商户进件异步通知
异步通知商户进件接口审核结果
通知内容说明
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| userCode | 商户用户号 | M | String | 30 | 商户用户号 |
| custName | 商户名称 | M | String | 100 | 商户名称 |
| custId | 商户编号 | O | String | ||
| state | 商户审核状态 | M | String | 2 | 04:生效;03:待审核;09:审核失败 |
| ysUserCode | 银盛商户号 | O | String | 22 | 生效状态返回,后续交易使用的商户号 |
| note | 备注信息 | O | String | 36 | 备注信息,成功或失败的原因 |
4.2.6 商户报备
用于商户的微信和支付宝报备(仅适用于商户进件(活体)接口进件的商户)。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/channelReport
生产 url: https://yzt.ysepay.com:8443/api/channelReport
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| appUserCode | 商户用户号 | M | String | 30 | 平台用户号,即商户进件接口中的userCode |
| appletAppid | 小程序appId | O | String | 30 | 小程序APPID |
| apppubAppid | 公众号appid | O | String | 30 | 公众号APPID |
| jsapiPath1 | 公众号授权目录1 | O | String | 255 | 公众号授权目录1 |
| jsapiPath2 | 公众号授权目录2 | O | String | 255 | 公众号授权目录2 |
| jsapiPath3 | 公众号授权目录3 | O | String | 255 | 公众号授权目录3 |
| jsapiPath4 | 公众号授权目录4 | O | String | 255 | 公众号授权目录4 |
| jsapiPath4 | 公众号授权目录5 | O | String | 255 | 公众号授权目录5 |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | 报备成功 |
4.2.7 商户报备查询
用于商户的微信和支付宝报备的结果查询(仅适用于商户进件(活体)接口进件的商户)。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/queryReportResult
生产 url: https://yzt.ysepay.com:8443/api/queryReportResult
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| appUserCode | 商户用户号 | M | String | 30 | 平台用户号,即商户进件接口中的userCode |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | 报备成功 |
| data | 返回数据 | O | String | 30 | 报备状态信息 |
4.2.8 商户报备查询(带第三方商户号返回)
用于商户的微信和支付宝报备的结果查询(仅适用于商户进件(活体)接口进件的商户)。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/queryReportResultV1
生产 url: https://yzt.ysepay.com:8443/api/queryReportResultV1
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| appUserCode | 商户用户号 | M | String | 30 | 平台用户号,即商户进件接口中的userCode |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | 报备成功 |
| data | 业务参数 | M | Arrray | 4 | 参数集合列表 |
data中的参数集合
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| type | 报备类型 | M | String | 2 | 0、微信-网联;1、微信-银联;2、支付宝-网联;3、支付宝银联; |
| typeMsg | 报备类型描述 | M | String | 16 | 报备类型描述 |
| apprSts | 状态 | M | String | 2 | 报备状态:00:初始状态;03:报备失败 |
| thirdMercId | 第三方商户号 | M | String | 32 | 第三方商户号 |
| remark | 备注 | O | String | 200 | 备注 |
4.2.9 根据银盛商户号查询应用商户号
根据银盛商户号(X开头)查询应用商户号(自己命名的商户号)
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/queryYsUserCodeByMercId
生产 url: https://yzt.ysepay.com:8443/api/queryYsUserCodeByMercId
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| ysUserCode | 银盛商户号 | M | String | 30 | 银盛用户号,即商户进件之后获取的X开头的商户号 |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | 查询成功 |
| data | 应用商户号 | M | String | 32 | 应用商户号 |
4.2.10 商户修改结算方式
此接口用于更改B端子商户的账户结算方式
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/changeSettleType
生产 url: https://yzt.ysepay.com:8443/api/changeSettleType
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| appUserCode | 商户用户号 | M | String | 30 | 平台用户号,即商户进件接口中的userCode |
| settleAccountType | 结算方式 | M | String | 1 | 0:平台内;1:银行卡,如果结算方式是0,那么只能填1,如果结算方式是1,只能填0 |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | 结算方式修改成功 |
4.2.11 商户修改结算卡
此接口用于更改B端子商户的结算卡信息,先使用图片上传接口上传三张图片(35:结算银行卡正面照、36:结算银行卡反面照、32:已签字盖章的结算卡修改申请单照片),三张图片上传之后获取picId的密文再调用此接口。如果子商户类型为企业,则只能更改为此商户的对公银行账户;如果此子商户类型为个体,则只能更改为此商户法人的对公户或法人银行卡;如果此子商户类型为小微,则只能更改为此商户法人的银行卡。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/changeSettleCard
生产 url: https://yzt.ysepay.com:8443/api/changeSettleCard
编码格式 : UTF-8
调用方式:POST
请求参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| appSecret | App密钥 | M | String | 60 | App密钥 |
| appUserCode | 商户用户号 | M | String | 30 | 平台用户号,即商户进件接口中的userCode |
| bankAccountName | 结算户名 | M | String | 30 | 结算户名 |
| bankAccountNo | 结算账号 | M | String | 20 | 结算账号 |
| bankAccountType | 银行账户类型 | M | String | 2 | 银行账户类型(11:个人借记卡12:个人贷记卡13:个人存折21:对公借记卡22:对公贷记卡23:对公存折 24:单位结算卡) |
| bankCity | 银行所在市 | M | String | 20 | 银行所在市 |
| bankProvince | 银行所在省 | M | String | 30 | 银行所在省 |
| bankName | 银行行名 | M | String | 60 | 银行行名,具体到分行。例:北京银行XX分行,可固定按附表《新行号》填写对应支行 |
| bankType | 银行行别 | M | String | 10 | 银行行别 。例:北京银行 |
| picIds | 图片ID集合 | M | String | 1000 | 必须包含35、36、32三种类型的照片的picId密文,以","隔开 |
返回参数列表
| 参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
|---|---|---|---|---|---|
| code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
| msg | 描述信息 | M | String | 10 | 修改结算卡成功 |
5 返回码
| 返回码 | 描述 |
|---|---|
| A2 | 验签失败 |
| 321 | 需要验证IMEI |
| 322 | 需要重新签绑卡协议 |
| 323 | 需要验证支付密码 |
| 324 | 需要验证短信验证码 |
| 325 | 需要发起查询操作(比如二维码查询) |
| 420 | 必要参数缺失 |
| 421 | 参数格式不正确 |
| 431 | 密码错误次数超限制 |
| 432 | 当天短信验证码发送超限制/密码被锁定/发送失败 |
| 433 | 超出金额限制 |
| 434 | 接口调用次数超限 |
| 435 | 风控校验不过,不允许当笔交易(被风控或其他原因) |
| 440 | 短信发送过于频繁(前一条验证短信未过期) |
| 441 | 用户状态非正常 |
| 442 | 商户状态非正常 |
| 443 | APP状态非正常 |
| 450 | 参数信息不合法 |
| 451 | 不合法的用户编号-用户不存在 |
| 452 | 不合法的商户-商户不存在 |
| 453 | 不合法的appSecret/app为空 |
| 454 | 不合法的密码/错误密码 |
| 456 | 不合法的短信验证码-验证码验证失败 |
| 460 | 不合法或已过期的二维码 |
| 461 | 查询无记录 |
| 520 | 操作失败(或系统繁忙),请稍后重试 |
| 521 | 重复发起操作(比如重复绑卡或重复支付) |
| 522 | 身份认证失败(比如实名信息错误,非本人身份证) |
| 523 | 暂不支持该业务或业务没开通权限 |
| 524 | 钱包余额不足 |
| 525 | 消费失败 |
| 526 | 渠道上游异常 |
附表1
| 类型 | 描述 |
|---|---|
| 00 | 公民身份证正面 |
| 19 | 营业执照 |
| 20 | 税务登记证 |
| 30 | 公民身份证反面 |
| 31 | 客户协议 |
| 32 | 授权书 |
| 33 | 手持身份证正扫面照 |
| 34 | 门头照 |
| 35 | 结算银行卡正面照 |
| 36 | 结算银行卡反面照 |
| 37 | 开户许可证或印鉴卡 |
| 50 | 经营场所图1 |
| 51 | 经营场所图2 |
附表2
图片类型的必要性,打钩为必填项:
| 证件名称 | 小微商户 | 个体商户 | 企业商户 |
|---|---|---|---|
| 身份证正面 | √ | √ | √ |
| 身份证反面 | √ | √ | √ |
| 手持身份证正面照 | √ | √ | √ |
| 营业执照 | √ | √ | |
| 客户协议 | √ | √ | √ |
| 授权书 | |||
| 门头照 | √ | √ | √ |
| 结算银行卡正面照 | √ | √ | |
| 结算银行卡反面照 | √ | √ | |
| 开户许可证或印鉴卡 | √ | ||
| 经营场所图1 | √ | √ | √ |
| 经营场所图2 | √ | √ | √ |
附表3
| 银行类型 | 银行名称 |
|---|---|
| 1031000 | 农业银行 |
| 1051000 | 建设银行 |
| 3065810 | 广发银行 |
| 3102900 | 浦发银行 |
| 4031000 | 邮政银行 |
| 3051000 | 民生银行 |
| 3071000 | 平安银行 |
| 3031000 | 光大银行 |
| 3132900 | 上海银行 |
6 业务错误码
| 错误码 | 错误描述 | 解决方案 |
|---|---|---|
| ACQ.SYSTEM_ERROR | 系统错误 | 请联系银盛客服 |
| ACQ.BUSINESS_TIMEOUT_ERROR | 业务超时 | 请调用查询接口查询订单状态 |
| ACQ.SYSTEM_ERROR | 系统错误 | 请使用相同的参数再次调用 |
| ACQ.INVALID_PARAMETER | 参数无效 | 请求参数有错,重新检查请求后,再调用退款 |
7 安全要求
7.1 公钥和私钥使用说明
生产环境的公钥证书为银盛提供,此公钥证书有两个作用:
1、对所有接口返回的数据进行验签。
2、对随机字符串进行加密,该随机字符串和参与AES对称加密请求参数的随机字符串一致
私钥用于商户签名,格式为xxx_xxx.pfx
7.2 加解密和签名方案
加解密和签名方案分为请求报文的加密签名、响应报文的解密验签、异步通知报文的验签,
其中异步通知报文的验签和响应报文的验签规则是相同的,只是参数不同以及异步通知报文不需要解密业务数据。流程图如下
7.2.1 请求报文的加密方案
本方案采用AES(对称加密算法)和RSA(非对称加密算法)组合的方式进行加密。AES用于业务信息的加密;RSA用于AES密钥的加密传输,
AES加密流程:业务参数组装成JSON格式,直接使用随机生成的AES密钥对JSON数据进行AES加密处理,同时进行BASE64编码处理,得到请求参数msg。
AES加密示例
| msg加密前 | { "head":{"appSecret":"qY2Q+f7ptLK2/y6tUDMLn42swYklNmstSwEYmCy/DQM=","appUserCode":"zj-05"}, "body":{"isSearchBalance":"Y"} } |
|---|---|
| 随机生成的AES密钥(16 进制表示) | 42334430303632373932364537333138 |
| AES加密后(16进制表示) | DFBB0EC2EAEF46A813235C700E57D4CEAE1C3CF5ADB2095522B30B23486556F99D851CC16F7011F7B92FFC07FC6E2223C5F8EA232C0AC6450E2D9640853F53AE03A8799B3A438D3DDCE30F7F0BD49CBABFDB108D4C7EBB5916C349B097ECA7683C809717268291B3BE9C503A623D244551B983032082A12090D797745A812E349D6A07A75FECB952FB0ED098F9C816A5 |
| BASE64编码后 | 37sOwurvRqgTI1xwDlfUzq4cPPWtsglVIrMLI0hlVvmdhRzBb3AR97kv/Af8biIjxfjqIywKxkUOLZZAhT9TrgOoeZs6Q4093OMPfwvUnLq/2xCNTH67WRbDSbCX7KdoPICXFyaCkbO+nFA6Yj0kRVG5gwMggqEgkNeXdFqBLjSdagenX+y5UvsO0Jj5yBal |
| 得到最终的msg | msg=“37sOwurvRqgTI1xwDlfUzq4cPPWtsglVIrMLI0hlVvmdhRzBb3AR97kv/Af8biIjxfjqIywKxkUOLZZAhT9TrgOoeZs6Q4093OMPfwvUnLq/2xCNTH67WRbDSbCX7KdoPICXFyaCkbO+nFA6Yj0kRVG5gwMggqEgkNeXdFqBLjSdagenX+y5UvsO0Jj5yBal” |
RSA公钥加密流程:商户使用银账通公钥对AES密钥明文进行加密,同时进行BASE64编码处理,得到请求参数check。
RSA公钥加密示例
| check加密前 | 42334430303632373932364537333138 |
|---|---|
| RSA公钥加密后 | 50E36E9C909EB6A4FF66E9F5CB506F4638F263E479F697F27C0C1D06345376A1177110C9FCEBBD93D356E191B0E9A0F191C25C420F71D1FD4ED85DB64F917A49B175CBDA544744E39E666E2827B4ED8C95907D8015FC3308FD23E898C8DEDE2665B1B5141B323BF4663F1F6C57BEAB839FE26AADF725F89E0F3C7E2D3C971CB6 |
| BASE64编码后 | UONunJCetqT/Zun1y1BvRjjyY+R59pfyfAwdBjRTdqEXcRDJ/Ou9k9NW4ZGw6aDxkcJcQg9x0f1O2F22T5F6SbF1y9pUR0TjnmZuKCe07YyVkH2AFfwzCP0j6JjI3t4mZbG1FBsyO/RmPx9sV76rg5/iaq33JfieDzx+LTyXHLY= |
| 得到最终的check | check=“UONunJCetqT/Zun1y1BvRjjyY+R59pfyfAwdBjRTdqEXcRDJ/Ou9k9NW4ZGw6aDxkcJcQg9x0f1O2F22T5F6SbF1y9pUR0TjnmZuKCe07YyVkH2AFfwzCP0j6JjI3t4mZbG1FBsyO/RmPx9sV76rg5/iaq33JfieDzx+LTyXHLY=” |
7.2.2 请求报文的签名方案
RSA私钥签名:对除了sign参数以外的请求参数做字典排序,并将参数以key=value形似,并用&符号连接成字符串,形如check=123456&msg=xxxx&msgCode=xxx。对拼接后的字符串使用私钥做签名处理,得到参数sign。
签名示例
| Key/value报文 | {timeStamp=2018-12-16 13:26:16, msg=37sOwurvRqgTI1xwDlfUzq4cPPWtsglVIrMLI0hlVvmdhRzBb3AR97kv/Af8biIjxfjqIywKxkUOLZZAhT9TrgOoeZs6Q4093OMPfwvUnLq/2xCNTH67WRbDSbCX7KdoPICXFyaCkbO+nFA6Yj0kRVG5gwMggqEgkNeXdFqBLjSdagenX+y5UvsO0Jj5yBal, norce=2359e800e11448a086de128487d4fc09, src=02, version=0.1, check=UONunJCetqT/Zun1y1BvRjjyY+R59pfyfAwdBjRTdqEXcRDJ/Ou9k9NW4ZGw6aDxkcJcQg9x0f1O2F22T5F6SbF1y9pUR0TjnmZuKCe07YyVkH2AFfwzCP0j6JjI3t4mZbG1FBsyO/RmPx9sV76rg5/iaq33JfieDzx+LTyXHLY=, certId=tokentest, msgCode=searchUser} |
|---|---|
| 签名原文(sign) | certId=tokentest&check=UONunJCetqT/Zun1y1BvRjjyY+R59pfyfAwdBjRTdqEXcRDJ/Ou9k9NW4ZGw6aDxkcJcQg9x0f1O2F22T5F6SbF1y9pUR0TjnmZuKCe07YyVkH2AFfwzCP0j6JjI3t4mZbG1FBsyO/RmPx9sV76rg5/iaq33JfieDzx+LTyXHLY=&msg=37sOwurvRqgTI1xwDlfUzq4cPPWtsglVIrMLI0hlVvmdhRzBb3AR97kv/Af8biIjxfjqIywKxkUOLZZAhT9TrgOoeZs6Q4093OMPfwvUnLq/2xCNTH67WRbDSbCX7KdoPICXFyaCkbO+nFA6Yj0kRVG5gwMggqEgkNeXdFqBLjSdagenX+y5UvsO0Jj5yBal&msgCode=searchUser&norce=2359e800e11448a086de128487d4fc09&src=02&version=1.0&timeStamp=2018-12-16 13:26:16 |
| 签名数据 | APJZyXOaMsrsWXczUqd6CgOmvvhgF1X1UtovDenSmfQ5Ex0JN2IOB0ItdR35Mlm5OQugqJQloLK8YJs2/vJTFLuqJCmnfRc0PnNfAaoiCSA6cqHpxaBUgR+uRKljxLuMhq7qQmDuUDLrBzWHvyFmTYX4BckK0OKRATyw2of6LBY= |
| 得到最终的sign | Sign=“APJZyXOaMsrsWXczUqd6CgOmvvhgF1X1UtovDenSmfQ5Ex0JN2IOB0ItdR35Mlm5OQugqJQloLK8YJs2/vJTFLuqJCmnfRc0PnNfAaoiCSA6cqHpxaBUgR+uRKljxLuMhq7qQmDuUDLrBzWHvyFmTYX4BckK0OKRATyw2of6LBY=” |
7.2.3 响应报文的解密方案
AES解密流程:首先BASE64解码加密数据data,根据AEA密钥对数据进行解密处理,转成字符串得到解密数据data
| 加密数据(data) | CjcXpJSNuY6q3ecmAnVXO4EY96K/i79YIdFquZNFvMwNzPO6+M6y8trNuyo4WlbLPVOSMNXYjNiWM/vBbwve7tMsXmxAl+T9eJeOcAlR/B4= |
|---|---|
| BASE64解码(16进制表示) | 0A3717A4948DB98EAADDE7260275573B8118F7A2BF8BBF5821D16AB99345BCCC0DCCF3BAF8CEB2F2DACDBB2A385A56CB3D539230D5D88CD89633FBC16F0BDEEED32C5E6C4097E4FD78978E700951FC1E |
| AES密钥(16进制表示) | 43454530384333413242363237333136 |
| AES密钥解密(字符串) | {"data":"9d9aa08c602dbc3fec5d9755c3779ca6","code":"200","msg":"OK"} |
7.2.4 响应报文的验签方案
{"charset":"UTF-8","data":"eyJhbW91bnQiOiIxMC4wIiwibm90aWZ5VGltZSI6IjIwMTgtMTItMDcgMTc6MjU6MTUiLCJvcmRlck5vIjoiNDQ0NDU2NjIyMyIsInNlcnZpY2VJZCI6IjE4MDIwNTIxMTcwODAwMzkiLCJzdGF0dXMiOiIwNCIsInRyYWRlU24iOiIzMjEyMDE4MTIwNzYyNzEzMjI0OTQifQ==","sign":"UUfJCDZYBFk/Tqke3XsN63RBtldyzdq8vK4k74SIkpQu6eaxBGlkd/4AjEkk58ZlWYzXcU4pifDHTjAE2CdGMrS79zZwQ1zaaA2xSZMnvtBVJUryUau6e0E2w4/TXWXC/PrPhhVCI7PD8e44Cnii4yXfFhW4ETtdrc4+zfngKEI=","timeStamp":"2018-12-07 17:26:07","version":"1.0"}
| 名称 | 类型 | 说明 | 备注 |
|---|---|---|---|
| code | 字符 | 响应码 | 具体参照 6返回码 |
| msg | 字符 | 响应信息 | 响应具体描述 |
| norce | 字符 | 随机字符串 | |
| timeStamp | 字符 | 时间戳 | 格式:2018-12-07 17:26:07 |
| data | 字符 | 加密业务数据 | 原文是JSON格式的业务参数 AES加密然后再base64编码后的结果 |
| sign | 字符 | 签名值 | 服务端私钥签名后,做base64编码后的结果 |
商户端接收到银账通服务端通知的数据后,对所有除了sign以外的参数做字典序排列,并将参数以key=value形式,用&符号进行拼接形成字符串,形如code=200&data=DpAq6Fybf2HDHgxc6k540BKbKem+sBHSsaEzrYNT2gUU6hfOm7yEnDs/vWB9qlmHuTnTRUkdABzCOE3nF2il9yW0G3+o6vyNlEidq2CFuDA=
&msg=OK&norce=5ece581f35b54413b6f5d539de40a527&timeStamp=2018-12-16 14:29:19,然后使用银账通公钥做验签处理,验签通过后,方可进行后续处理。
特别注意:sign参数值为BASE64编码后的结果,验签前需要对sign进行解码处理。 data参数值为BASE64编码结果,后续业务处理也需要进行解码处理,解码后为普通JSON格式字符串,具体参数见data域说明
7.2.5 异步通知报文的验签方案
{"charset":"UTF-8","data":"eyJhbW91bnQiOiIxMC4wIiwibm90aWZ5VGltZSI6IjIwMTgtMTItMDcgMTc6MjU6MTUiLCJvcmRlck5vIjoiNDQ0NDU2NjIyMyIsInNlcnZpY2VJZCI6IjE4MDIwNTIxMTcwODAwMzkiLCJzdGF0dXMiOiIwNCIsInRyYWRlU24iOiIzMjEyMDE4MTIwNzYyNzEzMjI0OTQifQ==","sign":"UUfJCDZYBFk/Tqke3XsN63RBtldyzdq8vK4k74SIkpQu6eaxBGlkd/4AjEkk58ZlWYzXcU4pifDHTjAE2CdGMrS79zZwQ1zaaA2xSZMnvtBVJUryUau6e0E2w4/TXWXC/PrPhhVCI7PD8e44Cnii4yXfFhW4ETtdrc4+zfngKEI=","timeStamp":"2018-12-07 17:26:07","version":"1.0"}
| 名称 | 类型 | 说明 | 备注 |
|---|---|---|---|
| charset | String | 消息编码格式 | 现在只支持UTF-8, |
| version | String | 消息版本号 | 现在是1.0 版本 |
| timeStamp | String | 时间戳 | 格式:2018-12-07 17:26:07 |
| data | String | 时间戳 | 具体通知的JSON格式的业务参数base64编码后的结果 |
| sign | String | 签名值 | 服务端私钥签名后,做base64编码后的结果 |
商户端接收到银账通服务端通知的数据后,对所有除了sign以外的参数做字典序排列,并将参数以key=value形式,用&符号进行拼接形成字符串,形如charset=UTF-8&data=eyJhbW91bnQiOiIxMC4wIiwibm90aWZ5VGltZSI6IjIwMTgtMTItMDcgMTc6MjU6MTUiLCJvcmRlck5vIjoiNDQ0NDU2NjIyMyIsInNlcnZpY2VJZCI6IjE4MDIwNTIxMTcwODAwMzkiLCJzdGF0dXMiOiIwNCIsInRyYWRlU24iOiIzMjEyMDE4MTIwNzYyNzEzMjI0OTQifQ==&timeStamp=2018-12-07 17:26:07&version=1.0,然后使用银账通公钥做验签处理,验签通过后,方可进行后续处理。
特别注意:sign参数值为BASE64编码后的结果,验签前需要对sign进行解码处理。 data参数值为BASE64编码结果,后续业务处理也需要进行解码处理,解码后为普通JSON格式字符串,具体参数见data域说明 {"code":200,"message":"成功","data":null,"list":null}