手机银行商户手册
支付币种 联名校验标志 客户是否联名标志 会员号 银行指令序号 返回通知日期时间 订单处理状态 错误描述 curType verifyJoinFlag JoinFlag UserNum TranSerialNo notifyDate =3 =1 =1 MAX(30) MAX(30) MAX(14) 取值:“001” 取值:“0” 取值:“0” 取值为空,该字段暂时无用 银行端指令流水号 格式为:YYYYMMDDHHmmss 1-“交易成功,已清算”; tranStat comment =1 MAX(100) 2-“交易失败”; 3-“交易可疑” 错误描述
2.2.3 notifyData格式定义
notifyData格式(xml格式固定,选输字段的取值可以为空,标签需保留)
第 11 页 共 17 页
手机银行商户手册
2.2.4 表单样例
表单数据:
VALUE=\Q1Jlcz48aW50ZXJmYWNlTmFtZT5JQ0JDX1dBUEJfQjJDPC9pbnRlcmZhY2VOYW1lPjxpbnRlcmZhY2VWZXJzaW9uPjEuMC4wLjY8L2ludGVyZmFjZVZlcnNpb24+PG9yZGVySW5mbz48b3JkZXJEYXRlPjIwMTMwNDEwMTMzODQ2PC9vcmRlckRhdGU+PG9yZGVyaWQ+MjAxMzA0MTAxMzM4NDYwPC9vcmRlcmlkPjxhbW91bnQ+NTAwPC9hbW91bnQ+PGluc3RhbGxtZW50VGltZXM+MTwvaW5zdGFsbG1lbnRUaW1lcz48bWVyQWNjdD4wMjAwMDI0MTA5MDMxNTQ4NTY5PC9tZXJBY2N0PjxtZXJJRD4wMjAwRUMyMzMzNTE0OTwvbWVySUQ+PGN1clR5cGU+MDAxPC9jdXJUeXBlPjx2ZXJpZnlKb2luRmxhZz4wPC92ZXJpZnlKb2luRmxhZz48Sm9pbkZsYWc+MDwvSm9pbkZsYWc+PFVzZXJOdW0+PC9Vc2VyTnVtPjwvb3JkZXJJbmZvPjxiYW5rPjxUcmFuU2VyaWFsTm8+MTIzNDU2Nzg5MDwvVHJhblNlcmlhbE5vPjxub3RpZnlEYXRlPjIwMTMwNDEwMTM0MTU0PC9ub3RpZnlEYXRlPjx0cmFuU3RhdD4xPC90cmFuU3RhdD48Y29tbWVudD69u9LXs8m5pqOs0tHH5cvjo6E8L2NvbW1lbnQ+PC9iYW5rPjwvQjJDUmVzPg==\
notifyData对应的明文:
第 12 页 共 17 页
手机银行商户手册
2.1 商户判断支付结果及返回商户取货
商户可以在支付接口中配置接收银行通知来实时获取支付结果,若支付接口中配置的是不接收银行通知或接收通知异常,商户还可以通过浏览器登录工行的B2C商户服务网站,或者使用工行提供的客户端程序API主动获取支付结果。
若商户选择的启动方式为客户端版本, 则客户端支付结果页面只提供返回手机银行的按钮,客户点击后只会返回手机银行客户端的登录页面或主菜单,但结果页面会提示客户自行回到商户界面进行取货。在取货页面,商户需要根据银行通知或主动获取支付结果自行判断支付是否完成,客户是否可以进行取货。
若商户选择的启动方式为移动生活商户版本,则客户端结果页面只提供返回商户按钮,客户点击此按钮会回到商户提交订单的页面。商户可以在客户提交订单时设立“已完成支付”按钮,客户完成支付流程后回到此页面点击“已完成支付”按钮,商户需要根据银行通知或主动获取支付结果自行判断支付是否完成,客户是否可以进行取货。
若商户选择的启动方式为HTML版本,则支付流程都是在客户手机的浏览器中完成的,并不会启动工行客户端程序,所以若商户希望在支付结果页面能跳转到自己的取货页面,则商户需要在支付接口中配置接收银行通知,并在接收银行通知消息后返回取货页面的URL给银行,银行将在结果页面显示链接到此地址的按钮。若商户配置不接收银行通知或返回的取货地址不正确,则在结果页面将不会提供任何按钮,客户需要自行回到商户页面取货,此时商户需要自行判断支付是否完成。
返回取货地址提示:
1、商户返回实质上只是一个内容为URL的字符串,不能有任何多余的东西,包括不能有任何的html的标签;类似以下http报文回应
HTTP/1.1 200 OK Server: Apache/1.39 Content-Length: 24 Content-type: text/html http://www.merweb.com.cn
2、此URL可以通过“?”来挂参数;举例:
http://www.merweb.com.cn/getGoods.jsp?user=guest&level=3
银行在显示给客户的交易结果页面上提供此URL的链接,客户点击此链接后,挂载的参数将以GET方式提交商户。
2.3 其他说明
1、商户可能收到的银行通知 指令成功:
只能有一笔成功、且要验证银行签名、订单金额等信息是否与商户端记录一致。 指令失败:
商户可能会收到多笔客户支付失败的信息,如密码输入错误,限额超限等。 指令可疑:
第 13 页 共 17 页
手机银行商户手册
由于手机银行系统与后台业务处理系统间通讯异常,造成手机银行不能确认支付指令结果,则此笔指令为可疑指令;可疑指令将被自动批复,商户、客户可于第二日查询指令状态。
2、没有收到客户浏览器转发的银行通知:
由于客户浏览器端或互联网通讯等原因可能造成商户端接收不到客户浏览器提交的银行通知。当没有收到银行通知时,可登录工行商户服务网站手工查询指令状态或者商户调用查询接口自动处理。
3、商户提交的订单信息和银行返回的通知消息都是xml串,并且进行了BASE64编码;提交和返回的xml都应有xml头;商户提交的订单xml明文,和银行发送给商户的通知消息xml明文,必须是GBK编码的。
4、其它页面不作限制,可以是其它编码,如utf-8。
第 3 章 安全API说明
为了保证商户提交订单数据和银行通知信息数据的完整性,不可抵赖性,现提供一套用于信息签名、验签和BASE64编解码的函数。商户开发时使用这套函数和工行颁发的商户证书进行商户订单信息签名;签名数据项和顺序均固定,具体格式可参见上文的数据定义;同时使用这套API和银行公钥可以验证银行通知消息的有效性。安全API的使用方法可参见相关开发语言的说明和demo程序;
第 4 章 开发步骤
商户程序需在银行模拟测试环境上进行联调后,再投产,以下说明联调开发步骤。
4.1通用步骤
生成订单:
1、商户和当地行联系,申请联调测试;由当地行在模拟测试环境录入商户信息,生成商户证书(pfx格式);并提供银行模拟测试环境的银行证书公钥文件(用于验证银行签名时使用);
2、商户或者银行用证书拆分工具将pfx格式的商户证书拆分成扩展名为crt的公钥文件和扩展名为key的私钥文件;(这两个文件用于商户开发API调用来进行商户订单数据签名) 商户进行开发,准备要求的订单数据;
第 14 页 共 17 页
手机银行商户手册
3、其中订单签名数据merSignMsg字段是对明文的签名数据;需要使用提供的API函数和商户私钥进行签名,得到签名串,然后做BASE64编码;
4、其中商城证书公钥merCert字段需要使用API函数做BASE64编码; 5、准备好订单数据,即完成订单部分的开发;
提交订单:
本B2C支付接口支持多种启动类型,需要商户侧根据需要自行判断选择
1、若商户开发的是Android、iPhone系统的客户端程序,则商户提交订单可以采用 Android平台的WebView控件或iOS平台的UIWebView控件提交表单数据到银行接收入口,订单中的启动类型可以选择客户端版本或HTML版本,若为客户端版本则会打开我行手机银行客户端进行支付,若为HTML版本则在当前WebView(UIWebView)控件或手机系统浏览器中进行支付。
2、若商户开发的是WAP商城站点,直接提交表单数据到银行接收入口即可;订单中的启动类型可以选择客户端版本或HTML版本;若启动类型为客户端版本,则需要商户自行判断客户使用的手机系统(可以通过浏览器UA判断)来选择启动Android版本或iPhone版本。若启动类型为HTML版本,则需要商户自行判断客户使用的手机系统及浏览器是否满足本接口的要求(Android、iPhone系统、Webkit核心浏览器);
3、若商户开发的是工行合作的移动生活商户,请参考4.2节的开发步骤提交订单数据。 4、银行侧接收商户提交入口如下: 模拟测试环境:
https://mywap2.dccnet.com.cn/ICBCWAPBank/servlet/ICBCWAPEBizServlet 生产环境:
https://mywap2.icbc.com.cn/ICBCWAPBank/servlet/ICBCWAPEBizServlet
接收通知:
交易支付成功后,会将交易结果信息和银行签名发送给商户。商户接收到银行通知后,需使用开发API和银行公钥来验证银行签名,以确保通知消息的有效性,以下简要说明验证步骤:
1、获得各字段取值后,注意提交的明文需要进行base64解码才能获得。使用商户开发API和银行公钥文件对表单中的银行签名signMsg进行验签;
2、验签成功后,为确保数据一致,建议商户比较一下通知消息中订单金额、卖家卡号等关键信息和自己记录的是否一致;
3、商户根据交易结果tranStat来更新自己的指令状态和相关数据库信息;
4.2移动生活商户改造方法
工行移动生活商户是指在我行iPhone、Android手机银行主屏移动生活栏目中展现的这些商户,此部分商户与我行是合作关系。目前此类商户的支付流程使用的是我行的无界面工银e支付接口。为了统一支付界面风格,建议此部分商户统一使用我行最新的B2C支付接口完成支付流程。开发步骤请先参见通用步骤,以下为特殊改造点:
1、只有最新版本的客户端程序(Android:1.0.0.9、iPhone1.0.1.1)才支持本B2C支付接口,所以商户需要使用附件js文件中的以下代码判断当前的手机银行客户端是否支持本B2C支付接口,若不支持,商户还需要使用现行的无界面工银e支付完成支付流程,若支持,商户页面需要按要求组织订单数据使用本B2C接口完成支付流程。
第 15 页 共 17 页