企业管理制度中国某银行网上银
行网上支付接口规范
B2C 支付接口
中国工商银行软件开发中心
Copyright Reserved
商
户
手
册
目录
第 1 章 业务说明........................................................................................................................3
第 2 章 商户接口........................................................................................................................4
支付接口........................................................................................................................5
支付接口表单定义....................................................................................................5
tranData 数据定义.....................................................................................................6
tranData 格式定义.....................................................................................................7
表单样例....................................................................................................................8
通知接口........................................................................................................................9
通知接口表单定义....................................................................................................9
notifyData 数据定义 ...............................................................................................10
notifyData 格式定义 ...............................................................................................11
表单样例..................................................................................................................11
说明..............................................................................................................................12
第 3 章 安全 API 说明 .............................................................................................................13
第 4 章 开发步骤......................................................................................................................13
第 1 章 业务说明
B2C 在线支付接口实现工行个人网银客户在工行 B2C 商户网站进行消费支付的业务处
理。新的 版本同原先版本的主要区别在于通知消息方式的改变。
原 版本和 版本(扩充语言字段以支持英文版)在订单中要求商户选择通
知方式,即 1、需要银行通知交易结果,2、不需要银行通知交易结果而是商户主动查询;
当需要通知时,需要在订单中提供商户接收银行通知地址,当银行处理结束后,会在银行的
后台服务器请求商户的此地址,将交易结果用 http 连接 post 表单形式提交给商户,然后返
回客户交易结果页面。
新的 版本不再要求商户选择通知方式,和接收银行通知的地址;此版本要求商
户在提交订单时,提供交易处理后返回商户的地址,即完成客户从商户转向到银行进行支付,
处理后又从银行定向回商户网站的闭环。在从银行交易页面返回商户时,将交易结果作为表
单数据提交到商户此返回地址。
处理的优点:1、强制完成交易闭环;2、无需银行后台发送通知,客户不需要等待商户
接收银行通知后才能看到交易结果页面,缩短响应时间;3、通知方式不再局限于 http 连接
和 80 端口,返回商户的地址可以使用 https 方式和其他商户支持的端口,提高安全性;4、
银行作为交易的一方,支持众多商户和客户时,存在一定的带宽和服务器处理压力,使用客
户返回商户方式提供交易结果,可有效减少交易掉单现象,只要客户到了银行的结果页面,
如果还出现掉单问题,则可能是客户和商户的通讯等方面的问题。
以下简述处理流程:
1. 客户在商户网站浏览商品信息,签订订单;
2. 商户按照工行 B2C 支付 接口形成提交数据,并使用工行提供 API 和商户证书对
订单数据签名,形成 form 表单返回客户浏览器,表单 action 地址指向工行接收商户订单信
息的 servlet;
3. 客户确认使用工行支付后,提交此表单到工行;
网银商户
客户
1 、 客户浏览商户
网站并下订单
2 、 商户使用API 证书对订单
签名并返回客户端
3 、 客户将订单
数据提交银行
4 、 校验商户签名和证书、 订单数据、 商户状态等
5 、
返回客户支付页面
回显订单指定卡号或
提示客户输入卡号
6 、 客户确定提交
8 、 返回预留信息
7 、 检查客户信息
9 、客户确认
10 、 返回确认页面
11 、客户确认
( 静态密码、动态密码、签名)
主机12 、
发主
机指令
13 、 返回客户支付结果
14、将结果返回商户
4. 工行网银系统接收此笔订单,对订单信息和商户信息进行检查;
5. 通过检查则显示工行支付页面, 版本会提示客户输入交易卡号;
6. 客户输入后提交;
7. 银行查询客户相关信息;
8. 返回客户在银行的预留信息;
9. 客户确认;
10. 返回交易确认页面;
11. 不同类型客户使用各自认证方式进行交易确认,支持静态支付密码、动态口令卡、证书
签名;
12. 银行校验后进行支付处理;
13. 将结果形成通知消息并有银行端签名信息,返回客户端;
14. 引导客户返回商户网站,地址是订单中提供的商户 url,此 url 支持 http 和 https 及自定
义端口;
B2C 在线支付接口版本说明:
(基本支付)
(支持英文界面)
(内部保留)
(保留 功能,优化通知方式)
(商户订单中指定支付卡,不强制使用 e 卡支付,不允许客户的支付卡透支支付,专
门用于基金商户进行基金直销业务,同 通知方式)
通知消息模式区别:
原有模式:支付处理后,后台发送商户通知;
新增模式:支付完成后或客户点击“返回商户”,利用客户浏览器跳转,完成商户通知的转发,
后台不再单独发送商户通知。
对于不同类型商户接口区别:
对于购物类型商城只支持使用
对于基金直销类型网站商城只支持使用
第 2 章 商户接口
接口定义通过接口名称和接口版本号来标识,以便将来的扩展;新通知方式的 B2C 接
口称为新模式 B2C 接口;原有后台发送 http 通知的方式称为原模式接口;
支付接口
支付接口表单定义
新模式接口的交易数据整合到一个 xml 格式串,作为表单的一项整体提交,不再同原
来每个字段都是 key-value 形式;
FORM 表单数据如下:
变量名称 变量命名 长度定义 说明
接口名称
interfaceName MAX(30)
必输,
取值:“ICBC_PERBANK_B2C”
接口版本号
interfaceVersio
n
MAX(15)
必输,
取值:“”
交易数据
tranData
无限制 必输,签名;
整合所有交易数据形成的xml明文串,
并做 BASE64 编码;
具体格式定义见下文;
注意:
需有 xml 头属性;整个字段使用
BASE64 编码;
xml 明文中没有回车换行和多余空格;
订单签名数据
merSignMsg
无限制 必输,
商户使用工行提供的签名 API 和商户
证书将 tranData 的 xml 明文串进行签
名,得到二进制签名数据,然后进行
BASE64 编 码 后 得 到 可 视 的
merSignMsg;
注意:签名时是针对 tranData 的 xml
明文,不是将 tranData 进行 BASE64
编码后的串;
商城证书公钥
merCert
无限制 必输,
商户用二进制方式读取证书公钥文件
后,进行 BASE64 编码后产生的字符
串;
注:
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="" encoding="GBK"
standalone="no"?>
tranData 数据定义
变量名称 变量命名 长度定义 说明
接口名称
interfaceName
=16 必输,
取值:“ICBC_PERBANK_B2C”
接口版本号
interfaceVersion MAX(15)
必输,
取值:“”
交易日期时间
orderDate =14
必输,
格式为:YYYYMMDDHHmmss
要求在银行系统当前时间的前 1 小时
和后 12 小时范围内,否则判定交易时
间非法。
订单号
orderid MAX(30)
必输,
客户支付后商户网站产生的一个唯一
的定单号,该订单号应该在相当长的
时间内不重复。工行通过订单号加订
单日期来唯一确认一笔订单的重复性。
订单金额
amount MAX(10)
必输,
客户支付订单的总金额,一笔订单一
个,以分为单位。不可以为零,必需
符合金额标准。
支付币种
curType = 3
必输,
用来区分一笔支付的币种,目前工行
只支持使用人民币(001)支付。
取值: “001”
商户代码
merID MAX(20)
必输,
唯一确定一个商户的代码,由商户在
工行开户时,由工行告知商户。
商户账号
merAcct MAX(19)
必输,
商户入账账号,只能交易时指定。(商
户付给银行手续费的账户,可以在开
户的时候指定,也可以用交易指定方
式;用交易指定方式则使用此商户账
号)
检验联名标志
verifyJoinFlag =1
必输,
取值“1”:客户支付时,网银判断该客
户是否与商户联名,是则按上送金额
扣帐,否则展现未联名错误;
取值“0”:不检验客户是否与商户联名,
按上送金额扣帐。
语言版本
Language MAX(10)
选输,默认为中文版
取值:“EN_US”为英文版;
取值:“ZH_CN”或其他为中文版。
注意:大小写敏感。
商品编号
goodsID MAX(30)
选输
商品名称
goodsName MAX(60)
选输
商品数量
goodsNum MAX(10)
选输
已含运费金额
carriageAmt MAX(10)
选输
商城提示
merHint MAX(120)
选输
备注字段 1
remark1 MAX(100)
选输 单位:字节
备注字段 2
remark2 MAX(100)
选输 单位:字节
返回商户 URL
merURL MAX(1024)
必输
必须合法的 URL,交易结束,将客户
引导到商户的此 url,即通过客户浏览
器 post 交易结果信息到商户的此 URL
返回商户变量
merVAR MAX(1024)
选输
商户自定义,当返回银行结果时,作
为一个隐藏域变量,商户可以用此变
量维护 session 等等。由客户端浏览器
支付完成后提交通知结果时是明文传
输,建议商户对此变量使用额外安全
防范措施,如签名、base64
tranData 格式定义
tranData 格式(xml 格式固定,选输字段的取值可以为空,标签需保留)
<?xml version="" 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>
表单样例
表单数据:
<INPUT NAME="interfaceName" TYPE="text" value="ICBC_PERBANK_B2C" >
<INPUT NAME="interfaceVersion" TYPE="text" value="">
<INPUT NAME="tranData" TYPE="text"
value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0JLIiBzdGFuZGFsb25lPSJubyI/PjxCMk
NSZXE+PGludGVyZmFjZU5hbWU+SUNCQ19QRVJCQU5LX0IyQzwvaW50ZXJmYWNlTmFtZT48aW
50ZXJmYWNlVmVyc2lvbj4xLjAuMC4zPC9pbnRlcmZhY2VWZXJzaW9uPjxvcmRlckluZm8+PG9yZG
VyRGF0ZT4yMDA3MDcyNTEwNTAxNDwvb3JkZXJEYXRlPjxvcmRlcmlkPjIwMDcwNzI1MTA1MDE0L
TIxMzQwNjI1NDg8L29yZGVyaWQ+PGFtb3VudD4yMDwvYW1vdW50PjxjdXJUeXBlPjAwMTwvY3VyV
HlwZT48bWVySUQ+MDIwMEVDMjAwMDA4NzU8L21lcklEPjxtZXJBY2N0PjAyMDAwMjA0MDkwMT
UwMjkxMzA8L21lckFjY3Q+PC9vcmRlckluZm8+PGN1c3RvbT48dmVyaWZ5Sm9pbkZsYWc+MDw
vdmVyaWZ5Sm9pbkZsYWc+PExhbmd1YWdlPlpIX0NOPC9MYW5ndWFnZT48L2N1c3RvbT48bW
Vzc2FnZT48Z29vZHNJRD4wMDE8L2dvb2RzSUQ+PGdvb2RzTmFtZT7N/sTh0Nw8L2dvb2RzTmFt
ZT48Z29vZHNOdW0+MjwvZ29vZHNOdW0+PGNhcnJpYWdlQW10PjIwPC9jYXJyaWFnZUFtdD48b
WVySGludD7H67GjwfSw/NewPC9tZXJIaW50PjxyZW1hcmsxPjwvcmVtYXJrMT48cmVtYXJrMj48L3
JlbWFyazI+PG1lclVSTD5odHRwOi8vbG9jYWxob3N0OjkwODEvTmV3YjJjX1BheV9NZXIuanNwPC9t
ZXJVUkw+PG1lclZBUj50ZXN0PC9tZXJWQVI+PC9tZXNzYWdlPjwvQjJDUmVxPg==">
<INPUT NAME="merSignMsg" TYPE="text"
value="DEIdSLqGvBJAcJFzg0BuhuM3gVVofOahFRFAOJ//kcjvZqUJ0GWcY3C/4qufgK+qsqbmQW
V2rFdHwzvgJXg0AXpzPPlJ7JesO2iXCGXCWMchr7KaoVe10w20TojcyJxLbVciuA3C2YPoyY7/+jv6l
snhS5GcR6GDe6vm86MZmv8=">
<INPUT NAME="merCert" TYPE="text"
value="MIICUTCCAbqgAwIBAgIKI9fKEDP6AAAXtjANBgkqhkiG9w0BAQUFADA0MRgwFgYDVQQDE
w9wYmouaWNiYy5jb20uY24xGDAWBgNVBAoTD3Biai5pY2JjLmNvbS5jbjAeFw0xNzAzMTAwNzI0
MTdaFw0xODAzMTAwNzI0MTdaMD4xEzARBgNVBAMTCnBhbi5lLjAyMDAxDTALBgNVBAsTBDAyM
DAxGDAWBgNVBAoTD3Biai5pY2JjLmNvbS5jbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAq
BdQrbNWE61+forNFMGI/MmXxKY58P39YO4vzLpHCTHNGRwJKIwILMEOND88vh7cXTBY8kbt3vt
0N+4pJY3iwKQA0GfuLfv5EjrsstyUohhogoxNAwxdbOLUTnn1ejNjwelZch4GqdkgmRzu6uTywRGW/
/foiUNgR/yL7Q2FcV0CAwEAAaNgMF4wSwYDVR0fBEQwQjBAoD6gPKQ6MDgxDjAMBgNVBAMTB
WNybDIxMQwwCgYDVQQLEwNjcmwxGDAWBgNVBAoTD3Biai5pY2JjLmNvbS5jbjAPBgNVHWMECA
MGAP8AAAAAMA0GCSqGSIb3DQEBBQUAA4GBAOImQhTOiQxHABUefFShrD1u3N2GhVP6JnyNU
OAfI40WqxszjyfmRmhYPQUQc+8fMf52mcYXiVaEM4BVuRLPkCaybBwI0ykS+xBNMhy72naQPCe
R+NNyZ4xduv/E5UE+INJrjnOHR7UWRBzdxX9bjsFB16beUVir7+S+adaXyQFT">
tranData 对应的 xml 明文:
<?xml version="" encoding="GBK"
standalone="no"?><B2CReq><interfaceName>ICBC_PERBANK_B2C</interfaceName><interfa
ceVersion></interfaceVersion><orderInfo><orderDate>214</orderDate><orderid>28<
/orderid><amount>20</amount><curType>001</curType><merID>0200EC20000875</merI
D><merAcct>15029130</merAcct></orderInfo><custom><verifyJoinFlag>0</verifyJoinFlag>
<Language>ZH_CN</Language></custom><message><goodsID>001</goodsID><goodsNam
e> 威 尼 熊
</goodsName><goodsNum>2</goodsNum><carriageAmt>20</carriageAmt><merHint> 请 保
留 包 装
</merHint><remark1></remark1><remark2></remark2><merURL></merUR
L><merVAR>test</merVAR></message></B2CReq>
通知接口
通知接口表单定义
变量名称 变量命名 长度定义 说明
返回商户变量
merVAR
无限制 取值:商户提交接口中 merVAR 字段
当返回银行结果时,作为一个隐藏域
变量,商户可以用此变量维护 session
等等。由客户端浏览器支付完成后提
交通知结果时是明文传输,建议商户
对此变量使用额外安全防范措施,如
签名、base64,银行端将此字段原样
返回
通知结果数据
notifyData
无限制 银行通知消息,xml 格式定义见下文,
提 交商 户 时对 xml 明 文 串进 行 了
base64 编码;
xml 串中没有回车换行和多余空格;
包含 xml 头属性,且格式固定;
银行对通知结
果的签名数据
signMsg
无限制 银行使用自己证书对商户通知消息
notifyData 字段的 xml 格式明文串进
行的签名,然后进行 BASE64 编码后
的字符串。
注意:签名是对 notifyData 的 xml 明
文进行签名,不是其 BASE64 编码后
的串;签名后得到二进制数据,对此
数据进行 BASE64 编码得到 signMsg
notifyData 数据定义
变量名称 变量命名 长度定义 说明
接口名称
interfaceName
=16 取值:“ICBC_PERBANK_B2C”
接口版本号
interfaceVersion MAX(15)
取值:“”
交易日期时间
orderDate =14
格式为:YYYYMMDDHHmmss
要求在银行系统当前时间的前 1 小时
和后 12 小时范围内,否则判定交易时
间非法。
订单号
orderid MAX(30)
客户支付后商户网站产生的一个唯一
的定单号,该订单号应该在相当长的
时间内不重复。工行通过订单号加订
单日期来唯一确认一笔订单的重复性。
订单金额
amount MAX(10)
客户支付订单的总金额,一笔订单一
个,以分为单位。不可以为零,必需
符合金额标准。
支付币种
curType = 3
用来区分一笔支付的币种,目前工行
只支持使用人民币(001)支付。
取值: “001”
商户代码
merID MAX(20)
唯一确定一个商户的代码,由商户在
工行开户时,由工行告知商户。
商户账号
merAcct MAX(19)
商户收费入账账号 (只能交易时指
定)。
检验联名标志
verifyJoinFlag =1
取值“1”:客户支付时,网银判断该客
户是否与商户联名,是则按上送金额
扣帐,否则展现未联名错误;
取值“0”:不检验客户是否与商户联名,
按上送金额扣帐。
客户联名标志
JoinFlag =1
客户在银行端是否与商城联名标志位。
1 客户联名 0 客户未联名
联名会员号 UserNum
MAX(40)
联名客户在商户的会员号。
银行指令序号
TranSerialNo MAX(30)
银行端指令流水号
返回通知日期
时间
notifyDate MAX(14)
格式为:YYYYMMDDHHmmss
订单处理状态
tranStat =1
1-“交易成功,已清算”;
2-“交易失败”;
3-“交易可疑”
错误描述
comment MAX(100)
错误描述
notifyData 格式定义
notifyData 格式(xml 格式固定,选输字段的取值可以为空,标签需保留)
<?xml version="" 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>
表单样例
表单数据:
<INPUT TYPE="hidden" NAME="merVAR" VALUE="test">
<INPUT TYPE="hidden" NAME="notifyData"
VALUE="PD94bWwgIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCSyIgc3RhbmRhbG9uZT0ibm8iI
D8+PEIyQ1Jlcz48aW50ZXJmYWNlTmFtZT5JQ0JDX1BFUkJBTktfQjJDPC9pbnRlcmZhY2VOYW1lPj
xpbnRlcmZhY2VWZXJzaW9uPjEuMC4wLjM8L2ludGVyZmFjZVZlcnNpb24+PG9yZGVySW5mbz48b
3JkZXJEYXRlPjIwMDcwNzI1MTA1MDE0PC9vcmRlckRhdGU+PG9yZGVyaWQ+MjAwNzA3MjUxMD
UwMTQtMjEzNDA2MjU0ODwvb3JkZXJpZD48YW1vdW50PjIwPC9hbW91bnQ+PGN1clR5cGU+MD
AxPC9jdXJUeXBlPjxtZXJJRD4wMjAwRUMyMDAwMDg3NTwvbWVySUQ+PG1lckFjY3Q+MDIwMDAy
MDQwOTAxNTAyOTEzMDwvbWVyQWNjdD48L29yZGVySW5mbz48Y3VzdG9tPjx2ZXJpZnlKb2luR
mxhZz4wPC92ZXJpZnlKb2luRmxhZz48Sm9pbkZsYWc+PC9Kb2luRmxhZz48VXNlck51bT48L1Vz
ZXJOdW0+PC9jdXN0b20+PGJhbms+PFRyYW5TZXJpYWxObz48L1RyYW5TZXJpYWxObz48bm90
aWZ5RGF0ZT4yMDA3MDcyNTExMDQwMDwvbm90aWZ5RGF0ZT48dHJhblN0YXQ+MTwvdHJhbl
N0YXQ+PGNvbW1lbnQ+vbvS17PJuaajoTwvY29tbWVudD48L2Jhbms+PC9CMkNSZXM+">
<INPUT TYPE="hidden" NAME="signMsg"
VALUE="UYE6nBdgkaV1uxZPzyIG5BYZmVvDl29tIvmp4XxWBsVxsw++yNwi86pYO/Wa8Kb7yMa
8SueJA1Md8rDOlLGiSi/qSuJZ/lz/zM6lqpDvZgCjXSwFfcgoZJgZAFFxGOHjqBzOlp5k/WnG+9JJO2
0ROoF2a5lLhKXa509H6Mk4YUY=">
notifyData 对应的明文:
<?xml version="" encoding="GBK"
standalone="no" ?><B2CRes><interfaceName>ICBC_PERBANK_B2C</interfaceName><interf
aceVersion></interfaceVersion><orderInfo><orderDate>214</orderDate><orderid>28
</orderid><amount>20</amount><curType>001</curType><merID>0200EC20000875</me
rID><merAcct>15029130</merAcct></orderInfo><custom><verifyJoinFlag>0</verifyJoinFlag><
JoinFlag></JoinFlag><UserNum></UserNum></custom><bank><TranSerialNo></TranSerialN
o><notifyDate>200</notifyDate><tranStat>1</tranStat><comment>交易成功!
</comment></bank></B2CRes>
说明
商户可能收到的银行通知
指令成功:
只能有一笔成功、且要验证银行签名、订单金额等信息是否与商户端记录一致。
指令失败:
注意可能收到多笔失败。客户支付失败时可以重提此笔订单到银行支付。
指令可疑:
由于网银系统与后台业务处理系统间通讯异常,造成网银不能确认支付指令结果,则此
笔指令为可疑指令;可疑指令将被自动批复,商户、客户可于第二日查询指令状态。
没有收到客户浏览器转发的银行通知:
由于客户浏览器端或互联网通讯等原因可能造成商户端接收不到客户浏览器提交的银
行通知。当没有收到银行通知时,可登录工行商户服务网站手工查询指令状态或者商户调用
查询接口自动处理。
商户提交的订单信息和银行返回的通知消息都是 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 来更新自己的指令状态和相关数据库信息;