Appearance
概述
编写目的
- 本文档为使用金运通互联网支付网关的商户开发者编写
- 本文档为金运通互联网支付网关的开发者和相关人员提供有效的指引和帮助
- 本文档的目标读者为技术人员
定义
术语 | 说明 |
---|---|
网关系统 | 主要处理客户系统的支付请求,由网关产品提供 |
银行网关 | 银行系统 |
交易订单 | 由交易系统产生,主要用于处理交易系统和网关系统之间的交互 |
通知 | 服务器异步通知。支付平台根据得到的数据处理完成后,支付平台的服务器主动发起通知给商户的网站,同时携带处理完成的结果信息反馈给商户网站。 |
返回 | 页面跳转同步通知。支付平台根据得到的数据处理完成后,当前页面从支付平台的页面自动跳转回商户的网站,同时携带处理完成的结果信息反馈给商户网站。 |
付款 | 交易进行后,买家向卖家付款 |
商户合作程序
- 商户与金运通签订商户接入协议,金运通为商户在金运通支付网关系统开户。
- 金运通为该商户提供测试环境地址、商户号、密钥KEY值,同时向商户提供支付网关的开发包与接入开发指南。
- 商户系统加载开发包,完成客户端开发并与金运通支付网关测试系统进行联机测试。
- 金运通为商户参数配置
1)分配商户号;
2)开通网关支付业务;
3)生成支付密钥;
4)其他支付参数。 - 投入生产
- 清算结算及差错处理
- 报表下载。
商户对接说明
1.目前测试环境金额只支持0.12-2.00元;
2.如果商户要明确指定卡类型,就在接口里指定,否则跳转到我方页面选择银行进行支付;
3.我方目前只支持借贷分离支付。
4.调用接口时,只需要传接口声明的字段。签名和验签时,都只需要对接口中字段进行。
5.通知地址,要配置能够外网访问的通知地址。
网关支付流程
客户在商户网站选择商品,商户网站创建一个订单支付请求,支付参数采用HTTP表单(FORM)方式提交;
客户点击支付按钮,将订单发送到金运通支付网关的支付页面;
支付网关验证订单支付请求,显示支付页面;
客户在支付页面上选择银行支付;
支付网关把客户浏览器转发到网银系统完成支付;
支付网关接收到网银系统的支付结果,如果成功,网关根据商户支付订单请求中的backUrl数据配置发送支付结果信息给商户网站。
页面通知处理流程
持卡人付款成功后,支付网关接收到银行通知支付结果;
支付网关根据商户提交的支付请求中的backUrl 参数,从网关服务器发起到商户网站的 backUrl的请求;
商户网站接收到连接请求,处理对应的订单结果,返回取货地址;
支付网关从商户网站返回的结果中解析得到取货地址,把客户的浏览器转向到此取货地址;
如果商户网站没有返回取货地址,则把客户的浏览器转向到backUrl地址;
后台支付结果通知
金运通根据商户提交的notifyUrl,会发起后台通知。商户处理完自身平台订单以后,为了表示商户订单系统已经收到交易应答,商户必须向金运通响应S0000000,则认为商户处理成功,如果为其他信息,则认为通知失败,进入商户异常重复通知队列。
后台通知重试次数为6次,每次间隔1分钟,3分钟,5分钟,15分钟,30分钟,60分钟通知。
网关支付平台接入
接入方式
POST/GET方式
接入参数
接入参数由协议参数和业务参数共同组成,业务接口中会介绍每个业务接口的输入/输出参数。
参数签名机制
- 为了确保数据传输过程中的数据真实性和完整性,我们需要对数据进行签名校验。
- HTTP 请求中传递的所有接口声明参数(除sign外)构成待签名数据。按照signType指定的方式对待签名数据进行签名。
- 下面以调用立即支付接口为例,阐述生成服务url的全过程。
- 签名方式分为:SHA256和SM3,以下默认SHA256处理方式
SHA256 签名方式
步骤一:按照对应服务的接口类型,准备输入参数:
md
tranCode=TN1001
version=1.0.0
charset=utf-8
uaType=00
merchantld=CF2000000100merOrderld=p-diao-20160317184211
merTranTime=20160317184211
merUserld=diao0101
orderDesc=模拟接口支付
prodlnfo=商品名称
prodDetailUrl=http://item.jd.com/1217524.html
tranAmt=0.20
curType=CNY
payMode=00
bankCode=
bankCardType=
notifyUrl=http://192.168.50.35:8080/netpayDemo/mer/payment-notify.do
backUrl=http://192.168.50.35:8080/netpayDemo/mer/payment-notify.do
validTime=
reservel=
reserve2=
signType=SHA256
步骤二:生成原始待签名字符串。生成原则:
没有值的参数需要传递,但是无需包含到待签名数据中。
用于签名的原始字符串的参数拼接顺序,遵循按字段名称ASCII升序原则,最后以key=value8lkey=value......key=value形式拼接成原始待签名字符串。
那么原始待签名字符串为:
md
backUrl=http://192.168.50.35:8080/netpayDemo/mer/payment-notify.do&charset=utf-8&curType=CNY&merOrderId=p-diao-20160317184211&merTranTime=20160317184211&merUserId=diao0101&merchantId=CF2000000100¬ifyUrl=http://192.168.50.35:8080/netpayDemo/mer/payment-notify.do&orderDesc=模拟接口支付&payMode=00&prodDetailUrl=http://item.jd.com/1217524.html&prodInfo=商品名称&signType=SHA256&tranAmt=0.20&tranCode=TN1001&uaType=00&version=1.0.0
步骤三:生成待签名字符串
待签名字符串=原始待签名字符串+key,即为:
md
backUrl=http://192.168.50.35:8080/netpayDemo/mer/payment-notify.do&charset=utf-8&curType=CNY&merOrderId=p-diao-20160317184211&merTranTime=20160317184211&merUserId=diao0101&merchantId=CF2000000100¬ifyUrl=http://192.168.50.35:8080/netpayDemo/mer/payment-notify.do&orderDesc=模拟接口支付&payMode=00&prodDetailUrl=http://item.jd.com/1217524.html&prodInfo=商品名称&signType=SHA256&tranAmt=0.20&tranCode=TN1001&uaType=00&version=1.0.03e1832e08bf84bb6d93156b60ab215d5
步骤四:计算签名值:sign=SHA256(待签名字符串)
md
31cfc9539741d5cc1398e01e916ff3d07add58d1b19dc3b31a0351bc0cc53f20
步骤五(一):使用http get方式提交数据。拼接服务url。原则:
根据HTTP协议要求,传递参数的值中如果存在特殊字符(如:&、@、中文等),那么该值需要做URL Encoding(编码格式为utf-8),这样请求接受方才能接收到正确的参数值。
步骤五(二):使用http post方式提交数据。例子如下:
html
<form name='payOrderForm' id="payOrderForm" method='post' action='https://netpay.jytpay.com/JytNetpay/pa
yment.do'>
<input name='tranCode' type='hidden' value='TN1001'>
<input name='version' type='hidden' value='1.0.0'>
<input name='charset' type='hidden' value='utf-8'>
<input name='uaType' type='hidden' value='00'>
<input name='merchantId' type='hidden' value=CF2000000100>
<input name='merOrderId' type='hidden' value='p-diao-20160317184211'>
<input name='merTranTime' type='hidden' value='20160317184211'>
<input name='merUserId' type='hidden' value='diao0101'>
<input name='orderDesc' type='hidden' value='模拟接口支付'>
<input name='prodInfo' type='hidden' value='商品名称'>
<input name='prodDetailUrl' type='hidden' value='http://item.jd.com/1217524.html'>
<input name='tranAmt' type='hidden' value='0.20'>
<input name='curType' type='hidden' value='CNY'>
<input name='payMode' type='hidden' value='00'>
<input name='bankCode' type='hidden' value=''>
<input name='bankCardType' type='hidden' value=''>
<input name='notifyUrl' type='hidden' value='http://192.168.50.35:8080/netpayDemo/mer/payment-notify.do'>
<input name='backUrl' type='hidden' value='http://192.168.50.35:8080/netpayDemo/mer/payment-notify.do'>
<input name='validTime' type='hidden' value=''>
<input name='reserve1' type='hidden' value=''>
<input name='reserve2' type='hidden' value=''>
<input name='signType' type='hidden' value='SHA256'>
<button>提交</button>
</form>