http://www.ChinaPay.com NetPayClient用户手册
5. 退款
5.1. 目标
目前ChinaPay采用的退款方式很多,而本章节主要指导ChinaPay的会员商户通过单笔退款方式接入退款系统,以方便商户针对通过ChinaPay网上支付成功的交易进行退款。
5.2. 处理流程
5.3. 接入方法
5.3.1. 接入地址
ChinaPay的单笔退款服务采用WEB服务的方式允许商户接入,接收交易数据的地址为: 测试环境:http://payment-test.chinapay.com/refund/SingleRefund.jsp 生产环境:https://bak.chinapay.com/refund/SingleRefund.jsp
5.3.2. 接入版本
5.3.2.1 退款版本 20070129
? 单笔退款提交数据内容
商户向ChinaPay的支付接入地址提交订单信息,提交页面中表单(FORM)的应该包括如下(注意各字段的大小写):
说明:
TransType为退款类型,0002表示首次全额退款,如果提交的退款金额与原订单的交易金额不相同则拒绝该笔退款。0012表示当不能确定该笔退款是否成功接收时候可以发起,如果该笔退款没有成功接收,则会按照0002的方式处理记录,否则会给出已经成功记录的提示。0102表示部分退款,如果退款金额和原订单支付金额相同则会拒绝该笔退款。0112表示当不能确定该笔退款是否成功接收时候发起,如果该笔退款没有成功接收,则会按照0102的方式处理记录,否则会给出已经成功记录的提示。
ReturnURL为退款应答,此域段内容为选填,如果商户需要在退款成功和失败的时候获得变动的通知,则需要填写该域段。
Priv1 为商户私有域,必输,要求由商户自己定义内容,但是不能重复,为了避免退款的重复提交,因此会验证此域段内容是否有重复来确定已经提交过了,如果提交过则认为该笔退款已经接收不再处理。
? 交易数据的数字签名
商户发送给ChinaPay的交易数据均需要进行数字签名。对于版本号为20040916的签名数据使用客户端NetPayClient的“对一段字符串的签名函数”。方法名称为:
NetPayClient for Java :sign (详细内容参见3.5.2章节) NetPayClient for Win32 :sign(详细内容参见3.5.3章节) NetPayClient for C :signData (详细内容参见3.5.4章节)
说明:
对于版本为20070129的退款数字签名采用的是对一段字符串的签名,因此在签名的时候需要按照
一定顺序拼接字符串,顺序如下表:
MerID TransDate TransType OrderId RefundAmount Priv1 ? 退款应答数据的内容
ChinaPay服务器端程序在处理完退款请求之后即时地会返回给商户“退款接受”的应答,当该笔退款的状态变更为“退款成功”和“退款失败”时也会返回给商户对应的应答。
成功应答格式为(注意大小写): ResponseCode=value0&MerID=value1&ProcessDate=value2&SendTime=value9&TransType=value3&OrderId=value4&RefundAmout=value5&Status=value6&Priv1= value7&CheckValue=value8 失败应答格式为(注意大小写):
ResponseCode=value0&Message=message_string
说明:
通过ResponseCode可以判断查询是否成功。查询成功ResponseCode的值为0,查询失败则为其它错误码(见附录B的查询,单笔退款错误代码章节)。
第 27 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
成功应答各域段名称含义: ResponseCode : 应答码,成功时为0 MerID:商户代码 (15位数字) ProcessDate: CP的处理日期 (8位数字)
SendTime: CP发送该应答时间(该域段不参与数字签名) (6位数字,格式hhmmss) TransType:交易类型(4位数字) OrderId:原始订单号 (16位数字) RefundAmout:退款金额 (12位数字)
Status:该笔退款状态 (内容见下表)(1位数字字符)
1 3 8 退款提交成功 退款成功 退款失败 Priv1: 商户私有域 (最长40位字符) Checkvalue:签名验证(256位字符) 失败应答各域段名称含义:
ResponseCode : 应答码 (失败应答为3位数字) Message:应答码的中文含义
? 应答数据的签名验证
当商户退款提交成功,或当退款状态变为退款失败以及退款成功地时候(前提是商户在提交退款时候填写了ReturnURL),会给商户一个应答数据。商户接收到的应答数据,需要对其验证签名以确定是由ChinaPay发出的应答数据。使用的客户端NetPayClient的“对一段字符串的签名验证函数”。方法名称为:
NetPayClient for Java :verifyAuthToken (详细内容参见3.5.2章节) NetPayClient for Win32 :checkData (详细内容参见3.5.3章节) NetPayClient for C :verifySignData (详细内容参见3.5.4章节)
说明:
对于版本为20070129的退款应验证签名采用的是对一段字符串的签名验证,因此在签名的时候需
要按照一定顺序拼接字符串,顺序如下表: MerID ProcessDate TransType OrderId RefundAmount Status Priv1 第 28 页 共 27 页
http://www.ChinaPay.com NetPayClient用户手册
6. 查询
6.1. 目标
对于已经提交给ChinaPay的交易,除了在商户控制台的交易明细,也可以通过查询服务来处理,而本章节主要指导ChinaPay的会员商户查询方式接入退款系统,以方便商户对交易进行查询。
6.2. 处理流程
6.3. 接入方法
6.3.1. 接入地址
ChinaPay的单笔查询服务采用WEB服务的方式允许商户接入,接收交易数据的地址为: 测试环境:http://payment-test.chinapay.com/QueryWeb/processQuery.jsp 生产环境:http://control.chinapay.com/QueryWeb/processQuery.jsp
另外需要额外说明的是对于查询服务器我们采用了流量控制的方式来进行服务,需要满 足以下条件:
? 只对开放查询交易的商户指定的IP地址访问的请求响应,并且前后
两次成功查询间隔在系统设置的时间间隔之外的查询请求才被接纳,否则会报告商户请求非法的错误(错误代码111)。
? 在一定的时间内查询的交易为失败状态的次数不能超过一定的笔数,否则
会报告超出流量控制的错误(错误代码305)。
因此商户开通单笔查询时需要提供查询使用的服务器的公网IP地址以及商户号。
6.3.2. 接入版本
6.3.2.1 查询版本 20060831(单笔查询)
? 单笔查询提交数据内容
商户向ChinaPay的支付接入地址提交订单信息,提交页面中表单(FORM)的应该包括如下(注意各字段的大小写):
? 交易数据的数字签名
商户发送给ChinaPay的交易数据均需要进行数字签名。对于版本号为20060831的签名数据使用客户端NetPayClient的“对一段字符串的签名函数”。方法名称为:
NetPayClient for Java :sign (详细内容参见3.5.2章节) NetPayClient for Win32 :signData(详细内容参见3.5.3章节) NetPayClient for C :signData (详细内容参见3.5.4章节)
说明:
对于版本为20060831的查询数字签名采用的是对一段字符串的签名,因此在签名的时候需要按照
一定顺序拼接字符串,顺序如下表:
MerID TransDate OrderId TransType
? 查询应答数据的内容
ChinaPay服务器端程序在处理完查询请求之后即时地会返回给商户查询结果的应答。
成功应答格式为(注意大小写): ResponeseCode=value1&merid=value2&orderno=value3&amount=value4¤cycode=value5&transdate=value6&transtype=value7&status=value8&checkvalue=value9&GateId= value10&Priv1= value11 失败应答格式为(注意大小写):
ResponeseCode=value0&Message=message_string
说明:
通过ResponeseCode可以判断查询是否成功。查询成功ResponseCode的值为0,查询失败则为其它错误码(见附录B的查询,单笔退款错误代码章节)。 成功应答各域段名称含义:
ResponeseCode: 应答码,成功时为0 merid:商户代码 (15位数字) orderno:查询订单号 (16位数字) amount:交易金额 (12位数字)
第 30 页 共 27 页