银账通接口(银盛存管)
版本说明
版本 | 日期 | 修改 | 审核 | 说明 |
---|---|---|---|---|
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消息码列表
接口名称 | 消息码 |
---|---|
用户开户 | applyAccount |
手机验证码 | verificationCode |
注册手机号绑定 | registerMobileBind |
修改注册手机号 | registerMobileModify |
用户信息查询 | getAccountInfo |
银行卡绑定申请 | bindingBankCard |
银行卡绑定确认 | confirmAndBindingCard |
银行卡绑定申请(新) | bindingBankCardNew |
银行卡绑定确认(新) | confirmAndBindingCardNew |
绑定银行卡查询 | userBindingCardList |
解绑银行卡 | unbindBankCard |
卡bin查询 | cardInformation |
2.4 系统对接前的准备工作及注意事项
测试环境可联系商户对接人员获取app密钥及App用户号及证书。
测试环境对接完成可联系对接人员获取线上证书及相关密钥。
3.产品介绍
3.1场景介绍
适用于商家调用银账通的API接口,在合作商户app或网站上实现用户及商户开户、绑卡、充值、提现、支付、解绑卡等功能。
3.2 功能描述
本文档描述银账通开发项目与合作商户相关系统之间的报文格式、接口规范及安全规范。
3.3 业务流程
银账通合作商户的接入方式,根据业务模式进行接入:
不验证:用户在交易过程中,银盛不进行任何验证,所有验证交由合作商户完成。
短信验证:用户在交易过程中,银盛下发短信验证码进行短信验证。
4 接口说明
描述:第三方app后台直接请求银账通后台接口
4.1报文规范
请求参数是否必填,M表示必填,O表示选填
4.2后台接口
4.2.1 用户开户
该接口用于个人用户开户,即C端用户创建商户,如企业商户开户请使用4.2.26商户进件接口。如只有B端商户注册则不用对接用户部分。
开户流程
调用开户接口
开户成功后进行注册手机号绑定,并进行短验
用户回填验证码,完成开户操作。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/applyAccount
生产 url: https://yzt.ysepay.com:8443/api/applyAccount
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 商户系统中的用户唯一标识号,可序列生成 |
userType | 用户类型 | M | String | 2 | 00-个人 |
accessTerminal | 访问终端 | M | String | 2 | 00-PC,01-移动端 |
name | 真实姓名 | M | String | 50 | 例:张三 |
certifiType | 证件类型 | M | String | 2 | 00-身份证 暂时只支持身份证 |
certifiNo | 证件号码 | M | String | 18 | 暂时只支持身份证号码 |
expansion | 拓展参数 | O | String | 60 | 可添加的拓展参数 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200-成功,误 |
msg | 描述信息 | M | String | 10 | 请求结果信息:开户成功 |
4.2.2 手机验证码
1.注册手机号绑定接口调用之前调用此接口(funcode=B1),系统将向待绑定手机号码发送动态短信验证码。
2.修改注册手机号前调用此接口(funcode=B2),系统将向待修改手机号码发送动态短信验证码。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/verificationCode
生产 url: https://yzt.ysepay.com:8443/api/verificationCode
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
mobile | 注册手机号 | M | String | 11 | 注册手机号 |
funcode | 验证类型 | M | String | 2 | B1-手机号绑定、B2-修改注册手机号 |
flag | 客户标识 | M | String | 2 | A1-个户 |
A2-商户 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200-成功 |
msg | 描述信息 | M | String | 10 | 请求结果信息,如“success” |
4.2.3 注册手机号绑定
注:开户接口调用之后需要调用该接口绑定手机号,本交易由商家app后台发起,银账通系统直接返回
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/registerMobileBind
生产 url: https://yzt.ysepay.com:8443/api/registerMobileBind
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
mobile | 注册手机号 | M | String | 11 | 注册的手机号 |
verificationCode | 验证码 | M | String | 6 | 验证码 |
flag | 客户标识 | M | String | 2 | A1-个户 |
A2-商户 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200-成功 |
msg | 描述信息 | M | String | 12 | 请求结果信息:注册手机号绑定成功 |
4.2.4 修改注册手机号
用于个人用户修改用户注册手机号
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/registerMobileModify
生产 url: https://yzt.ysepay.com:8443/api/registerMobileModify
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
mobile | 原手机号码 | M | String | 11 | 原手机号码 |
verificationCode | 短信验证码 | M | String | 2 | 短信验证码 |
newMobile | 新手机号 | M | String | 11 | 新手机号 |
flag | 客户标识 | M | String | 2 | A1-个户 |
A2-商户 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
msg | 描述信息 | M | String | 10 | 请求结果信息:“修改绑定手机成功” |
4.2.5 用户信息查询
该接口用于进行用户信息的查询。
请求URL
测试 url:http://bd4-vtest.ysepay.com/api/getAccountInfo
生产 url:https://yzt.ysepay.com:8443/api/getAccountInfo
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户编号 | M | String | 30 | 对应用户开户接口appUserCode |
返回参数列表*
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200 |
msg | 描述信息 | M | String | 8 | 请求结果信息:ok |
data | 业务参数 | M | Object | - | 业务相关参数 |
data
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appUserCode | 平台用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
userType | 用户类型 | M | String | 2 | 户类型: 00-个人 |
accountLevel | 用户等级 | M | String | 2 | 账户等级:1一类户;2二类户;3三类户 |
state | 用户状态 | M | String | 4 | 用户状态(00:正常,98:冻结,99:注销) |
name | 用户姓名 | M | String | 100 | 例:张* |
certificateNo | 用户身份证 | M | String | 80 | 例:******************0000 |
mobile | 用户注册手机号 | M | String | 60 | 例:130******000 |
createTime | 创建时间 | M | String | 15 | YYYY-MM-dd HH:MM |
accessTerminal | 访问终端 | M | String | 2 | 00-PC,01-移动端 |
4.2.6 银行卡绑定申请
用户开户流程(包括开户+手机号绑定)后可进行银行卡绑定,可用于在商家app进行消费。
绑卡流程:
调用银行卡绑定申请接口,银行系统会发送短信验证码给用户银行预留手机号
调用银行卡绑定确认接口,进行短信确认即可。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/bindingBankCard
生产 url: https://yzt.ysepay.com:8443/api/bindingBankCard
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
bankAccountNo | 银行卡号 | M | String | 19 | 银行卡号 |
mobile | 银行预留手机号 | M | String | 11 | 银行预留手机号 |
validTimeEnd | 有效期 | O | String | 4 | 格式为MMYY |
cvv | CVV2 | O | String | 3 | 信用卡安全码 |
flag | 客户类型 | O | String | 2 | 用户绑卡A1,商户绑卡A2,不传默认A1 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200-成功 |
msg | 描述信息 | M | String | 8 | 请求结果信息,例如:“登记成功” |
data | 业务参数 | M | Object | - | 参数集合 |
data
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
sn | 签约登记流水号 | M | String | 128 | 银行卡绑定确认接口必填参数 |
4.2.7 银行卡绑定确认
银行卡绑定申请接口调用之后,发起银行卡绑定确认交易。
请求URL
测试url: http://bd4-vtest.ysepay.com/api/confirmAndBindingCard
生产url: https://yzt.ysepay.com:8443/api/confirmAndBindingCard
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
sn | 签约登记流水号 | M | String | 30 | 银行卡绑定申请接口返回 |
smsCode | 短信验证码 | M | String | 6 | 验证码 |
flag | 客户类型 | O | String | 2 | 用户A1,商户A2,不传默认A1 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
msg | 描述信息 | M | String | 10 | 请求结果信息,参考值:“业务处理成功” |
4.2.8 银行卡绑定申请(新)
此绑卡接口与旧的银行卡绑定接口(4.2.16&2.2.17 )参数一样,区别是原有银行卡绑定接口只支持快捷协议银行卡绑卡,而此银行卡绑定接口支持所有银行卡绑卡,如果银行卡支持开通快捷协议,则可以进行充值、消费、提现,不支持开通快捷协议的银行卡只能提现。
绑卡流程:
调用银行卡绑定申请接口,银行系统会发送短信验证码给用户银行预留手机号
调用银行卡绑定确认接口,进行短信确认即可。
请求URL
测试 url: [http://bd4-vtest.ysepay.com/api/bindingBankCardNew
生产 url: https://yzt.ysepay.com:8443/api/bindingBankCardNew
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
bankAccountNo | 银行卡号 | M | String | 19 | 银行卡号 |
mobile | 银行预留手机号 | M | String | 11 | 银行预留手机号 |
validTimeEnd | 有效期 | O | String | 4 | 格式为MMYY |
cvv | CVV2 | O | String | 3 | 信用卡安全码 |
flag | 客户类型 | O | String | 2 | 用户绑卡A1,商户绑卡A2,不传默认A1 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200-成功 |
msg | 描述信息 | M | String | 8 | 请求结果信息,例如:“登记成功” |
data | 业务参数 | M | Object | - | 参数集合 |
data
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
sn | 签约登记流水号 | M | String | 128 | 银行卡绑定确认接口必填参数 |
4.2.9 银行卡绑定确认(新)
银行卡绑定申请(新)调用之后,发起银行卡绑定确认交易。如果开通快捷协议,返回:“绑卡成功,此银行卡可支持提现和支付”;如果没有开通快捷协议,返回:“绑卡成功,此银行卡可支持提现”
请求URL
测试url: http://bd4-vtest.ysepay.com/api/confirmAndBindingCardNew
生产url: https://yzt.ysepay.com:8443/api/confirmAndBindingCardNew
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
sn | 签约登记流水号 | M | String | 30 | 银行卡绑定申请接口返回 |
smsCode | 短信验证码 | M | String | 6 | 验证码 |
flag | 客户类型 | O | String | 2 | 用户A1,商户A2,不传默认A1 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200-操作成功 |
msg | 描述信息 | M | String | 10 | 请求结果信息,参考值:“业务处理成功” |
4.2.10 绑定银行卡查询
查询用户绑定银行卡。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/userBindingCardList
生产 url: https://yzt.ysepay.com:8443/api/userBindingCardList
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户编号 | M | String | 30 | 对应用户开户接口appUserCode |
flag | 客户类型 | O | String | 2 | 用户A1,商户A2,不传默认A1 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200 |
msg | 描述信息 | M | String | 10 | 参考值:ok |
data | 参数列表 | M | Objcet | - | 参数列表 |
data
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
bankCardList | 银行卡列表 | M | List | - | 银行卡列表 |
bankCardList
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
bankAccountNo | 银行卡号 | M | String | 30 | 例:620**************0000 |
cardIssuingBank | 发卡行名称 | M | String | 例:平安银行 | |
cardType | 银行卡类型 | M | String | 2 | 卡类型(11:个人借记卡 12:个人贷记卡 |
bindStatus | 绑定状态 | M | String | 2 | 01:生效;02:失效;03:签约失败;04:已登记 |
mobile | 银行预留手机号 | M | String | 20 | 例:130******000 |
bindTime | 绑定时间 | O | String | 20 | YYYY-MM-dd HH:MM |
cardToken | 卡片编号 | M | String | 64 | 卡片id |
4.2.11 解绑银行卡
该接口用于对用户已绑定银行卡进行解绑操作。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/unbindBankCard
生产 url: https://yzt.ysepay.com:8443/api/unbindBankCard
编码格式 : UTF-7
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
appSecret | App密钥 | M | String | 60 | App密钥 |
appUserCode | App用户号 | M | String | 30 | 对应用户开户接口的appUserCode |
cardToken | 卡片编号 | M | String | 30 | 绑定银行卡片编号 |
flag | 客户类型 | O | String | 2 | 用户A1,商户A2,不传默认A1 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200 |
msg | 描述信息 | M | String | 10 | 参考值:ok |
4.2.12 卡bin查询
商户APP可调用该接口查询银行卡卡bin信息,以便于展示银行LOGO,以及针对贷记卡要求商户及时补充CVV、安全码等。
请求URL
测试 url: http://bd4-vtest.ysepay.com/api/cardInformation
生产 url: https://yzt.ysepay.com:8443/api/cardInformation
编码格式 : UTF-8
调用方式:POST
请求参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
AppUserCode | App用户号 | M | String | 30 | 对应用户开户接口appUserCode |
AppSecret | App密钥 | M | String | 60 | App密钥 |
bankAccountNo | 银行卡号 | M | String | 18 | 银行卡号 |
返回参数列表
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
code | 返回码 | M | String | 3 | 参考值:200 |
msg | 描述信息 | M | String | 10 | 参考值:ok |
data | 参数列表 | M | Objcet | - | 参数列表 |
data
参数 | 名称 | 是否必填 | 参数类型 | 长度 | 描述 |
---|---|---|---|---|---|
cardIssuingBank | 发卡行名称 | M | String | 10 | 例:平安银行 |
cardType | 卡类型 | M | String | 3 | 卡类型(11:个人借记卡 12:个人贷记卡 |
banktypeCode | 发卡行类型编码 | M | String | 10 | 卡bin |
-data-
SORT_ID | 交易状态 | O | String | 交易的状态 | |
---|---|---|---|---|---|
REFERENCE_ID | 交易订单号 | O | String | 交易订单号 | |
IS_CHARGE_FEE | 是否收取手续费:01:是,02:否 | O | String | 是否收取手续费:01:是,02:否 | |
IS_AGAIN_DIVISION | 是否重新分账交易:Y:是,N:否 | O | String | 是否重新分账交易:Y:是,N:否 | |
PRIORITY | 优先级 | O | String | 优先级 | |
IS_REAL_TIME | 是否实时拆分:00:是,01:否 | O | String | 是否实时拆分:00:是,01:否 | |
FEE_PRIORITY | 手续费优先级 | O | String | 手续费优先级 | |
DIVISION_MERC_ID | 分账商户号 | O | String | 分账商户号 | |
DIV_AMOUNT | 金额 | O | String | 金额 | |
DIVISION_MODE | 分账模式:01:按比例,02:按金额 | O | String | 分账模式:01:按比例,02:按金额 | |
LOG_NO | 流水号 | O | String | 流水号 | |
DIV_ORI_TRAN_CHARGE_FEE | 分账原流水手续费 | O | String | 分账原流水手续费 | |
ID | 分账单号 | O | String | 分账单号 | |
BATCH_NUMBER | 分账批次号 | O | String | 分账批次号 | |
REFUND_AMT | 累计已退金额 | O | String | 累计已退金额 | |
SPONSOR_MERC_ID | 发起方商户号 | O | String | 发起方商户号 | |
DIV_RATIO | 比例 | O | String | 比例 | |
DIV_ORI_TRAN_AMT | 分账原流水交易金额 | O | String | 分账原流水交易金额 | |
DIV_DT | 分账日期 | O | String | 日期 | |
IS_MAIN_MERCHANT | 是否主商户:01:是,02:否 | O | String | 是否主商户:01:是,02:否 | |
ORG_NO | 商户机构号 | O | String | 商户机构号 | |
IS_DIVISION | 是否参与分账:01:是,02:否 | O | String | 是否参与分账:01:是,02:否 | |
MERC_ID | 主商户号 | O | String | 主商户号 | |
CHECK_STATE | 分账校验:00:成功,01:失败,99:无需分账 | O | String | 分账校验:00:成功,01:失败,99:无需分账 | |
CHARGE_FEE_AMT_SUM | 总手续费 | O | String | 总手续费 | |
DIV_TRAN_SOURCE | 分账交易来源 | O | String | 分账交易来源 | |
DIV_AMT | 分账金额 | O | String | 分账金额 | |
SEQ | 分账序列号 | O | String | 分账序列号 | |
AC_DT | 原交易日期 | O | String | 原交易日期 | |
DIV_CHARGE_FEE | 是否收取手续费:01是,02:否 | O | String | 是否收取手续费:01是,02:否 |
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}