@ulodev
2019-08-09T08:52:50.000000Z
字数 13885
阅读 4099
上海银行本规范用于定义银行代付接入平台和接入商户之间代付业务所用到的所有接口的详细需求。本规范应被所有系统干系人阅读并理解,特别是系统开发人员和会使用到这些接口的产品业务人员。
本说明书从技术角度详细描述调用接口,元素定义,以及错误/异常处理等,为客户端正确有效的使用这些接口提供相关必要的信息。
| 术语 | 定义 |
| PKI | Public Key Infrastructure,公钥基础设施 |
| CA | Certification Authority,证书认证机构 |
| PKCS | Public-Key Cryptography Standards,公开密钥加密标准 |
| TLS | Transport Layer Security,安全传输层协议 |
| SSL | 请求和接收数据均需要校验签名Security Socket Layer,安全套接层协议 |
| JSON | JavaScript Object Notation |

本接口采用请求/响应的交互模式,商户系统向代付平台发送请求数据,并同步等待处理完毕后返回响应数据。
对于交易类请求,同步回应的是受理结果,需商户需发起查询交易结果请求获得最终结果;若查询返回交易处理中,则需等待一定时间后再次发起查询;
通讯协议采用HTTP/1.1 + JSON 或 SSL+HTTP/1.1 + JSON,跨网元通讯时,需要采用SSL协议。在content-Type 中设置传输的数据格式: Content-Type = 'application/json;charset=UTF-8',涉及中文内容采用UTF-8 编码。
涉及转账等业务的报文应采用数字签名机制,以保证业务信息的来源合法性及完整性,本协议目前采用RSA+SHA1的签名算法。签名流程详见附录B
通讯采用POST请求方式;
请求参数:含tranType跟param;可参看demo;
请求时,需携带两个参数或将两个参数组合成一个串输入,即:tranType=(报文头中的msgType的值) ¶m=(请求报文);
商户应联系接口人,申请自己的商户代码(corpNo),确认需要开通的接口及对应的业务类型(msgType). 双方交换用于验签报文的数字证书,对于没有数字证书的商户,也可以只提交公钥.
| 说明: | |||
| 是否必选 | M:必填 | O:可选 | C:满足特定条件下必填 |
| 长度 | X:不检查 | ||
| 元素名称 | 说明 | 数据类型 | 长度 | 是否必选 | |
| headData(报文头,签名域) | majorVersion | 接口协议主版本号,在此版本报文中,应填“1.0” | string | 8 | M |
| minorVersion | 接口协议副版本号,在此版本报文中,应填“1.0” | string | 8 | M | |
| msgType | 业务类型取值参见附录E | string | 5 | M | |
| corpNo | 企业代码 | string | 15 | M | |
| tradeType | 交易类型 (取值参见附录D) 交易和余额查询传相应支付类型(不同支付类型对应不同额度) 订单查询不传 |
string | 32 | O | |
| reqDate | 发起日期(yyyyMMdd) | string | 8 | M | |
| reqTime | 发起时间(HHmmss) | string | 6 | O | |
| serialNo | 通讯流水号,格式可自定义, 参考:yyyyMMddhhmmssXXXXXX其中XXXXXX为6位序列号,全局唯一 |
string | 20 | M | |
| zipType | 压缩方式(批量业务建议压缩) 0:不压缩; 1:压缩 |
string | 1 | M | |
| notifyUrl | 交易结果通知URL. 如:http://服务地址?trancode=xxx 暂不支持 |
string | 10-256 | O | |
| signatureAlg | 签名算法(目前只支持“01”,即RSA+SHA1) | string | 2 | M | |
| dataSignature | 请求方对headData的json串+bodyData的json串报文的签名值 | string | X | M | |
| bodyData(报文体,签名域) | X | M | |||
| 元素名称 | 说明 | 数据类型 | 长度 | 是否必选 | |
| headData(报文头,签名域) | majorVersion | 接口协议主版本号(原样返回) | string | 8 | M |
| minorVersion | 接口协议副版本号(原样返回) | string | 8 | M | |
| msgType | 原业务类型(原样返回)取值参见附录E | string | 5 | M | |
| corpNo | 企业代码(原样返回) | string | 15 | M | |
| timestamp | 报文响应时间(yyyy-MM-dd HH:mm:ss) | string | 14 | M | |
| serialNo | 通讯请求流水号(原样返回) | string | 20 | M | |
| procDate | 通用平台受理时间, 格式:yyyymmdd | string | 8 | M | |
| zipType | 压缩方式(大批量业务建议压缩,仅压缩bodyData的内容) 0:不压缩; 1:压缩 |
string | 1 | M | |
| signatureAlg | 签名算法(目前只支持“01”,即RSA+SHA1) | string | 2 | M | |
| dataSignature | 请求方对headData的json串+bodyData的json串(如果有bodyData)+status的json串报文的签名值 | string | X | M | |
| status(签名域) | result | 响应报文处理结果码,取值定义请见附录A | string | M | |
| statusCode | 响应报文状态码,对于未完成交易,标识具体的中间状态;对于已失败的交易,标识具体错误代码。取值定义请见附录A | string | M | ||
| statusMessage | 响应消息的状态信息 | string | M | ||
| bodyData | 其他元素(签名域) | c | |||
{"headData":{"majorVersion":"1.0","minorVersion":"1.0","msgType":"30101","corpNo":"8190001","reqDate":"20170919","reqTime":"164400","serialNo":"1438931481953","zipType":"0","notifyUrl":"","signatureAlg":"01","tradeType":"trade.agent. daytime"}"dataSignature":"TbXE59tqljAcrlbDopuXjWtTy5l76G3emPna9xmARezhJtDKxj+XUN/bQopjM/nMsMC6Mmpy100UXI/ZHa4aTmDxpdDO8H0JpG3Pi0uMOMkbE4TZsCyZMr/Fv20QdlARj4eEQ9YYIcy5jTxLzqTy2ZlkhMCfeHv0hugYBGLRJNA=","bodyData":{……//具体的明细字段}}
{"headData":{"majorVersion":"1.0","minorVersion":"1.0","msgType":"30101","corpNo":"8190001","timestamp":"2016-01-01 10:10:10","serialNo":"1438931481953","procDate":"20160101","zipType":"0","signatureAlg":"01"}"dataSignature":"IuWdO4h7jmoZzmHVY/2T6Ka7obCTv23oERIVVzLgLNgZ05AOVaf7ZVNYJQIh+x1na1kkArLc7ts4BmM6yf8/tQ1QKl2B17X0ve2mWcqAzIFkQnW3/7TPehBQxc7t3EeGHBU15yNKWEt7l0/0HaUEWTcRU2yht2DwTG/N8E95uL8=","status":{"result":"0","statusCode":"0000","statusMessage":"受理成功"}"bodyData":{……//具体的明细字段}}
本节定义第三方通用业务接入平台和第三方服务提供商之间的接口。
| 接口名称: | SINGLEGET/ SINGLEPAY |
| 接口描述 | 该接口用于单笔代付业务 |
| 接口归属方: | PF-TS |
| 通信协议: | Http1.1+JSON 或 SSL+Http1.1+JSON |
| 安全: | 跨网元调用时需使用SSL协议 |
| 使用情况: | 如果返回成功或超时,需调用单笔交易结果查询得到最终结果 |
| 接口参数:: | tranType=30102 & param=请求报文 |
| URL:: | /spagate/agentpay |
| 元素名称 | 说明 | 数据类型 | 长度 | 是否必选 |
| orderId | 商户订单编号,全局唯一 | string | 20 | M |
| batFlag | 固定值为“2” 2:单笔实时 |
string | 1 | M |
| tnValue | T+N 的值,(一般固定为0) 第一位固定:0 第2-3为资金用途。 (00-一般性付款 01-个人账户付款) 第4-250为预留字段。 |
string | 250 | M |
| feeCode | 费项代码 | string | 5 | M |
| curType | 币种(CNY:人民币;HKD:港币;USD:美元.目前只支持人民币) | string | 3 | M |
| trMoney | 交易金额,(单位:分) | string | 15 | M |
| bankNo | 明细接收行(全匹配我方指定的行号或行名) | string | 120 | M |
| openBankNo | 明细开户行 (全匹配我方指定的行号或行名)一般为空 | string | 120 | O |
| accNo | 明细账号 | string | 32 | M |
| accName | 明细户名 | string | 120 | M |
| memo | 附言 | string | 120 | M |
| lendFlag | 垫资方式 Y-垫资; N-不垫资; 非垫资商户固定N |
string | 1 | M |
| lendRate | 垫资费率(差额垫资商户必填) | string | 6 | O |
| publicPrivaFlag | 路由标志:目前只支持S (S:路由 P:超网) | string | 1 | M |
| accType | 账户类型: 1-银行卡(对私); 0-非银行卡(对公) |
string | 1 | O |
| certType | 证件类型: 01:身份证 | string | 1 | O |
| certId | 证件号码 | string | 20 | O |
| fundCode | 产品代码 | string | 6 | M |
| 元素名称 | 说明 | 数据类型 | 长度 | 是否必选 |
| orderId | 商户订单编号(原样返回) | string | 10-40 | M |
{"headData": {"majorVersion": "1.0","minorVersion": "1.0","msgType": "30102","corpNo": "88888","reqDate": "20170919","reqTime": "110338","serialNo": "1","zipType": "0","notifyUrl": "","tradeType":"trade.agent. daytime","signatureAlg": "01"},"dataSignature": "3add43f700d9b13382ee3750d62c3fcdf152be135b218accb6326fa67466a2b3ec59401c1f989f1efe8cf20552ab2bf3cb7343b39ed14926308b410c10aae4594862ca573bd63a55644007dacd0b13ad9df7afc59da777cb7f70ba06aadeabd40edbf7e87a2ed928515b63eb5463f09299ac023f878a7c0b86c4cadfab2cf409f6457546e8b9b1ef482efde4d587a6d2c7418ba94b79f4cf3e8a181c32cc5ad576582899641e21fde63a736338c51664f3332d574b62e3d4aba110e43c58f5fc3cafb0bc8b0e2bdcc25ee486f1c711b8e803eb74b8c5c790de33d15747e5183bf6ea6da1dbbd86c4d80e6de7389b250e54e40ba2c80d8e91280e2a34574ec13b","bodyData": {"orderId": "1","batFlag": "2","tnValue": "0","feeCode": "00000","curType": "CNY","trMoney": "100","bankNo": "平安银行","openBankNo": "","accNo": "62260000111","accName": "test","memo": "111","lendFlag": "N","lendRate": "","publicPrivaFlag": "S","fundCode":"0009","accType": "1"}}
{"headData": {"majorVersion": "1.0","minorVersion": "1.0","msgType": "30102","corpNo": "88888","timestamp": "2017-09-19 00:00:00","serialNo": "1","procDate": "20170919","zipType": "","signatureAlg": "01"},"dataSignature": "2ca98a00b4a877e63e8821f7e8609754617a603b1f73b5afa035f9603987fd60901341039d1278f7fa4c327bf2575fc6135804a40eff06b6c6a03d3c164ff2876d6479403739df019d3f26f88b76640bf830b60508a58d734814758d74f67b937d00226a6ce9989f646517a4b4ef8c75478fa4b528d20a161c9c577c283d4f52df140e9b0d2b343e52ab8d8523c617bf7713a15f1f26498d9aacd5c7e53c7e8c78376230dd7e6ca6dad8f8a8be1bd8581c4d394602b1daac16c8200ea64cb6d8993282bc5dba8bcf1a4b97105eb7f849fc8ba822b104edbbcade0b0e2320ebafd00da9297dbe8767b4c8d82ddabfb20da14879946919dfc98546aaccebeb9713","bodyData": {"orderId": "1"},"status": {"result": "0","statusCode": "0000","statusMessage": "受理成功"}}
| 接口名称: | queryTrans |
| 接口描述 | 查询指定一笔交易的结果。 |
| 接口归属方: | PF-TS |
| 通信协议: | Http1.1+JSON 或 SSL+Http1.1+JSON |
| 安全: | 跨网元调用时需使用SSL协议 |
| 使用情况: | 如果返回成功或超时,需调用单笔交易结果查询得到最终结果 |
| 接口参数:: | tranType=50101 & param=请求报文 |
| URL:: | /spagate/agentpay |
| 元素名称 | 说明 | 数据类型 | 长度 | 是否必选 |
| oMsgType | 原业务类型编码,取值参见附录E | string | 5 | M |
| orderId | 要查询的交易的订单ID | string | 1-200 | M |
| isGetRoadMsg | 是否获取通道返回状态和描述信息 0 获取 1不获取 | string | 1 | O |
| 元素名称 | 说明 | 数据类型 | 长度 | 是否必选 | |
| orderStatusList | procdate | 通用平台受理时间 | string | 8 | O |
| transId | 通用平台交易号 | string | 20 | M | |
| orderId | 订单ID | string | 20 | M | |
| corpNo | 企业代码 | string | 15 | M | |
| result | 处理结果 | string | 1 | M | |
| statusCode | 响应消息的状态码,参考附录A | string | 4 | M | |
| statusMessage | 响应消息的状态信息 | string | 200 | O | |
| roadReturnCode | 通道返回结果码 (请求报文存在“isGetRoadMsg”此节点且值为0时返回 ) |
string | 10 | O | |
| roadReturnMessage | 通道返回结果说明 (请求报文存在“isGetRoadMsg”此节点且值为0时返回 ) | string | 254 | O | |
{"headData": {"majorVersion": "1.0","minorVersion": "1.0","msgType": "50101","corpNo": "88888","reqDate": "20170919","reqTime": "110338","serialNo": "1","zipType": "0","notifyUrl": "","signatureAlg": "01"},"dataSignature": "a68a60aa2c676fce7fe3fd5211904c13edc43f9d5d30de6e25e51cb411f857753c21be2ff67fba8197f9510de804627bf428c121e1ac079ce92a75afe35c68b5d7d40f91105323bf4aad57d81aefe6c27f10a025e0e276fa47282dac50d41219ffff87a9604758a0ef177a94ca29c84b3aaaf2dbf924ec7723fa84f7166736e12b6fad653f8dd2e93085ace5ab87e22ac5a7821b0cb1a4de0c8b6a4d4712a9c658d353e0730ddb5a2c7e7691c930c7ff7280ec19b3217e21eb4c7c1969c7cdcc9f48a9fb59c70a6daa91ee2367d82603c351b16d85568b7909150bc17ece2427beea7aa955b3602217f29acdbd5ed2152402eeb67ec25b890f6ab28f3781e902","bodyData": {"oMsgType": "30102","orderId": "1","isGetRoadMsg":""}}
{"headData": {"majorVersion": "1.0","minorVersion": "1.0","msgType": "50101","corpNo": "88888","timestamp": "2017-09-19 00:00:00","serialNo": "1","procDate": "20170919","zipType": "0","signatureAlg": "01"},"dataSignature": "3a42ba4610c17cfe46ffc58aee8c8900b9d163ff20f6d155e3d8c0c757628fe07f54d5f78476dc573f685b2e0c11dce0cf526e3721382884119d95042aefe0d7f669d1317d65d63a3e3afaadee777e3b196ddb9fb1f30177c3556cddce6f65400bfdd98382449e270097ee126753984ffdc7fae2b99a777399b8884807bf77d59e6710f69c40caea93bedb1a97a7ff77623a21716124887f5be7c53b6848a120d2ada1beb23cabfce18b4fff6c38fbc96baf662a8c16bba26b0fa3a30a631c3541855a86a0511cef8d666b06ac1b371acce1cfd0158b321f31da20aad789ac7747a2510acd5468f72969b6115e4904b5cb6f4409aa354ee406bfd9c3392579af","status": {"result": "0","statusCode": "0000","statusMessage": "受理成功"},"bodyData": {"orderStatusList": {"procdate": "20170907","transId": "1","orderId": "1","result": "0","statusCode": "0000","statusMessage": "交易处理成功","roadReturnCode": "000000","roadReturnMessage": "交易成功"}}}
| 接口名称: | merLendLimitQuery |
| 接口描述 | 查询商户垫资额度 |
| 接口归属方: | PF-TS |
| 通信协议: | Http1.1+JSON 或 SSL+Http1.1+JSON |
| 安全: | 跨网元调用时需使用SSL协议 |
| 接口参数:: | tranType=80003 & param=请求报文 |
| URL:: | /spagate/agentpay |
| 元素名称 | 说明 | 数据类型 | 长度 | 是否必选 |
| tranCode | 交易业务类型:01-代付 | string | 2 | M |
| 元素名称 | 说明 | 数据类型 | 长度 | 是否必选 |
| tranCode | 交易业务类型:01-代付 | string | 2 | M |
| totalBalance | 垫资总额度.单位:分 | number | 15 | O |
| accBalance | 可用垫资额度,单位:分 | number | 15 | O |
{"headData": {"majorVersion": "1.0","minorVersion": "1.0","msgType": "80003","corpNo": "88888","reqDate": "20181018","reqTime": "155949","serialNo": "1","zipType": "0","notifyUrl": "","tradeType":"trade.agent. daytime","signatureAlg": "01"},"dataSignature": "062bafcacf82700e690587ec3f6d23d377cdb26236f6a36d47c9faafb0e28d3f7b785d7ea805617fb53db3c35323520df11aab1d46778432fbae5620224d29028e32750b57ed8144299b0591b5df05f79b4f894245a528cfba9964580400bbe2e094ecc26b79a4dcb11837e67fb12e5ccc0693515433f767f15e96c15a4df656dedff615c3305549a4fa4dbcfc12886cc9f5028e28ce96a53af31cd27f053e8e450c13c5930bdbc424009045701a44716808ec9f7e002fb91051d5b08f9602450dbb9ed3509578e839162a015bbb3fdf3b0201168a7a87a3ae068868e344c40487d0c7c108316459555797b77ae2b9968bc632920003dd9c72238453691bc2b6","bodyData": {"tranCode": "01"}}
查询成功:
{"headData": {"majorVersion": "1.0","minorVersion": "1.0","msgType": "80003","corpNo": "88888","timestamp": "2018-10-18 15:59:49","serialNo": "1","procDate": "20181018","zipType": "0","signatureAlg": "01"},"dataSignature": "13513405bdd454c436ff319247137e98f170d37dadd92e4fe0d08e9f298f1ae464defd507c207522f248aa196e97c99044458a13bb153104f1b762c31cfb6a366843d736afa0f604a813e38a7a8423e689d3d56883d54d0f495bd3bb660d25c608c96b7c7826090b3c981dce4800b76dcd685f8e260b3efb5395566eaf11f5c42f085048c17583aed1b02ccc2b160fb660267fc68778a20dfcc6dafff96d03d0142397f204e07142b03c7073cfc832fd752f3deedb11f0941fdd740cee45bc5d1a47ea7dd1060a2555b3de1923b800db58d7ecc0881a7c686932b25c81764974a6ac97ad9808925493c71fe5c51936afe656b8b6edff70bc8a93c19dd5cf2c4b","status": {"result": "0","statusCode": "0000","statusMessage": "查询成功"},"bodyData": {"tranCode": "01","totalBalance": "2500000000","accBalance": 2454580996}}
查询失败:
{"headData": {"majorVersion": "1.0","minorVersion": "1.0","msgType": "80003","corpNo": "88888","timestamp": "2018-10-18 15:59:49","serialNo": "1","procDate": "20181018","zipType": "0","signatureAlg": "01"},"dataSignature": "85406d5e26d9a64461ec6c7360e01b07d999930e467ca6ede1e3c57c408a10c4f927e3f38f1c20344599cb36c13c8bde12b8356196850a4bf3c030f08366afadf28e2a5ac66eb09b513d6795b4a6d1d3564f291b47379acd71e84778754003eba350c6bd131202532ad7495f3e647cdb6951e07c748662c76049331e1fd28372758f36577e34cea3dce7d61caabf289b90e5778ac0ae7179ec36a16387186d502af24eaa71aebb3a61260048ecbc516b95dc62d460843d30d4848576bf2c6569a3da2cea0ff5a91e1d3472bc09403aef02eb14115ea78066fca0fc67e891c487518de086e8c073cc24a96441ee95ca319c08b68d8dc94814262ffafb42e65849","status": {"result": "2","statusCode": "1131","statusMessage": "失败. 缺少必填参数或数据格式错"},"bodyData": {"tranCode": ""," totalBalance ": "0","accBalance": 0}}
| 处理结果码(result) | 信息 | 对应的报文 | 描述 |
| 0 | 处理成功 | 所有响应报文 | 处理成功 |
| 1 | 处理中 | 所有响应报文 | 交易未处理完,可通过状态码(statusCode)获得交易的中间状态。 商户可主动发起交易结果查询获得交易最交易处理终结果。 |
| 2 | 处理失败 | 所有响应报文 | 交易处理失败,可通过状态码(statusCode)和状态信息(statusMessage)获得交易的具体失败代码和失败信息。 交易发送除处理失败的;其余均需调用查询接口获得最终结果 |
| status中的 statusCode 状态码(result) | 信息 | 对应的报文 | 描述 |
| 0000 | 受理成功 | 所有响应报文 | 同result=0 |
| 1105 | 处理中 | 所有响应报文 | 同result=1 |
| 1131 | 交易失败 | 所有响应报文 | 同result=2 |
序列化规则:按照Json格式要求拼装报文,要注意,序列化报文以“{”起始,以“}”结束,若待签名Json对象是一个数组,则以“[”起始,以“]”结束。各字段与标点符号间无任何空格、回车换行符,同级字段的排列顺序应以元素定义表格中从上到下的顺序,字符串使用UTF-8编码。对于无须赋值的非必填字段,也应出现在报文中,字符类型的值取"",数字类型的取值0。数字类型的字段,取值不要带双引号。
如下示例,序列化的结果应该是:
交易报文:
{"majorVersion":"1.0","minorVersion":"1.0","msgType":"","corpNo":"","reqDate":"","reqTime":"","serialNo":"","zipType":"","notifyUrl":"","signatureAlg":""}{"orderId":"","batFlag":"","tnValue":"","feeCode":"","curType":"","trMoney":"","bankNo":"","openBankNo":"","accNo":"","accName":"","memo":"","lendFlag":"","lendRate":"","publicPrivaFlag":""}
查询交易结果响应报文待签数据示例:
通用回执:headData的json串+status的json串
{"majorVersion":"","minorVersion":"","msgType":"","corpNo":"","timestamp":"","serialNo":"","procDate":"","zipType":"","signatureAlg":""}{"result":"","statusCode":""}
单笔交易回执:headData的json串+ bodyData的json串+status的json串
{"majorVersion":"","minorVersion":"","msgType":"","corpNo":"","timestamp":"","serialNo":"","procDate":"","zipType":"","signatureAlg":""}{"orderId":""}{"result":"","statusCode":""}

| 业务名称 | 业务编码 |
| 日间代付 | trade.agent. daytime |
| 普通代付 | trade.agent.general |
| 业务名称 | 业务编码 |
| 单笔实时代付 | 30102 |
| 单笔交易结果查询 | 50101 |
| 商户垫资额度查询 | 80003 |