银账通接口(银盛存管)
版本说明
版本 | 日期 | 修改 | 审核 | 说明 |
---|---|---|---|---|
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}