B2C支付接口v1.0.0.3第 1 章业务说明第 2 章商户接口2.1 支付接口2.1.1 支付接口表单定义2.1.2 tranData2.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="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIiBzdGFuZGFsb25lPSJubyI/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 20uY24xGDAWBgNVBAoTD3Biai5pY2JjLmNvbS5jbjAeFw0xNzAzMTAwNzI0MTdaFw0xODAzMTAwNzI0MTdaMD4xEzARBgNVBAMTCnBhbi5lLjAyMDAxDTALBgNVBAs 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 cz48aW50ZXJmYWNlTmFtZT5JQ0JDX1BFUkJBTktfQjJDPC9pbnRlcmZhY2VOYW1lPjxpbnRlcmZhY2VWZXJzaW9uPjEuMC4wLjM8L2ludGVyZmFjZVZlcnNpb24+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><verifyJoinFlag>0</verifyJoinFlag><JoinFlag></JoinFlag><UserNum></ UserNum></custom><bank><TranSerialNo></TranSerialNo><notifyDat e>20070725110400</notifyDate><tranStat>1</tranStat><comment>交易成功!</comment></bank></B2CRes>2.3说明商户可能收到的银行通知指令成功:只能有一笔成功、且要验证银行签名、订单金额等信息是否与商户端记录一致。