中国工商银行网上银行BC在线支付接口说明新版本精品文档23页

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

B2C支付接口v1.0.0.3
第 1 章业务说明
第 2 章商户接口
2.1 支付接口
2.1.1 支付接口表单定义
2.1.2 tranData
2.1.3 tranData格式定义 (10)
2.1.4 表单样例 (11)
2.2 通知接口 (14)
2.2.1 通知接口表单定义 (14)
2.2.2 notifyData数据定义 (15)
2.2.3 notifyData格式定义 (17)
2.2.4 表单样例 (18)
2.3 说明 (20)
第 3 章安全API说明 (21)
第 4 章开发步骤 (21)
第 1 章业务说明
B2C在线支付接口实现工行个人网银客户在工行B2C商户网站进行消
费支付的业务处理。

新的1.0.0.3版本同原先版本的主要区别在于通知消息方式的改变。

原1.0.0.0版本和1.0.0.1版本(扩充语言字段以支持英文版)在订单中要求商户选择通知方式,即1、需要银行通知交易结果,2、不需要银行通知交易结果而是商户主动查询;当需要通知时,需要在订单中提供商户接收银行通知地址,当银行处理结束后,会在银行的后台服务器请求商户的此地址,将交易结果用http连接post表单形式提交给商户,然后返回客户交易结果页面。

新的1.0.0.3版本不再要求商户选择通知方式,和接收银行通知的地址;此版本要求商户在提交订单时,提供交易处理后返回商户的地址,即完成客户从商户转向到银行进行支付,处理后又从银行定向回商户网站的闭环。

在从银行交易页面返回商户时,将交易结果作为表单数据提交到商户此返回地址。

处理的优点:1、强制完成交易闭环;2、无需银行后台发送通知,客户不需要等待商户接收银行通知后才能看到交易结果页面,缩短响应时间;3、通知方式不再局限于http连接和80端口,返回商户的地址可以使用https方式和其他商户支持的端口,提高安全性;4、银行作为交易的一方,支持众多商户和客户时,存在一定的带宽和服务器处理压力,使用客户返回商户方式提供交易结果,可有效减少交易掉单现象,只要客户到了银行的结果页面,如果还出现掉单问题,则可能是客户和商户的通讯等方面的问题。

以下简述处理流程:
1.客户在商户网站浏览商品信息,签订订单;
2.商户按照工行B2C支付1.0.0.3接口形成提交数据,并使用工行提供API和商户证书对订单数据签名,形成form表单返回客户浏览器,表单action地址指向工行接收商户订单信息的servlet;
3.客户确认使用工行支付后,提交此表单到工行;
4.工行网银系统接收此笔订单,对订单信息和商户信息进行检查;
5.通过检查则显示工行支付页面,1.0.0.3版本会提示客户输入交易卡号;
6.客户输入后提交;
7.银行查询客户相关信息;
8.返回客户在银行的预留信息;
9.客户确认;
10.返回交易确认页面;
11.不同类型客户使用各自认证方式进行交易确认,支持静态支付密码、动态口令卡、证书签名;
12.银行校验后进行支付处理;
13.将结果形成通知消息并有银行端签名信息,返回客户端;
14.引导客户返回商户网站,地址是订单中提供的商户url,此url支持http 和https及自定义端口;
B2C在线支付接口版本说明:
1.0.0.0(基本支付)
1.0.0.1(支持英文界面)
1.0.0.2(内部保留)
1.0.0.3(保留1.0.0.1功能,优化通知方式)
1.0.0.4(商户订单中指定支付卡,不强制使用e卡支付,不允许客户的支付卡透支支付,专门用于基金商户进行基金直销业务,同1.0.0.3通知方式)
通知消息模式区别:
原有模式:支付处理后,后台发送商户通知;
新增模式:支付完成后或客户点击“返回商户”,利用客户浏览器跳转,完成商户通知的转发,后台不再单独发送商户通知。

