文档介绍
1.1.读者对象
商户系统设计人员、编程人员及测试人员
1.2.版权声明
此文档版权归网银在线(北京)科技有限公司所有。作为本系统的最终用户,可以拥有该份文档的使用权,但未征得网银在线(北京)科技有限公司的书面批准,不得向第三方借阅、出让、出版该文档。
2.支付接口
2.1.商户 >>> 网银在线支付
示例程序:ChinaBank.html
用途:收集信息并发送到数据发送页即Send页
订单号://选填项,订单号
收货人姓名://选填项,总长不超过80字符
收货人地址://选填项,总长不超过200个字符
收货人电话://选填项,总长不超过50个字符
收货人邮编://选填项,总长不超过10个字符
收货人邮件://选填项,总长不超过100个字符
收货人手机号://选填项,总长不超过13个字符
备注1://选填项,总长不超过150个字符
订货人姓名://选填项,总长不超过80字符
订货人地址://选填项,总长不超过200个字符
订货人电话://选填项,总长不超过50个字符
订货人邮编://选填项,总长不超过10个字符
订货人邮件://选填项,总长不超过100个字符
订货人手机号://选填项,总长不超过13个字符
备注2://选填项,总长不超过150个字符
订单总金额(元):*必填项,譬如:0.01
示例程序:Send.asp、Send.aspx、Send.php、Send.jsp
用途:接收ChinaBank.html发送过来的数据加密后发往网银在线电子支付平台的接口网关
1、 支付平台网关接口地址
<form method=postaction="https://pay3.chinabank.com.cn/PayGate">
2、FORM表单参数
表单参数如表1,具体定义如表2。说明:蓝色部分为必填项,黄色部分与网上支付货款无关,建议不用
<form method=postaction="https://pay3.chinabank.com.cn/PayGate"> <input type=hidden name=v_midvalue="20000400">商户编号 <input type=hidden name=v_oidvalue="19990720-20000400-000001234">订单编号 <input type=hidden name=v_amountvalue="0.01">订单总金额 <input type=hidden name=v_moneytypevalue="CNY">币种 <input type=hidden name=v_urlvalue="http://domain/chinabank/Receive.asp"> 支付动作完成后返回到该url,支付结果以POST方式发送 <input type=hidden name=v_md5infovalue="1630DC083D70A1E8AF60F49C143A7B95">订单MD5校验码 <input type="hidden"name="remark1"value="备注1">备注字段1 <input type="hidden"name="remark2"value="备注2">备注字段2 <input type=hidden name=v_rcvnamevalue="张三">收货人姓名 <input type=hidden name=v_rcvaddrvalue="北京海淀">收货人地址 <input type=hidden name=v_rcvtelvalue="68475566">收货人电话 <input type=hidden name=v_rcvpostvalue="100036">收货人邮编 <input type=hidden name= v_rcvemailvalue="test@test.com">收货人邮件 <input type=hidden name=v_rcvmobilevalue="131100110011"> 收货人手机号 <input type=hidden name=v_ordernamevalue="李四">订货人姓名 <input type=hidden name=v_orderaddrvalue="北京海淀">订货人地址 <input type=hidden name=v_ordertelvalue="68475566">订货人电话 <input type=hidden name=v_orderpostvalue="100036">订货人邮编 <input type=hidden name= v_orderemailvalue="test@test.com">订货人邮件 <input type=hidden name=v_ordermobilevalue="131100110012">订货人手机号 <input type=submitvalue="网银在线支付"> </form> |
表1
支付表单中的变量定义:
—必填项
—与网上支付货款无关项,建议不用
变量名称 | 变量命名 | 长度 | 说明 | 举例 | |
商户编号 | v_mid | 不可为空,以初始单所填商户编号为准。 | 20000400 | ||
订单编号 | v_oid | 64 | 不可为空值,订单编号标准格式为:订单生成日期(yyyymmdd)-商户编号-商户流水号。订单编号所有字符总和不可超过64位。 | 19990720-20000400-12345。商户流水号为数字,订单号当日内不可重复 | |
订单总金额 | v_amount | 8 | 不可为空,单位:元,小数点后保留两位。 | 0.01 | |
币种 | v_moneytype | CNY为人民币 | CNY | ||
URL地址 | v_url | 200 | 消费者完成购物后返回的商户页面,URL参数是以http://开头的完整URL地址 | http://domain/chinabank/Receive.asp | |
MD5校验码 | v_md5info | 32 | 详情见md5相关说明 | ||
备注1 | remark1 | 150 | 值自定义 | 备注1 | |
备注2 | remark2 | 150 | 值自定义 | 备注2 | |
收货人姓名 | v_rcvname | 80 | 值自定义。 | 张三 | |
收货人地址 | v_rcvaddr | 200 | 值自定义。 | 北京海淀1 | |
收货人电话 | v_rcvtel | 50 | 值自定义。 | 588156661 | |
收货人邮编 | v_rcvpost | 10 | 值自定义。 | 100081 | |
收货人Email | v_rcvemail | 100 | 值自定义。 | test1@test.com | |
收货人手机号 | v_rcvmobile | 13 | 值自定义。 | 1311311311311 | |
订货人姓名 | v_ordername | 80 | 值自定义。 | 李四 | |
订货人地址 | v_orderaddr | 200 | 值自定义。 | 北京海淀2 | |
订货人电话 | v_ordertel | 50 | 值自定义。 | 588156662 | |
订货人邮编 | v_orderpost | 10 | 值自定义。 | 100082 | |
订货人Email | v_orderemail | 100 | 值自定义。 | test2@test.com | |
订货人手机号 | v_ordermobile | 13 | 值自定义。 | 1311311311312 |
表2
MD5校验串生成方法:当消费者在商户端生成最终订单的时候,将订单中的v_amountv_moneytype v_oid v_mid v_urlkey六个参数的value值拼成一个无间隔的字符串(顺序不要改变)。参数key是商户的MD5密钥(该密匙可在登陆商户管理界面后自行更改。)
MD5字符串示例:
0.01019990720-20000400-00000123420000400http://domain/chinabank/Receive.aspkey
注意:得出的32位MD5值需转化为大写。(具体函数使用方法请参见接口示例)
用MD5函数加密该字符串所得值即为我们所需的订单MD5校验码,将其写入v_md5info字段即可。
2.2.网银在线支付 >>>商户(页面返回)
用途:支付完成后,网银支付平台通过客户浏览器页面链接返回支付结果信息给商户
示例程序:Receive.asp、Receive.aspx、Receive.php、Receive.jsp
信息格式:
<form method=”post”action="v_url"> <input type="hidden"name="v_oid"value=""> <input type="hidden"name="v_pstatus" value=""> <input type="hidden" name="v_pstring"value=""> <input type="hidden" name="v_pmode"value=""> <input type="hidden" name="v_md5str"value=""> <input type="hidden" name="v_amount"value=""> <input type="hidden" name="v_moneytype"value=""> <input type="hidden" name="remark1 "value=""> <input type="hidden" name="remark2"value=""> </form> |
该消息格式详细解释如下:v_url是该笔订单提交时参数v_url 的值,即网银返回到商户的接口地址。
变量名称 | 变量命名 | 返回值说明 | |
订单编号 | v_oid | 商户发送的v_oid定单编号。 | |
支付状态 | v_pstatus | 20(表示支付成功) 30(表示支付失败) | |
支付结果信息 | v_pstring | 支付完成 支付完成 | |
支付银行 | v_pmode | 支付银行,例如工商银行 | |
订单MD5校验码 | v_md5str | 该参数的MD5字符串的顺序为:v_oid,v_pstatus,v_amount,v_moneytype,key MD5字符串示例: 20050320-2000400-0000012342012.340key 用MD5函数加密上述字符串后得到的值如果和v_md5str值相等即表明返回的信息没有被纂改 | |
订单总金额 | v_amount | 订单实际支付金额 | |
币种 | v_moneytype | 订单实际支付币种 | |
备注字段1 | remark1 | ||
备注字段2 | remark2 |
表3
2.3.网银在线支付 >>>商户(服务器返回)
用途:支付完成后,从网银在线支付平台服务器返回给商户支付结果信息
示例程序:AutoReceive.asp、AutoReceive.php、AutoReceive.jsp
信息格式同2.1.2
接口说明:
每一笔支付订单支付完成后,网银在线服务器会发送支付结果信息到商户接口程序,该程序根据订单的校验信息正确如否返回“ok”或者“error”字符串。网银在线服务器在收到“ok”字符串后就不再发送该订单的支付结果信息,否则会自动按照3至4分钟的间隔频率重复发送该支付结果信息。
注意事项:
1.商户接口程序接收网银在线返回的支付结果信息时必须验证订单的实际支付金额是不是和商户自己的系统中原始订单金额一致。
2.2.1.3接口方式为可选项,商户只需要开发2.1.1和2.1.2两个接口程序就可以完成全部的支付过程。
3.使用2.1.3接口方式时,服务器返回的信息不带任何Session和Cookie
4.2.1.3接口程序只能输出字符串“ok”或者“error”,不能有其他任何输出(包括空格、空行)。
5.2.1.3接口程序开发完成后,商户需要通知网银客服来设置该程序的URL地址。
6.2.1.3接口程序实时返回银行状态,例如消费者在工商银行支付时输错密码,工商银行会返回支付失败的信息,然后该消费者输入了正确的密码,工商银行又会返回支付成功的信息,所以2.1.3接口程序会先返回一个支付失败的信息,然后返回一个支付成功的信息。
2.4.网关错误编码表
用途:在接入网关时,可以提示消费者或开发人员接口出现的问题,以便开发人员及时发现问题的出处。
错误码 | 错误消息 |
100100 | 错误异常 |
100101 | 服务资源未找到,请稍后重试 |
100900 | 抱歉,出现未预期的异常 |
200901 | 不支持的安全方式,参数有误 |
200902 | 安全验证,加密出现异常 |
200903 | 数据签名验证未通过 |
201001 | 工行验证返回签名未通过,可疑银行交易 |
201002 | 安全验证,中行MD5验证出现错误 |
201005 | 服务拒绝,CCB签名验证错误 |
201006 | 服务拒绝,CBP签名验证错误 |
201007 | 服务拒绝,CMB签名验证错误 |
201008 | 服务拒绝,CMBC签名验证错误 |
201009 | 服务拒绝,COMM签名验证错误 |
201010 | 服务拒绝,广发行签名验证错误 |
201011 | 服务拒绝,广银联签名验证错误 |
201012 | 服务拒绝,深发展签名验证错误 |
201101 | MASTER验证 |
201102 | VISA订单数据验证错误 |
201103 | JCB外卡验证错误 |
201104 | 安全验证VE ,验证失败 |
201105 | 安全验证失败 |
201106 | 服务暂停,该号列入风险控制,交易存在风险 |
201107 | 商户外卡支付要求3D验证 |
201108 | 存在未知风险,或风险未明确定义 |
201109 | 验证异常,存在风险,请稍后重试 |
201110 | 支付超出日限额,受风险控制 |
201111 | 支付次数过多,已列入风险控制中,请改日继续支付 |
201112 | 支付单笔超出限额 |
201113 | 超出单一IP支付次数 |
201114 | 商户已列入黑名单控制 |
201300 | 安全验证,VE验证失败 |
300800 | 缺少必要的服务参数 |
500700 | 参数错误,订单不能保存 |
500701 | 请求非法,订单不存在 |
500702 | 服务拒绝,该服务未提供 |
500703 | 商户找不到,请确认已注册 |
500704 | 非正常商户状态 |
500705 | 订单支付信息未找到 |
500706 | 操作失败,状态更新失败 |
500708 | 参数错误,该商户ID不存在 |
500709 | 商户未开通外卡支付 |
500710 | 该商户未启用支付直通服务,错误的服务编码 |
500800 | 错误的数据格式,不能解析 |
500902 | 参数错误,缺少订单号 |
500903 | 参数错误,订单号过长 |
501101 | 服务拒绝,重复的服务请求 |
501102 | 重复的服务请求 |
501103 | 参数错误,订单号不能空 |
501104 | 参数错误,请填写金额 |
501105 | 参数错误,支付结果处理失败 |
501106 | 服务可疑,支付结果金额不一致 |
501107 | 服务超时中止,订单不存在 |
501108 | 提交的参数有误 |
501109 | 缺少必要的参数或参数不能识别 |
501110 | 币种参数有误,不支持该币种 |
501111 | 缺少必要返回参数idx ,服务不能识别 |
501112 | 参数错误,非法金额参数 |
501113 | 参数错误,金额超出范围 |
501114 | 参数错误,金额不能为0 |
501115 | 返回地址过长 |
501116 | 错误的返回地址格式 |
501117 | 订单名称过长 |
501118 | 订单域信息超出定义长度 |
501119 | 订单自定义服务项过长 |
501120 | EMAIL地址不能空 |
501121 | 无效的EMAIL地址 |
501122 | 无效的手机号码 |
501123 | 提供的消息内容过长 |
501124 | 该订单未支付 |
501125 | 该订单支付状态失败 |
501126 | 无效订单状态,服务拒绝 |
501127 | 该订单已经支付成功,请勿重复支付 |
501128 | 该订单已被禁止支付 |
501129 | 邮政编码格式错误 |
501130 | 购买的商品列表过多,请分次购买 |
501131 | 无效订单,或者订单参数不能识别 |
501132 | 该支付不支持此支付金额,无效金额 |
501133 | 不能识别的订单版本号 |
501604 | 服务拒绝,服务未开通 |
511101 | 安全验证,订单验证失败 |
511601 | 服务拒绝,错误服务编号或者该服务未开通 |
511602 | 服务拒绝,请求的服务已经中止 |
511603 | 服务拒绝,服务未激活 |
601000 | 中行网络故障,服务不能提供 |
601001 | 请求银行数据签名失败,服务中止 |
601002 | 银行网络故障,服务不能提供 |
601003 | 请求交通银行数据签名失败,服务中止 |
601300 | 通信超时或服务拒绝 |
601301 | 服务拒绝 |
601302 | 该信用卡未在发卡行开通3D验证服务 |
601303 | 发卡行无法对该卡认证 |
601304 | 支付验证失败,支付取消 |
601305 | 支付验证失败,请稍后重试 |
601306 | 持卡人认证失败 |
601307 | 持卡人未能成功认证或认证存在风险 |
601308 | 与收单行通信失败,稍后重试 |
601500 | 商户支付服务已经停止使用 |
601600 | 请求数据时网络故障,稍后重试 |
700000 | 您的操作超时,请重新选择支付服务 |
700001 | 该订单多次提交,已禁止继续支付 |
700002 | 支付结果处理失败,请与客服联系 |