('某银行快捷支付接口规范(DOCX38页)上海银行-快捷支付接口规范(版本号v3.6.6)前言本文档介绍上海银行“快捷支付”的技术标准此接口标准适应借记卡快捷支付及信用卡快捷支付。其中包括业务处理与系统交互方式、报文的语法与语义、网络连接方式、安全规范等。第1章文档概述1.1介绍1.1.1概述本文档阐述的技术标准,为更加快捷安全的互联网支付结算提供了解决方案。1.1.2目标读者本文档的主要目标读者是银行与商户的技术实施人员,也可供业务人员参考。1.1.3最近修订版本号作者内容提要核准人发布日期1.0黄敦迪定义上海银行快捷支付接口规范蔡红林2012-06-12.0黄敦迪删除快捷支付业务概述;调整错误代码;重定义身份鉴权报文头;删除单笔提现接口;删除批量交易明细查询,新增单笔交易明细查询黄敦迪2012-6-133.0黄敦迪增加批量交易明细查询,修改错误代码黄敦迪2013-3-113.1黄敦迪修改身份鉴权、网上支付、单笔退款、批量退款接口,加入了卡代号等2013-3-123.2黄敦迪鉴权需中账户姓名改为必输2013-4-113.3黄敦迪接口实现说明中批量交易查询改为非必须实现的接口。批量交易查询请求报文中加入订单号列表2013-4-193.4彭小波修改身份鉴权接口,CVV2、有效期改为可选字段,增加KoalB64Cert;修改网上支付接口CVV2、有效期改为可选字段,返回报文银行卡改为卡代号,黄敦迪2013-4-223.5.1彭小波批量交易查询增加爱业务规则:订单最多支持10笔;查询的多条订单只返回符合条件的记录。2013-4-283.5.2彭小波为单笔退款增加错误代码:40452013-5-23.5.3黄敦迪单笔交易明细查询应答报文中status枚举值调整及定义errorCode的取值;批量交易查询应答报文TradeInfo清单中的signNo改为cardNo2013-5-113.5.4彭小波错误码不再分类别扩展鉴权的证件类别鉴权中增加校验规则,手机号码必须为11位明确单笔订单查询中的交易日期和时间2013-5-173.5.5彭小波调整错误码描述:2013-5-183006对应描述改为卡号不存在或不支持的银行卡3016对应描述改为银行账户交易失败批量交易查询的交易状态进行调整:0000成功;0001失败3.5.6彭小波3003的errormessage从“身份证号码不匹配”改为“身份证件号码不匹配”2013-5-213.5.7彭小波针对信用卡的CVV2和有效期,增加对应的错误码:3050和30512013-5-243.5.8彭小波身份鉴权增加业务逻辑:CVV2和有效期需同时输入或同时都不输入2013-5-243.5.9彭小波网上支付去除:CVV2和有效期2013-5-273.6黄敦迪删除二级商户信息同步接口,增加单笔撤消接口2013-6-203.6.1彭小波批量交易查询响应报文中交易信息列表tradeInfoList签名要求由”Y”变更为”N”2013-6-263.6.2彭小波新增错误码:4046清算的订单不能做撤销处理2013-6-273.6.3彭小波银行流水号由char(19)统一更改为char(20),修改点:网上支付、单笔退款、单笔撤消2013-6-273.6.4彭小波清算对账中文件格式中银行卡号修正为银行卡代号2013-7-13.6.5彭小波单笔撤消上送报文增加交易金额,同时增加校验:交易金额必须和原订单交易金额一致2013-7-23.6.6彭小波清算对账增加业务规则:信用卡撤消及对应原订单不在清算对账文件内。2013-7-5第2章报文结构上海银行快捷支付报文规范规定了上海银行与商户之间交换报文的处理规范。2.1报文结构快捷支付报文统一采用xml格式。所有的快捷支付报文均以Banksh作为根元素,每个Banksh元素中可以包含多个Message元素。Message元素中包含代表具体的业务的元素,比如CSVReq、CSVRes等。每个业务元素由一系列属性元素构成,不同的业务元素中包含的属性元素有所不同。对于涉及到签约状态修改或者资金变动的业务元素,必须要有与之匹配的Signature元素进行数字签名。作为约定,Banksh元素、Message元素与业务元素均是首字母大写的CamelCase形式,所有的属性元素均是首字母小写的CamelCase形式。以签约请求报文为例,报文的格式如下:… … … … … … … … … … … | … … … … Messageid定义为不重复的随机数,以防止报文重复提交;在下文中出现的具体报文格式描述中,“出现要求”列包含的值的含义如下表所示:含义请求方约束服务方约束RRequired必须包含该域必须校验该域是否存在和内容的合法性CConditional如果条件符合必须包含该域\uf06c当条件满足时,必须校验该域是否存在\uf06c当该域存在时,必须检查其内容的合法性OOptiona该域可选当该域存在l时,必须检查其内容的合法性2.2报文分类快捷支付协议中的报文按照交互模式的不同,分为以下几类:\uf06e服务请求类报文服务请求类报文用于请求-应答交互模式,由服务使用者向服务提供者发送。服务请求类报文的命令规范是XXReq,其中XX是报文代表的业务的首字母缩略,Req是Request的缩写。比如对于支付请求报文,命名为CPReq,代表CardPaymentRequest。\uf06e服务应答类报文服务应答类报文用于请求-应答交互模式,由服务提供者向服务使用者返回。服务应答类报文的命令规范是XXRes,其中XX是报文代表的业务的首字母缩略,Res是Response的缩写。比如对于支付应答报文,命名为CPRes,代表CardPaymentResponse。\uf06e通知类报文通知类报文用于单向通知交互模式,由通知发送者向通知接收者发送。通知类报文的命令规范是XXNotify,其中XX是报文代表的业务的首字母缩略。\uf06e通用报文有两种通用报文,一种是Error报文,用于返回处理错误;另一种是NotifyAccept,代表单向通知已被接受。2.3通用报文2.3.1错误代码\uf06e银行返回的错误代码说明:错误错误描述解释代码0000无效的根元素根元素无法识别0001未定义的消息域消息不是CSReq、CSRes等;或者消息发送给了一个错误的组件0002必填域缺失0003根据规范,一个或多个域不符合格式要求例如,非数字,或者不是有效的日期格式等等。0004商户标识不正确instId域中的商户标识不正确0005签名无效报文签名校验不通过0006验证证书有效性失败商户证书过期或失效1000文件格式不正确商户批处理业务上传文件不正确1001文件不存在下载文件时,找不到指定的文件1002文件已处理对于不允许重复处理的业务的文件,如果已处理过,就发生此错误1003文件无法解压缩上传的文件无法正确解压缩1004文件摘要不正确文件上传通知报文中的文件摘要不正确2001支付流水重复重复的网上支付流水2002原支付流水不存在申请退货的原支付流水不存在2003查询范围太大查询时间跨度太大2004退款订单日期错误退款订单日期小于原订单日期2005当日撤销必须为全额退款业务要求:当日撤销必须为全额3001真实姓名不正确真实姓名与商户端登记的不一致3002证件类型不正确证件类型与商户端登记的不一致3003身份证件号码不匹配身份证件号码与商户端登记的身份证件号码不匹配3004手机号不匹配3005不支持的银行卡类型3006卡号不存在或不支持的银行卡3007未鉴权的银行卡未做过鉴权的银行卡(卡代号不存在时)3008认证信息不匹配认证信息与商户通过认证的信息不匹配3009银行卡状态不正确银行卡状态不正确3011原支付申请流水不存在支付申请流水不存在(用于退款)3013金额超限支付金额超过每日限额(退款时超出原订单金额也用这个)3014余额不足银行账户中的余额不足以完成支付3015银行交易处理中该笔交易在银行前置系统中状态未知3016银行账户交易银行系统的错误返回。失败3050有效期错误或卡已过期对信用卡有效期的校验,信用卡有效期输错,或信用卡已过有效期3051CVV2错误信用卡CVV2的校验4045未清算的订单不能做退款处理不支持当日退款4001快捷支付渠道关闭没有开通快捷支付业务4002服务没有开通请求的业务没有开通4046清算的订单不能做撤销处理清算的订单不允许做撤销处理9000暂时系统异常通用性错误2.3.2NotifyAccept报文\uf06e功能用来代表单向通知已被接受。\uf06e消息域下表列举了消息域的定义中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识流水号orderNumchar(30)RY原商户提交的信息流水号交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS结果代码errorCodechar(4)RYSUCC表示成功其他均为失败错误描述errorMessagechar(256)ON消息扩展extensionON2.4报文的解析与传输快捷支付报文的传输使用HTTP(S)方式,在HTTP请求/响应体中包含XML形式的报文。2.4.1报文解析对XML解析的基本要求如下:\uf06e版本号检查用于表示组件支持的协议版本号。消息版本号必须表示为:n+.n+[.n+],其中“n”表示数字,\uf020“+”表示一个或多个。比如1.0或1.0.1。在所有的消息中,各组件都必须填写自身支持的协议版本号。消息版本号不能低于1.0.1。\uf06exml解析为了可以支持后续协议版本,xml解析的实现不要做严格的验证。特别是需要忽略未被确认的域。所有xml消息必须用“utf-8”编码。\uf06eMessage域之id属性匹配请求和应答报文的Message域之id属性必须相同,id是请求方生成的唯一序列号。比如:银行在CSReq的Message域设置了一个id属性值,则商户在CSRes里面的Message域的id属性必须和CSReq的Message域之id值相同。2.4.2报文传输对HTTPS传输的基本要求如下:\uf06e使用POST发送消息消息请求基于HTTP/HTTPS的POST方式。\uf06eHTTP消息头要求HTTP请求与响应消息中必须按照如下要求设置头部域:‘Content-Length:’必须设置成消息体的长度‘Content-Type:’必须设置下面的值:application/xml;charset=utf-8第3章文件交换规范3.1文件命名规范文件命名规范对文件名称进行统一的规划,以达到从文件名称上区分不同业务文件的目的。文件命名规范:filetype_yyyymmdd_sequence.zip,其中:filetype——文件类型,如:BRF–批量退款文件;BRRF-批量退款结果文件;CCF——清算对账文件;INFO-商户信息文件;yyyymmdd——文件业务日sequence——批次号,以01,02,03递增,与商户一般1天交互一次,故批次号固定为“01”例如:CCF_20100222_01.zip(清算对账文件)3.2文件压缩传输前需要压缩成zip格式。3.3文件加密对压缩后的文件,需要加密之后再传输。加密时采用三重DES对称加密算法3DES。加密密钥按事先约定方式分发。3.4文件摘要对加密后的文件进行摘要。摘要算法使用标准SHA1算法,结果表示成40位16进制大写字母数字串。在商户往银行发送文件下载请求时需对若干域进行摘要,具体可参考文件下载章节描述;在银行往商户反馈文件时,需对文件进行摘要文件摘要商户可从https的response的head域里面的Banksha1域的值获取摘要,从Banksign域的值获取签名。3.5文件下载(银行端URL)文件采用商户主动请求从银行文件服务下载的方式。例如银行文件服务的URL格式如下:http(s)://epay.bankofshanghai.com/boscartoon/express.do?instId=10001198&actiontype=download&date=20100204&finename=SCF_20100222_01.zip&KoalB64Cert=xxxxxx&sign=xxxxxx,其中:http(s)://epay.bankofshanghai.com/boscartoon/express.do——银行文件系统的根路径。actiontype——操作类型(如:upload表示上传、download表示下载)。instId——商户标识。date——交易日期yyyymmdd。filename——遵循业务文件命名规范的文件名。KoalB64Cert——商户公钥Base64位编码sign——使用certId指定的证书对“actiontypeinstIddatefilename”进行签名,对签名结果进行Base64编码获得的字符串,详情见签名规范。3.6文件下载失败http状态码1、406:商户标识不匹配2、405:操作类型不正确3、420:银行端验签失败4、404:请求文件名不存在5、409:请求文件格式不正确第4章接口实现规范4.1接口实现说明序号接口类型交易类型描述必须1身份鉴权实时商户发起的实名签约Y验证2网上支付实时Y3单笔退款实时Y4批量退款批量N5单笔交易明细查询实时Y6批量交易查询实时N7清算对帐批量Y8单笔撤消实时N4.2身份鉴权4.2.1业务功能银行接收商户要求身份鉴权的交易请求,必须包含客户卡号、客户姓名、客户证件类型、客户证件号码、手机号码等信息,银行核对卡号对应的信息与客户提供的信息一致型,如一致反馈匹配,否则反馈不匹配。4.2.2业务规则\uf06e由于快捷支付的签约是在商户端完成的,银行只是提供身份鉴权,协助商户验证信息的匹配性。商户必须为客户身份验证承担责任,确保是持卡人本人,银行不承担责任。\uf06e快捷支付签约用户的必须持有手机,且手机号为用户在银行端开卡时所登记的手机号。\uf06e银行身份鉴权,暂定为核对卡对应的客户姓名、证件类型、证件号码、手机号码,可根据实际情况调整。\uf06e建议商户在快捷支付签约成功后发手机短信通知客户。4.2.3交互模式在身份鉴权业务中,商户与上海银行通过请求-应答模式交互。商户作为服务使用者向银行发送“身份鉴权申请”报文IAReq,银行作为服务提供者向商户返回“签约应答”报文IARes。涉及到以下交互:1、商户将数据发送到银行的身份鉴权服务接口,商户需调用银行API利用数字证书进行加密,签名。(见数字签名)2、银行端校验通过核实客户信息,并在同一个连接中返回IARes报文告诉银行商户验证情况。银行会对返回数据进行加密,签名。3、商户端接口银行应答报文后,验签、解析报文后做后续处理。4.2.4报文格式\uf06e鉴权请求报文IAReq(IdentityAuthenticationRequest)IAReq是从商户向银行发起的签约请求报文。中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY由银行分配固定值,请求报文中需填写交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS客户姓名namechar(30)RY签约银行卡号cardNochar(20)RY签约银行卡类型cardTypechar(1)RY1借记卡2贷记卡证件类型certTypechar(1)RY1:身份证;2:护照;3:军官证;4:士兵证;5:户口本;6:警官证;7:台胞证证件号码certNochar(30)RY手机号mobilePhoneChar(20)RY持卡人在银行留的手机号手机号必须为11位CVV2cvv2Char(3)ON卡背面签名栏的后三位数字CVV2和有效期需同时输入或同时都不输入有效期validityChar(4)ONMMYYCVV2和有效期需同时输入或同时都不输入经过Base64KoalB64Cert/RN商户端读取本地商户证书文件后,再处理的商户证书代码使用上海银行提供的API进行Base64编码后产生的商户证书数据字串。消息扩展extensionON\uf06e签约应答报文IARRes(IdentityAuthenticationResponse)IARRes银行返回给商户的应答。中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识银行卡号cardNochar(20)RY银行卡代码cardCodeChar(20)RY唯一区分银行卡代码交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS结果代码errorCodechar(4)RY成功SUCC,失败见错误代码错误描述errorMessagechar(256)ON消息扩展extensionON4.3网上支付4.3.1业务功能商户负责验证客户持卡人身份与服务权限,并请求银行划拨客户的资金用于互联网交易的支付;银行负责验证由商户发出的支付指令是否在快捷支付签约的业务范围与银行控制的快捷支付支付限额内,并实时扣减签约银行卡内的余额。由于网上支付引起的银行与商户间的资金清算方法由快捷支付清算标准规定。4.3.2业务规则该交易在执行中需要满足以下约束条件:\uf06e支付必须由客户请求,从合作商户发起(可以网上、网点等渠道)。\uf06e商户控制支付的资金只能从快捷支付签约时确定的签约银行卡账户中支出。银行端做无磁无密交易。\uf06e支付时客户在签约银行卡账户中的资金只能转移到商户指定的清算账户中。\uf06e同一支付订单号的支付交易,银行端限定只能执行一次,永不重复。\uf06e银行与商户需要保存支付相关报文的日志作为解决资金清算不一致的依据。4.3.3处理流程4.3.4交互模式在支付业务中,商户与银行通过请求-应答模式交互。商户作为服务使用者向银行发送“支付”请求报文CPReq,银行作为服务提供者向商户返回“网上支付”应答报文CPRes。4.3.5报文格式\uf06e“网上支付”请求报文CPReq(CardPaymentRequest)网上支付报文请求CPReq(CardPaymentRequest)是从商户向银行发起的支付请求。中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识二级商户代码twoIdchar(15)CN二级商户代码适用于有些商户需银行在账单或明细查询中显示其平台的二级商户名称订单号orderNumchar(30)RY商户支付订单号/流水号,永不重复交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS卡代号cardCodechar(20)RY鉴权时返回的卡代码手续费chargeLong(12)ON预留字段,见金额格式说明交易金额amountLong(12)RY见金额格式说明交易货币currencchar(RY见快捷支付货币代码代码y3)表经过Base64处理的商户证书代码KoalB64Cert/RN商户端读取本地商户证书文件后,再使用上海银行提供的API进行Base64编码后产生的商户证书数据字串。消息扩展extensionON\uf06e“网上支付”应答报文CPRes(CardPaymentResponse)网上支付应答报文CPRes是银行返回给商户CPReq的应答。中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识订单号orderNchar(RY商户支付订单号/流um30)水号,永不重复卡代号cardCodechar(20)RY用于支付的卡代号(来自CPReq)交易流水号serialNochar(20)RY银行交易流水号交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS结果代码errorCodechar(4)RY成功SUCC,失败见错误代码错误描述errorMessagechar(256)ON消息扩展extensionON4.4单笔退款4.4.1业务功能单笔退款是在发生在成功充值之后,将该笔交易充值的款项原路退回到快捷支付签约银行卡账户中。充值退回必须在商户核实之后,由商户发起。单笔退款交易为实时交易,即实时从商户结算账户扣取,入个人账户。4.4.2业务规则充值退回业务在执行中需要满足以下约束条件:\uf06e充值退回业务从商户发起。\uf06e充值退回业务必须有对应成功的支付交易。\uf06e原则上商户可以针对90天内的支付交易发起充值退回业务。特殊商户可另约定。\uf06e充值退回的金额不能超过对应的成功支付交易的金额。\uf06e针对一笔成功的支付充值交易,可以进行多次退回,但退回的总金额不能大于对应该笔成功支付交易的总金额。\uf06e退回的资金只能原路划回签约银行卡账户中。\uf06e商户结算账户应保留足够的退款资金。\uf06e同一退回订单号银行必须保证只能执行一次。\uf06e银行与商户需要保存单笔退回相关报文的日志,作为解决资金清算不一致的凭据。4.4.3处理流程4.4.4交互模式在单笔退款业务中,商户与银行通过请求-应答模式交互。4.4.5报文格式\uf06e“单笔退款”请求报文SRReq(SingleRefundRequest)中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识订单号orderNchar(RY该笔退款交易的商户um30)订单号,永不重复交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS卡代号cardCodechar(20)RY鉴权时返回的卡代码手续费chargeLong(12)ON预留字段,见金额格式说明交易金额amountLong(12)RY见金额格式说明交易货币代码currencychar(3)RY见快捷支付货币代码表原订单号oldorderNumchar(30)RY对应原支付交易的订单号,永不重复原交易日期和时间olddatechar(8)RYYYYYMMDD经过Base64处理的商户证书代码KoalB64Cert/RN商户端读取本地商户证书文件后,再使用上海银行提供的API进行Base64编码后产生的商户证书数据字串。消息扩展extensionON\uf06e“单笔退款”应答报文SRRes(SingleRefundResponse)中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识订单号orderNumchar(30)RY商户退款订单号,永不重复,同支付时订单号规制交易流水号serialNochar(20)RY银行交易流水号交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS卡代号cardCochar(RY退款请求中的卡代码de20)结果代码errorCodechar(4)RY成功SUCC,失败见错误代码错误描述errorMessagechar(256)ON消息扩展extensionON4.5批量退款4.5.1业务功能批量退款业务必须在商户核实之后,由商户发起。商户以提供批量充值退回指令文件的方式,请求银行执行批量的退回处理,银行以批量退回处理结果文件的形式,向商户返回处理结果。4.5.2业务规则充值退回业务在执行中需要满足以下约束条件:\uf06e充值退回业务从商户发起。\uf06e充值退回业务必须有对应成功的支付交易。\uf06e原则上商户可以针对90天内的支付交易发起充值退回业务。特殊商户可另约定。\uf06e充值退回的金额不能超过对应的成功支付交易的金额。\uf06e针对一笔成功的支付充值交易,可以进行多次退回,但退回的总金额不能大于对应该笔成功支付交易的总金额。\uf06e退回的资金只能原路划回签约银行卡账户中。\uf06e同一退回订单号银行必须保证只能执行一次。\uf06e银行与商户需要保存单笔退回相关报文的日志,作为解决资金清算不一致的凭据。\uf06e批量充值退回文件中,每一笔都是按照独立的单笔指令进行处理。4.5.3处理流程1.商户将符合条件的等待处理的快捷支付充值退回申请汇总成批量退回指令文件。文件的格式见快捷支付批量退回指令文件格式说明。该文件保存在商户文件服务器中。2.商户以唯一的批量退回文件批次号、快捷支付批量退回指令文件的下载URL、快捷支付批量退回文件上传URL等要素为参数,构造“批量退货”通知BRNotify,以单向通知方式发送给银行。3.银行收到“批量退货”通知BRNotify之后,从通知中解析出批次号与批量退货指令文件下载URL,并使用该URL下载批量退货文件如果文件当时下载不成功,银行会有恰当的重试策略。4.银行处理批量退货指令文件。处理的方式是从批量退货文件中解析出每一笔退货指令进行分别处理。针对每一笔退货的银行内部处理方式与单笔退货相同。每一笔退货的处理结果都记录到批量退货结果文件中。5.银行处理完成后发送通知报文告知,商户主动发起下载结果文件,或者由商户固定时间下载文件也可;考虑安全原因,建议哪方生成的文件存放于哪方的sever,对方可发起下载。4.5.4交互模式银行发送通知报文告知,商户主动发起下载结果文件。注:1、商户生成的批量退款文件必须按约定的格式及压缩、加密方式存放。并应定义下载的URL。例如3.5章节文件下载(银行方URL)4.5.5报文格式\uf06e“批量退货”通知报文BRNotify(BatchRefundNotify)批量退货通知报文BRNotify是商户向银行发起的通知批量退货文件下载请求。中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识流水号orderNumchar(30)RY订单号/流水号,永不重复,定义该批次的退款文件。交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS文件下载URLdownUrlChar(100)RY商户发布的退款文件下载URL如,例如http://172.17.11.2:80/file/download/上海银行只能支持IP地址,不支持域名;请商户在测试和生产前公布,上海银行会在其防火墙上做网络绑定文件名称fileNamechar(30)RYBRF_yyyymmdd_sequence.zip(见文件命名规范),其中yyyymmdd是本报文的交易日期。文件摘要digestchar(40)RY见文件摘要经过Base64处理的商户证书代码KoalB64Cert/RN商户端读取本地商户证书文件后,再使用上海银行提供的API进行Base64编码后产生的商户证书数据字串。通知URLnotifyUrlChar(100)RY接收银行批量退款处理结果通知的URL消息扩展ExtensionO\uf06e“批量退货结果”通知报文BRRNotify(BatchRefundResultNotify)批量退货结果通知报文BRRNotify是银行向商户发出的批量退货结果文件通知。中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识订单号orderNuchar(RY银行产生的批次流m30)水号交易日期和时间datechar(17)RY银行处理的日期和时间YYYYMMDDHH:MM:SS文件下载URLdownUrlChar(100)RY银行发布的退款文件下载URL见4.5文件下载(银行端URL)文件名称fileNamechar(30)RYBRRF_yyyymmdd_sequence.zip(见文件命名规范),其中yyyymmdd是本报文的交易日期。文件摘要digestchar(40)RY见文件摘要原流水号orginalSerialNochar(19)RY来自BRNotify中批量退货请求流水号原交易日originalchar(RYYYYYMMDD期Date17)HH:MM:SS(来自BRNotify中批量退货请求交易日期和时间)消息扩展ExtensionO4.5.6文件格式\uf06e文件格式文件格式采用CSV(Comma-SeparatedVariable)标准。\uf06e批量退货指令文件格式(商户按标准生成,文件名约定为BRF_yyyymmdd_sequence.zip(见文件命名规范))批量退货指令文件由汇总项与明细项两部分组成。汇总项为文件第一行,其中包含以下各项:中文名称出现要求备注总金额R格式见金额格式说明总笔数R明细项从文件第二行开始直到文件结束,其中每一行包含以下各项:中文名称出现要求备注流水号(订单号)R定义每笔交易的退款交易日期时间RYYYYMMDDHH:MM:SS卡代号R手续费O见金额格式说明(现在是0)退货金额R见金额格式说明交易货币代码R原流水号R支付流水号原交易日期R支付日期(YYYYMMDD)\uf06e批量退货结果文件格式(银行按标准生成,文件名约定为BRRF_yyyymmdd_sequence.zip(见文件命名规范))批量退货结果文件由汇总项与明细项两部分组成。汇总项为文件第一行,其中包含以下各项:中文名称出现要求备注处理成功总金额R本批处理成功的总金额,格式见金额格式说明处理成功总笔数R本批处理成功的总笔数处理失败总笔数R本批处理失败的总笔数明细项从文件第二行开始直到文件结束,其中每一行包含以下各项:中文名称出现要求备注流水号(订单号)R定义每笔交易的退款交易日期时间RYYYYMMDDHH:MM:SS卡代码R手续费O见金额格式说明退货金额R见金额格式说明交易货币代码R原流水号R批量退货文件中原流水号原交易日期R批量退货文件中原交易日期(YYYYMMDD)处理状态RY成功;N失败失败原因R如果处理状态为失败,则描述失败的原因。4.6单笔交易明细查询4.6.1业务功能由商户发起,向银行查询某一订单号的交易状态。当由于网络或系统故障产生掉单(商户发出了快捷支付请求报文,但没有收到银行的应答报文)时,商户可以使用该交易得到银行的交易状态,继而对商户端的指令进行恢复处理。4.6.2业务规则该交易在执行中需要满足以下约束条件:\uf06e可查询银行开通的各类交易状态,如支付、退款。\uf06e银行端返回的状态包括成功、失败、处理中。其中成功代表账务处理成功、失败代表账务处理失败、处理中代表账务未明需晚间批量对账后产生结果。\uf06e查询条件中订单号为必须字段。4.6.3处理流程4.6.4交互模式在交易明细查询业务中,商户与银行通过请求-应答模式交互。商户作为服务使用者向银行发送“查询”请求报文SQReq,银行作为服务提供者向商户返回查询应答报文SQRes。4.6.5报文格式\uf06e“查询”请求报文SQReq(SingleQueryRequest)查询请求报文SQReq是商户向银行发起的交易明细查询请求。中文域对应类型出现签名说明名DTD元素要求要求版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识流水号serialNochar(19)RY该笔查询交易的流水号交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS交易性质typechar(1)RY0全部;1支付;2退款3;提现订单号orderNumchar(30)RY需要查询订单号经过Base64处理的商户证书代码KoalB64CertRN商户端读取本地商户证书文件后,再使用上海银行提供的API进行Base64编码后产生的商户证书数据字串。消息扩展extensionON\uf06e“查询”应答报文SQRes(SingleQueryResponse)中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识流水号serialNochar(19)RY该笔查询交易的流水号交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS被查询订单的交易日期和时间交易性质typechar(1)RY0全部;1支付;2退款3;提现订单号orderNumchar(30)RY需要查询订单号交易状态statuschar(4)RY交易状态0000:成功,0001:失败,0002:银行处理中,0003:银行查无此订单。订单失败原因orderRemakchar(100)CN订单失败原因支付卡号cardNochar(45)CN交易卡号交易金额amountchar(12)CN见金额格式说明手续费chargechar(12)ON手续费见金额格式说明交易卡种cardTypeChar(1)CN交易卡种1借记卡2贷记卡结果代码errorCodechar(4)RY成功SUCC,其他表示失败,详见错误代码此项为描述请求报文本身的对错错误描述errorMessagechar(256)ON消息扩展extensionON4.7批量交易查询4.7.1业务功能由商户发起,向银行查询某一时间段的所有订单的交易状态。当由于网络或系统故障产生掉单(商户发出了快捷支付请求报文,但没有收到银行的应答报文)时,商户可以使用该交易得到银行的交易状态,继而对商户端的指令进行恢复处理。4.7.2业务规则该交易在执行中需要满足以下约束条件:\uf06e可查询银行开通的各类交易状态,如支付、退款。\uf06e银行端返回的状态包括成功、失败、处理中。其中成功代表账务处理成功、失败代表账务处理失败、处理中代表账务未明需晚间批量对账后产生结果。\uf06e查询条件中订单号为必须字段。\uf06e查询时间段需不大于15分钟。4.7.3处理流程4.7.4交互模式在交易明细查询业务中,商户与银行通过请求-应答模式交互。商户作为服务使用者向银行发送“查询”请求报文TQReq,银行作为服务提供者向商户返回查询应答报文TQRes。4.7.5报文格式\uf06e“查询”请求报文TQReq(TradeQueryRequest)查询请求报文TQReq是商户向银行发起的交易明细查询请求。中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识流水号serialNochar(19)RY该笔查询交易的流水号交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS交易性质typechar(1)RY0全部;1支付;2退款查询起始时间beginDatechar(17)RYYYYYMMDDHH:MM:SS查询截止时间endDatechar(17)RYYYYYMMDDHH:MM:SS订单号列表checkSerialNoListRN需要查询的订单号列表,包含多个信息就指订单号;多个订单号之间请用“”分隔;订单最多支持10笔;查询的多条订单只返回符合条件的记录。经过Base64处理的商户证书代码KoalB64Cert/RN商户端读取本地商户证书文件后,再使用上海银行提供的API进行Base64编码后产生的商户证书数据字串。消息扩展extensionON\uf06e“查询”应答报文TQRes(TradeQueryResponse)中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识流水号serialNochar(19)RY该笔查询交易的流水号交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS交易性质typechar(1)RY0全部;1支付;2退款3;提现交易信息列表tradeInfoListRN交易信息列表,包含多个信息结果代码errorCodechar(4)RY成功SUCC,失败见错误代码错误描述errorMessagechar(256)ON消息扩展extensionONTradeInfo中的每一项中的域如下表所示:交易流水号serialNochar(19)R订单号交易日期时间datechar(17)R支付卡号cardNochar(45)R交易金额amountLong(12)R见金额格式说明手续费chargeLong(12)O预留字段,见金额格式说明(一般都是0)交易货币代码currencychar(3)R交易卡种cardTypeChar(1)R1借记卡2贷记卡3联名卡4其他原流水号originalSerialNochar(19)C退货时对应原支付订单号原交易日期和时间originalDatechar(17)C退货时对应原支付日期交易状态statuschar(4)R0000:成功,0001:失败,0002:银行处理中,0003:银行查无此订单。4.8清算对账4.8.1业务功能当发生网络丢失报文或系统故障时,银行返回给商户的交易应答有可能丢失,造成客户签约银行卡账户中的资金变动与商户账户中的资金变动不一致。除了交易应答丢失产生清算不一致的情况下,还可能因为其它原因(比如系统中的缺陷,或者人为因素)产生清算不一致。清算对账业务的目的是用于商户进行清算对账以避免清算不一致的情况。清算对账文件一般一天产生一次,以银行交易日切为准,上海银行日切时间为晚上21:00;4.8.2业务规则清算对账业务在执行中需要满足以下约束条件:\uf06e银行提供的T日21:00-T+1日21:00发生的快捷支付交易明细;\uf06e银行在T+1日上午8:00点之前主动向商户提供上一清算日的交易明细数据文件。\uf06e当清算对账完成后,并完成差错处理之后,双方直至上一清算日的所有快捷支付交易引起的资金变动必须一致。\uf06e信用卡撤消及对应原订单不在清算对账文件内。4.8.3处理流程清算对账的处理流程如下图所示:1.银行在日切后生成清算对账文件,按照交易时间排序。2.商户按照银行事先约定的下载URL发起下载文件请求。3.银行处理下载请求后,返回文件并在https的response的head域里面的Banksha1域中设置文件摘要,在Banksign域中设置签名。4.商户收到“清算对账”文件后,验签和解密后,从银行提供的清算对账文件中解析出每一条交易记录,与自己在该对账日期的所有快捷支付交易记录进行逐笔核对。找出并生成以下三类交易记录的清单。\uf06eA:银行有,但商户没有的交易记录\uf06eB:商户有,但银行没有的交易记录\uf06eC:双方都有,但内容不一致的交易记录商户对不一致的快捷支付交易记录进行恢复与处理。对于A类交易记录,商户进行交易恢复。对于B类交易记录与C类交易记录,商户人工介入处理,通过核对原始的银行应答指令找出原因并确定该由哪方进行订正。如果存在需要银行进行调整的交易记录,则商户线下提供给银行的需要调整的交易记录清单,以及原始的银行应答指令,由银行在人工核实之后进行处理。4.8.4交互模式4.8.5文件格式\uf06e文件格式文件格式采用以逗号分隔的txt类型文件格式;\uf06e“清算对账”文件结构清算对账文件包括当日银行端发生的所有商户账务交易数据,包括充值、支付、提现、退回(退货)交易,需要特别注意。清算对账文件由汇总项与明细项两部分组成。汇总项为文件第一行,其中包含以下各项:中文名称出现要求备注处理成功总金额R本批处理成功的总金额,格式见金额格式说明处理成功总笔数R本批处理成功的总笔数处理失败总笔数R本批处理失败的总笔数明细项从文件第二行开始直到文件结束,其中每一行包含以下各项:中文名称出现要求备注流水号(订单号)R交易日期时间RYYYYMMDDHH:MM:SS交易类型R1支付;2退款(含借记卡撤消)银行卡代号R手续费O见金额格式说明交易金额R见金额格式说明交易货币代码O原流水号C退货交易时必填原交易日期C退货交易时必填处理状态RY成功;N失败失败原因R如果处理状态为失败,则描述失败的原因。4.8单笔撤消4.4.1业务功能单笔撤消是在发生在成功支付但未清算之前,将该笔交易充值的款项原路退回到快捷支付签约银行卡账户中。撤消必须在商户核实之后,由商户发起。单笔撤消交易为实时交易,即实时从商户结算账户扣取,入个人账户。4.4.2业务规则撤消业务在执行中需要满足以下约束条件:\uf06e撤消业务从商户发起。\uf06e撤消业务必须有对应成功的支付交易。\uf06e撤消的金额需与原支付金额一致。\uf06e撤消的资金只能原路划回原支付的银行卡账户中。\uf06e撤消的订单与原订单相对应,对应的支付与撤消不再在晚间清算4.4.3处理流程4.4.4交互模式在单笔撤消业务中,商户与银行通过请求-应答模式交互。4.4.5报文格式\uf06e“单笔撤消”请求报文SCReq(SinglecancelRequest)中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识订单号orderNumchar(30)RY该笔退款交易的商户订单号,永不重复交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS卡代号cardCodechar(20)RY鉴权时返回的卡代码交易货币代码currencychar(3)RY见快捷支付货币代码表交易金额amountLong(12)RY交易金额必须和原订单交易金额一致;见金额格式说明原订单号oldorderNumchar(30)RY对应原支付交易的订单号,永不重复原交易日期和时间olddatechar(8)RYYYYYMMDD经过Base64处理的商户证书代码KoalB64Cert/RN商户端读取本地商户证书文件后,再使用上海银行提供的API进行Base64编码后产生的商户证书数据字串。消息扩展extensionON\uf06e“单笔撤消”应答报文SCRes(SinglecancelResponse)中文域名对应DTD元素类型出现要求签名要求说明版本号versionchar(7)RN目前版本号:”1.0.1”商户标识instIdchar(15)RY报文发送方的商户标识订单号orderNumchar(30)RY商户退款订单号,永不重复,同支付时订单号规制交易流水号serialNochar(20)RY银行交易流水号交易日期和时间datechar(17)RYYYYYMMDDHH:MM:SS卡代号cardCochar(RY退款请求中的卡代码de20)结果代码errorCodechar(4)RY成功SUCC,失败见错误代码错误描述errorMessagechar(256)ON消息扩展extensionON第5章网络连接规范有3种网络连接方式:1、公网连接;需商户端通过程序调用方法模拟SSL通讯链路。所有涉及到签约状态变动与资金处理的交易报文与文件,需通过应用层报文数字签名方式以防交易否认。2、VPN连接;链路层通过VPN安全机制保护,使用HTTP协议在双方的服务器之间进行。所有涉及到签约状态变动与资金处理的交易报文与文件,需通过应用层报文数字签名方式以防交易否认。3、专线连接;链路层通过专线安全机制保护,使用HTTP协议在双方的服务器之间进行。所有涉及到签约状态变动与资金处理的交易报文与文件,需通过应用层报文数字签名方式以防交易否认。第6章安全规范本章主要从技术角度阐述快捷支付系统中可能出现的安全威胁,以及通过技术规范来规避安全风险的方式。6.1安全威胁来自网络的安全威胁主要有以下几种:\uf06e信息泄密报文中交换的客户信息与交易指令均有私密性要求。在快捷支付技术规范中,需要确保在网络传输中对客户与交易信息私密性的保护。解决方案:将双方的的通信信道进行加密(见网络连接规范)。\uf06e交易指令篡改如果网络中传输的交易指令被入侵者截获并篡改,就会造成资金处理出现错误,给业务参与方造成损失。因此,在网络传输中,需要保证指令完整性。解决方案:使用数字证书对对报文中的业务数据进行签名(见数字签名)。\uf06e交易指令伪造如果有入侵者冒充商户或者银行发起交易指令就会造成资金在未得到业务参与方的授权下发生流动,给银行、商户或客户带来损失。因此在网络传输与系统处理中,需要保证指令的真实性。解决方案:使用数字证书对对报文中的业务数据进行签名(见数字签名)。\uf06e交易指令否认当发生交易纠纷时,双方需要通过交易指令确定责任方。快捷支付安全规范中需要为交易指令防否认提供技术支持。解决方案:使用数字证书对对报文中的业务数据进行签名(见数字签名),银行与商户均应保留涉及资金变动的交易报文日志(见报文日志管理)。\uf06e交易指令重播入侵者也可能尝试通过截获网络中传输的交易指令,并多次重播的方式试图发起未经授权的快捷支付交易。在技术规范中,需要防止交易指令重播引起的未授权交易。解决方案:凡涉及到资金变动的交易指令,流水号必须唯一。银行与商户均需要保证同一流水号的交易指令只能执行一次。6.2数字签名6.2.1数字签名和验签要求每个交易的签名原文是按照报文接口定义是否需要进行签名按照顺序进行组合,分隔符是“”,然后通过签名的API取得签名密文,放在请求或者返回报文域的Signature标签里面。比如“银行发起撤销交易”,银行发起的请求交易接口定义需要对“商户标识”,“交易日期和时间”,“协议号”字段进行签名,比如对010101商户的ABCDEF协议号进行撤销,则签名原文是“0101012009101109:08:02ABCDEF”,假设经过签名之后的密文是XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX,那么需要把这个签名密文放置到Signature标签里面。商户收到银行的撤销交易请求之后,需要对银行的签名进行验签,那需要按照API的要求,从请求的报文里面取得签名的原文和密文,进行验签。原文按照接口定义的“商户标识”,“交易日期和时间”,“协议号”的标签中取值,进行竖线链接,然后从Signature标签确定密文,进行验签。强调:本地用GBK编码签名,并统一以UTF-8编码提交。银行提供JAR包,并公布调用方式;签名例子://待签数据,原文StringszData=sourceMsg;//构造签名实例SvsSignsigner=newSvsSign();//初始化签名证书和私钥,即.pfx(或.p12)文件名和口令(口令不能为空,口令为商户操作员下载商户证书后从浏览器中导出pfx文件格式时设置的私钥保护口令)signer.initSignCertAndKey("E:\\\\KoalSvsSoft\\\\cert\\\\test1.pfx","私钥保护口令如123456");//签名,获得签名结果(Base64编码)StringszRet=signer.signData(szData.getBytes(“GBK”));验签例子://验证数据签名StringszData=signDataStr;szSignedData=signData;intnRet=SvsVerify.verify(szData.getBytes(),szSignedData,"E:\\\\bankofshanghai_test.cer");if(0==nRet){System.out.println("[OK]VerifyReturnOK");}else{System.out.println("[ERROR]VerifyReturnERROR:"+nRet);}6.3报文日志管理为了做到交易指令防否认,银行与商户均应保留涉及资金变动的交易报文日志,日志中包括完整的报文、报文签名、接收时间以及源IP地址。交易报文日志应该妥善管理,避免泄密或者被破坏。第7章附录7.1金额格式用货币单位的最小单位表示的金额,其中不包含任何标点,最多12位。例如:如果交易金额为123.45RMB,则该项内容为12345。(但是在页面上显示:人民币是以元为单位,交易中的金额都是以分为单位)7.2货币代码表根据GB/T12406-1996,货币代码字段使用的3位定长数字如下表所示。国家、地区名称货币名称货币代码中国人民币元156中国香港港元344中国澳门澳门元446美国美元840英国英镑826法国法国法郎250德国马克278俄罗斯卢布810日本日元392加拿大加元124瑞士瑞士法郎756瑞典瑞典克朗752意大利意大利里拉380西班牙西班牙比塞塔724葡萄牙葡萄牙埃斯库多620荷兰荷兰盾528比利时比利时法郎056芬兰马克246挪威挪威克朗578希腊德拉克马300奥地利先令040丹麦丹麦克朗208澳大利亚澳大利亚元036新西兰新西兰元554巴西克鲁赛罗076南非兰特710埃及埃及镑818伊拉克伊拉克第纳尔368伊朗伊朗里亚尔364沙特阿拉伯沙特里亚尔682科威特科威特第纳尔414阿联酋UAE迪拉姆784泰国铢764新加坡新加坡元702印尼卢比360马来西亚马来西亚458林吉特菲律宾菲律宾比索608南朝鲜圆410印度印度卢比356',)