对于不同类型商户接口区别:
对于购物类型商城只支持使用1.0.0.0/1.0.0.1/1.0.0.3
对于基金直销类型网站商城只支持使用1.0.0.4
第 2 章商户接口
接口定义通过接口名称和接口版本号来标识,以便将来的扩展;新通知方式的B2C接口称为新模式B2C接口;原有后台发送http通知的方式称为原模式接口;
2.1支付接口
2.1.1支付接口表单定义
新模式接口的交易数据整合到一个xml格式串,作为表单的一项整体提交,不再同原来每个字段都是key-value形式;
FORM表单数据如下:
注:
1、数据中不能包含“|”、“&”、“=”,这些字符为银行端程序保留字符;中文变量使用GBK编码。

2、从商户Post过来的数据,参数名的名称必须与上表中完全相同,名称中的字母大小写均要相同,不能进行随意更改(在form中的提交按钮<input type=”submit”……>中submit不能有Name属性);此外,如果其他input 项的Name中使用了双引号,如:<input type=text name=" merCert " value="xxxxxxx">,则一定注意在引号内不要包含空格,不要写成“mer URL ”,如果拼写错误或者多了空格,将造成数据无法识别,无法正常进行支付
3、接口名称和版本号一定要和上表中相同.。

4、商户提交数据中的空格将被认为是有效字符被接收,请商户开发时注意对多余空格的控制。

