银账通接口(银盛存管)

版本说明

版本 日期 修改 审核 说明
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 王天蛟 温智贤 新增修改商户结算卡和修改商户结算方式接口

目录

目录 2

1.概述 7

2.接口通讯 7

2.1交互方式 7

2.2报文结构 7

2.3消息码列表 8

2.4 系统对接前的准备工作及注意事项 9

3.产品介绍 9

3.1场景介绍 9

3.2 功能描述 9

3.3 业务流程 9

4 接口说明 10

4.1报文规范 10

4.2后台接口 10

4.2.1 获取token

4.2.2 图片上传

4.2.3 商户进件

4.2.4 商户进件查询

4.2.5 商户进件异步通知

4.2.6商户报备

4.2.7商户报备查询

5 返回码 52

6 业务错误码 54

7 安全要求 54

7.1 公钥和私钥使用说明 54

7.2 加解密和签名方案 55

7.2.1 请求报文的加密方案 55

7.2.2 请求报文的签名方案 57

7.2.3 响应报文的解密方案 58

7.2.4 响应报文的验签方案 58

7.2.5 异步通知报文的验签方案 59

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 业务流程

银账通合作商户的接入方式,根据业务模式进行接入:

  1. 不验证:用户在交易过程中,银盛不进行任何验证,所有验证交由合作商户完成。

  2. 短信验证:用户在交易过程中,银盛下发短信验证码进行短信验证。

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 商户进件

该接口用于入驻平台的企业,小微及个人商户进件

商户进件流程说明:

  1. 获取token

  2. 进行图片上传

  3. 调用商户进件接口完成进件。

请求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 通知手机号
email 邮箱 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}

results matching ""

    No results matching ""