5、tranData交易数据的xml串需要有xml的头,即<?xml version="1.0" encoding="GBK" standalone="no"?>
2.1.2tranData数据定义
2.1.3tranData格式定义
tranData格式(xml格式固定,选输字段的取值可以为空,标签需保留) <?xml version="1.0" encoding="GBK" standalone="no"?>
<B2CReq>
<interfaceName></interfaceName>
<interfaceVersion></interfaceVersion>
<orderInfo>
<orderDate></orderDate>
<orderid></orderid>
<amount></amount>
<curType></curType>
<merID></merID>
<merAcct></merAcct>
</orderInfo>
<custom>
<verifyJoinFlag></verifyJoinFlag>
<Language></Language>
</custom>
<message>
<goodsID></goodsID>
<goodsName></goodsName>
<goodsNum></goodsNum>
<carriageAmt></carriageAmt>
<merHint></merHint>
<remark1></remark1>
<remark2></remark2>
<merURL></merURL>
<merVAR></merVAR>
</message>
</B2CReq>
2.1.4表单样例
表单数据:
<INPUT NAME="interfaceName" TYPE="text" value="ICBC_PERBANK_B2C " >
<INPUT NAME="interfaceVersion" TYPE="text" value="1.0.0.3">
<INPUT NAME="tranData" TYPE="text" value="PD94bWwgdmVyc2lvbj0iM
S4wIiBlbmNvZGluZz0iR0JLIiBzdGFuZGFsb25lPSJubyI/PjxCMkNSZXE+PGlu dGVyZmFjZU5hbWU+SUNCQ19QRVJCQU5LX0IyQzwvaW50ZXJmYWNlTmFtZT48aW5 0ZXJmYWNlVmVyc2lvbj4xLjAuMC4zPC9pbnRlcmZhY2VWZXJzaW9uPjxvcmRlck luZm8+PG9yZGVyRGF0ZT4yMDA3MDcyNTEwNTAxNDwvb3JkZXJEYXRlPjxvcmRlc mlkPjIwMDcwNzI1MTA1MDE0LTIxMzQwNjI1NDg8L29yZGVyaWQ+PGFtb3VudD4y MDwvYW1vdW50PjxjdXJUeXBlPjAwMTwvY3VyVHlwZT48bWVySUQ+MDIwMEVDMjA wMDA4NzU8L21lcklEPjxtZXJBY2N0PjAyMDAwMjA0MDkwMTUwMjkxMzA8L21lck FjY3Q+PC9vcmRlckluZm8+PGN1c3RvbT48dmVyaWZ5Sm9pbkZsYWc+MDwvdmVya WZ5Sm9pbkZsYWc+PExhbmd1YWdlPlpIX0NOPC9MYW5ndWFnZT48L2N1c3RvbT48 bWVzc2FnZT48Z29vZHNJRD4wMDE8L2dvb2RzSUQ+PGdvb2RzTmFtZT7N/sTh0Nw 8L2dvb2RzTmFtZT48Z29vZHNOdW0+MjwvZ29vZHNOdW0+PGNhcnJpYWdlQW10Pj IwPC9jYXJyaWFnZUFtdD48bWVySGludD7H67GjwfSw/NewPC9tZXJIaW50PjxyZ W1hcmsxPjwvcmVtYXJrMT48cmVtYXJrMj48L3JlbWFyazI+PG1lclVSTD5odHRw Oi8vbG9jYWxob3N0OjkwODEvTmV3YjJjX1BheV9NZXIuanNwPC9tZXJVUkw+PG1 lclZBUj50ZXN0PC9tZXJWQVI+PC9tZXNzYWdlPjwvQjJDUmVxPg==">
<INPUT NAME="merSignMsg" TYPE="text" value="DEIdSLqGvBJAcJFzg0B uhuM3gVVofOahFRFAOJ//kcjvZqUJ0GWcY3C/4qufgK+qsqbmQWV2rFdHwzvgJX g0AXpzPPlJ7JesO2iXCGXCWMchr7KaoVe10w20TojcyJxLbVciuA3C2YPoyY7/+ jv6lsnhS5GcR6GDe6vm86MZmv8=">
<INPUT NAME="merCert" TYPE="text" value="MIICUTCCAbqgAwIBAgIKI9 fKEDP6AAAXtjANBgkqhkiG9w0BAQUFADA0MRgwFgYDVQQDEw9wYmouaWNiYy5jb 20uY24xGDAWBgNVBAoTD3Biai5pY2JjLmNvbS5jbjAeFw0xNzAzMTAwNzI0MTda
Fw0xODAzMTAwNzI0MTdaMD4xEzARBgNVBAMTCnBhbi5lLjAyMDAxDTALBgNVBAs TBDAyMDAxGDAWBgNVBAoTD3Biai5pY2JjLmNvbS5jbjCBnzANBgkqhkiG9w0BAQ EFAAOBjQAwgYkCgYEAqBdQrbNWE61+forNFMGI/MmXxKY58P39YO4vzLpHCTHNG RwJKIwILMEOND88vh7cXTBY8kbt3vt0N+4pJY3iwKQA0GfuLfv5EjrsstyUohho goxNAwxdbOLUTnn1ejNjwelZch4GqdkgmRzu6uTywRGW//foiUNgR/yL7Q2FcV0 CAwEAAaNgMF4wSwYDVR0fBEQwQjBAoD6gPKQ6MDgxDjAMBgNVBAMTBWNybDIxMQ wwCgYDVQQLEwNjcmwxGDAWBgNVBAoTD3Biai5pY2JjLmNvbS5jbjAPBgNVHWMEC AMGAP8AAAAAMA0GCSqGSIb3DQEBBQUAA4GBAOImQhTOiQxHABUefFShrD1u3N2G hVP6JnyNUOAfI40WqxszjyfmRmhYPQUQc+8fMf52mcYXiVaEM4BVuRLPkCaybBw I0ykS+xBNMhy72naQPCeR+NNyZ4xduv/E5UE+INJrjnOHR7UWRBzdxX9bjsFB16 beUVir7+S+adaXyQFT">
tranData对应的xml明文:
<?xml version="1.0" encoding="GBK" standalone="no"?><B2CReq><in terfaceName>ICBC_PERBANK_B2C</interfaceName><interfaceVersion>1.
0.0.3</interfaceVersion><orderInfo><orderDate>20070725105014</o rderDate><orderid>20070725105014-2134062548</orderid><amount>20 </amount><curType>001</curType><merID>0200EC20000875</merID><me rAcct>0200020409015029130</merAcct></orderInfo><custom><verifyJ oinFlag>0</verifyJoinFlag><Language>ZH_CN</Language></custom><m essage><goodsID>001</goodsID><goodsName>威尼熊</goodsName><good sNum>2</goodsNum><carriageAmt>20</carriageAmt><merHint>请保留包装</merHint><remark1></remark1><remark2></remark2><merURL>http:
//localhost:9081/Newb2c_Pay_Mer.jsp</merURL><merVAR>test</merVA R></message></B2CReq>
2.2通知接口
2.2.1通知接口表单定义
2.2.2notifyData数据定义
2.2.3notifyData格式定义
notifyData格式(xml格式固定,选输字段的取值可以为空,标签需保留) <?xml version="1.0" encoding="GBK" standalone="no"?>
<B2CRes>
<interfaceName></interfaceName>
<interfaceVersion></interfaceVersion>
<orderInfo>
<orderDate></orderDate>
<orderid></orderid>
<amount></amount>
<curType></curType>
<merID></merID>
<merAcct></merAcct>
</orderInfo>
<custom>
<verifyJoinFlag></verifyJoinFlag>
<JoinFlag></JoinFlag>
<UserNum></UserNum>
</custom>
<bank>
<TranSerialNo></TranSerialNo>
<notifyDate></notifyDate>
<tranStat></tranStat>
<comment></comment>
</bank>
</B2CRes>
2.2.4表单样例
表单数据:
<INPUT TYPE="hidden" NAME="merVAR" VALUE="test">
<INPUT TYPE="hidden" NAME="notifyData" VALUE="PD94bWwgIHZlcnNpb 249IjEuMCIgZW5jb2Rpbmc9IkdCSyIgc3RhbmRhbG9uZT0ibm8iID8+PEIyQ1Jl cz48aW50ZXJmYWNlTmFtZT5JQ0JDX1BFUkJBTktfQjJDPC9pbnRlcmZhY2VOYW1
lPjxpbnRlcmZhY2VWZXJzaW9uPjEuMC4wLjM8L2ludGVyZmFjZVZlcnNpb24+PG 9yZGVySW5mbz48b3JkZXJEYXRlPjIwMDcwNzI1MTA1MDE0PC9vcmRlckRhdGU+P G9yZGVyaWQ+MjAwNzA3MjUxMDUwMTQtMjEzNDA2MjU0ODwvb3JkZXJpZD48YW1v dW50PjIwPC9hbW91bnQ+PGN1clR5cGU+MDAxPC9jdXJUeXBlPjxtZXJJRD4wMjA wRUMyMDAwMDg3NTwvbWVySUQ+PG1lckFjY3Q+MDIwMDAyMDQwOTAxNTAyOTEzMD wvbWVyQWNjdD48L29yZGVySW5mbz48Y3VzdG9tPjx2ZXJpZnlKb2luRmxhZz4wP C92ZXJpZnlKb2luRmxhZz48Sm9pbkZsYWc+PC9Kb2luRmxhZz48VXNlck51bT48 L1VzZXJOdW0+PC9jdXN0b20+PGJhbms+PFRyYW5TZXJpYWxObz48L1RyYW5TZXJ pYWxObz48bm90aWZ5RGF0ZT4yMDA3MDcyNTExMDQwMDwvbm90aWZ5RGF0ZT48dH JhblN0YXQ+MTwvdHJhblN0YXQ+PGNvbW1lbnQ+vbvS17PJuaajoTwvY29tbWVud D48L2Jhbms+PC9CMkNSZXM+">
<INPUT TYPE="hidden" NAME="signMsg" VALUE="UYE6nBdgkaV1uxZPzyIG 5BYZmVvDl29tIvmp4XxWBsVxsw++yNwi86pYO/Wa8Kb7yMa8SueJA1Md8rDOlLG iSi/qSuJZ/lz/zM6lqpDvZgCjXSwFfcgoZJgZAFFxGOHjqBzOlp5k/WnG+9JJO2 0ROoF2a5lLhKXa509H6Mk4YUY=">
notifyData对应的明文:
<?xml version="1.0" encoding="GBK" standalone="no" ?><B2CRes>< interfaceName>ICBC_PERBANK_B2C</interfaceName><interfaceVersio n>1.0.0.3</interfaceVersion><orderInfo><orderDate>2007072510501 4</orderDate><orderid>20070725105014-2134062548</orderid><amoun t>20</amount><curType>001</curType><merID>0200EC20000875</merI D><merAcct>0200020409015029130</merAcct></orderInfo><custom><ve
rifyJoinFlag>0</verifyJoinFlag><JoinFlag></JoinFlag><UserNum></ UserNum></custom><bank><TranSerialNo></TranSerialNo><notifyDat e>20070725110400</notifyDate><tranStat>1</tranStat><comment>交易成功!</comment></bank></B2CRes>
2.3说明
商户可能收到的银行通知
指令成功:
只能有一笔成功、且要验证银行签名、订单金额等信息是否与商户端记录一致。

指令失败:
注意可能收到多笔失败。

客户支付失败时可以重提此笔订单到银行支付。

指令可疑:
由于网银系统与后台业务处理系统间通讯异常,造成网银不能确认支付指令结果,则此笔指令为可疑指令;可疑指令将被自动批复,商户、客户可于第二日查询指令状态。

没有收到客户浏览器转发的银行通知:
由于客户浏览器端或互联网通讯等原因可能造成商户端接收不到客户浏览器提交的银行通知。

当没有收到银行通知时,可登录工行商户服务网站手工查询指令状态或者商户调用查询接口自动处理。

商户提交的订单信息和银行返回的通知消息都是xml串,并且进行了
BASE64编码;
提交和返回的xml都应有xml头;
第 3 章安全API说明
为了保证商户提交订单数据和银行通知信息数据的完整性,不可抵赖性,现提供一套用于信息签名、验签和BASE64编解码的函数。

商户开发时使用这套函数和工行颁发的商户证书进行商户订单信息签名;签名数据项和顺序均固定,具体格式可参见上文的数据定义;同时使用这套API和银行公钥可以验证银行通知消息的有效性。

安全API的使用方法可参见相关开发语言的说明和demo程序;
第 4 章开发步骤
商户程序需在银行模拟测试环境上进行联调后,再投产,以下说明联调开发步骤。

生成订单:
1、商户和当地行联系,申请联调测试;由当地行在模拟测试环境录入商户
信息,生成商户证书(pfx格式);并提供银行模拟测试环境的银行证书公钥文件(用于验证银行签名时使用);
2、商户或者银行用证书拆分工具将pfx格式的商户证书拆分成扩展名为
crt的公钥文件和扩展名为key的私钥文件;(这两个文件用于商户开发API调用来进行商户订单数据签名)
3、商户进行开发,准备要求的订单数据;
4、其中订单签名数据merSignMsg字段是对明文的签名数据;需要使用提
供的API函数和商户私钥进行签名,得到签名串,然后做BASE64编码;
5、其中商城证书公钥merCert字段需要使用API函数做BASE64编码;
6、准备好订单数据,即完成订单提交的开发;之后只要将订单提交银行接
收入口“https://银行地址/servlet/ICBCINBSEBusinessServlet”,银行来处理B2C指令的资金支付;
接收通知:
交易处理后,会将客户定向回商户网站,此时包含交易结果信息和银行签名。

商户接收到银行通知后,需使用开发API和银行公钥来验证银行签名,以确保通知消息的有效性,以下简要说明验证步骤:
1、获得各字段取值后,注意提交的明文需要进行base64解码才能获得。

使用商户开发API和银行公钥文件对表单中的银行签名signMsg进行验签;
2、验签成功后,为确保数据一致,建议商户比较一下通知消息中订单金额、
卖家卡号等关键信息和自己记录的是否一致;
3、商户根据交易结果tranStat来更新自己的指令状态和相关数据库信
息;
4、希望以上资料对你有所帮助,附励志名3条:
5、1、积金遗于子孙,子孙未必能守;积书于子孙,子孙未必能读。

不如
积阴德于冥冥之中,此乃万世传家之宝训也。

6、2、积德为产业,强胜于美宅良田。

7、3、能付出爱心就是福,能消除烦恼就是慧。

8、。

相关文档
最新文档