本开发文档的阅读对象为:具有一定开发能力,了解PHP、JAVA、.NET等开发语言的开发、维护或管理人员。

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。

版本号 更新说明 更新日期
V1.0 创建 2018.02.06
  1. 商户会员号

    Chinapnr网关支付时提交的为商户会员号,并非商户号,会员号=商户号+"01"(如商户号为abc时,会员号为abc01)

商户接入Chinapnr网关支付时,调用API须遵循以下规则:

传输方式 为保证交易安全性,采用 HTTPS 传输
提交方式 采用 POST 方法提交
数据格式 HTTP KEY=VALUE 格式
字符编码 支持 UTF-8 字符编码
签名算法 商户生成签名字符串,现支持的签名算法类型为 RSA-SHA1
签名要求 请求和接收数据均需要校验签名

场景介绍

聚合支付宝、微信扫码支付、快捷支付、网银支付适用于PC端。

微信公众号支付,微信小程序支付,微信APP支付,H5形式的快捷支付。 适用于移动端。

第一步:用户击进入商户网页购物进行支付

图3.0 商户移动端下单

第二步:商户调用聚合支付,返回付款二维码给用户。用户使用微信/支付扫码支付完成。

第三步:支付成功,商户后台得到支付成功的通知。并且Chinapnr返回商户页面,显示购买成功。该页面由商户自定义。

图3.3 返回商户页面

概述

本文档展示了如何从零开始,与Chinapnr跨境聚合支付对接的流程。

第一步:获取账号信息

  1. 商户需与前端销售沟通开通测试账号或生产账号,并提供接受邮箱地址。

  2. 1-2个工作日内由开通组负责将开通的账号信息发送至商户邮箱。

第二步:配置密钥

  1. 开发者调用接口前需要先生成RSA密钥,RSA密钥包含私钥、公钥。生成密钥后在商户后台进行密钥配置,配置完成后可发起交易。详细步骤请参考配置秘钥

第三步:搭建和配置开发环境

  1. 下载示例代码Demo
    为了帮助开发者调用开放接口,我们提供了示例代码下载,包含JAVA、PHP和.NET三语言版本,封装了签名&验签、HTTP接口请求等基础功能。请先下载对应语言版本的Demo并引入您的开发工程下载地址

  2. 将Demo运行成功,并将代码集成到您的项目中,记得修改商户号,终端号,和私钥证书。如生产环境,还需更换Chinapnr生产公钥证书。

调用流程

接口调用时序图:

图4.1 聚合支付调用时序图

  1. 用户(交易过程中的买家或实际支付人,以下简称用户)在商户(交易过程中的卖家或者电商平台,以下简称商户)网站下单完毕后确认进行在线支付。

  2. 用户点击确认按钮后,商户系统收集订单信息并通过《跨境聚合支付接口》下单接口向汇付天下(以下简称汇付)发起支付请求。

  3. 汇付对商户的支付请求进行处理并返回支付二维码.

  4. 用户扫描二维码完成支付。

  5. 支付结果页面跳转到汇付后,汇付会进行相关处理,并继续将页面跳转到由商户提供的支付结果页面,汇付在跳转时所携带的参数请参照《跨境聚合支付接口》中的返回参数章节。

  6. 商户系统根据收到的支付结果进行相应的展示,告知用户该笔订单的支付结果。

  7. 同时汇付系统会在后台通过支付结果通知接口通知商户系统该笔订单的支付结果,该地址不能与第6步中提供的支付结果页面地址相同。 后台通知以收到商户系统返回的http状态码200表示成功,否则将继续通知,如果连续通知10次仍不成功将停止通知。

注意:为确保安全,商户在收到汇付支付结果通知后,务必先验证返回的签名字段。

概述

Chinapnr开放平台采用了 RSA 安全签名机制,开发者可以通过Chinapnr公钥验证消息来源,同时可使用自己的私钥对信息进行加密。RSA 算法及数字签名机制是Chinapnr平台与开发者网关安全通信的基础,若开发者不熟悉 RSA 及数字签名,请先查阅相关资料。

RSA 私钥及公钥生成

1. 生成 RSA 私钥及公钥,请详见“附录一:私钥公钥生成及范例”。 生成的文件格式如:客户私钥private-rsa.pfx,客户公钥public-rsa.cer。

商户上传公钥

注意:

  1. 上传商户公钥前需先联系前端获取商户后台账号和密码,并将客户公钥public-rsa.cer文件前缀名称修改为商户号。 如开通的商户号为10012159865,则证书修改为10012159865.cer上传。

商户平台登录地址 测试环境 / 生产环境进入Platform Management菜单Certificate Management菜单,转入如下界面:

图5.1 上传公钥

在证书管理,输入邮箱,点击Do Upload上传证书。页面提示上传成功,证书列表中可以查看新增证书,状态为1有效。

下载Chinapnr公钥

点击Download下载系统公钥用于接收跨境系统返回时验签。

图5.2 下载Chinapnr公钥

注意:

不同环境Chinapnr公钥证书需在不对环境的商户后台下载。

接口参数说明请参见《跨境聚合支付接口》

API请求

Chinapnr开放平台的OpenAPI调用采取POST方式(application/x-www-form-urlencoded),内容通过键值对(Key-Value)的形式作为参数传入。

请求示例:

pageUrl=http://127.0.0.1:8081/QAMOCK-Test/notifyReceiverPg.do
signType=4
refererUrl=http://www.baidu.com
settlementCurrency=CNY
version=4.0
inputCharset=1
customerId=1001
bgUrl=http://127.0.0.1:8081/QAMOCK-Test/notifyReceiverBg.do
inquireTrxNo=
orderAmount=600
productNum=1
payerContactType=2
orderId=20170821175929871
payerIdentityCard=320125198805232313
merchantAcctId=1001215986501
terminalId=0020001
orderCurrency=CNY
divDetails=
payerContact=15800000000
orderTime=20170821175928
customerIp=127.0.0.1
productId=100003
productDesc=IPHONE6港版								
ext1=ext1
ext2=ext2
signMsg=TgPPi15HAgjVvjeRl8WH7tFL8DCWfaIQFUhxYjPenuaYz6JwVv9ExpCEckBcp9oMfkipTSOTMtaP2UYf3UUfe+kXiBr5OSML3chY5ZRHYTDKQ+NZKYY+yK7tZHQ6bNEvC3nG3cD+emeJj9oIoG6+AAlxxPtEuuzy+I+CzwWEI5E=
payType=30
language=1
mobileNumber=15811111111
orderTimeout=60
productName=IPHONE6
payerName=张三
cardNumber=6228480402564890018
redoFlag=1
								

在提交参数中需要对传入的数据进行签名组成signMsg字段,签名方法如下:

1.将所有非空参数(sign除外)按照signMsg签名串:

inputCharset={inputCharset}&pageUrl={pageUrl}&bgUrl={bgUrl}&version={version}&language={language}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&payerName={payerName}&payerContactType={payerContactType}&payerContact={payerContact}&payerIdentityCard={payerIdentityCard}&mobileNumber={mobileNumber}&cardNumber={cardNumber}&customerId={customerId}&orderId={orderId}&inquireTrxNo={inquireTrxNo}&orderCurrency={orderCurrency}&settlementCurrency={settlementCurrency}&orderAmount={orderAmount}&orderTime={orderTime}&productName={productName}&productNum={productNum}&productId={productId}&productDesc={productDesc}&ext1={ext1}&ext2={ext2}&payType={payType}&refererUrl={refererUrl}&customerIp={customerIp}&orderTimeout={orderTimeout}&divDetails={divDetails}&redoFlag={redoFlag}

按顺序用&连接起来组成字符串,格式是:p1=v1&p2=v2。如:

								inputCharset=1&pageUrl=http://127.0.0.1:8081/QAMOCK-Test/notifyReceiverPg.do&bgUrl=http://127.0.0.1:8081/QAMOCK-Test/notifyReceiverBg.do&version=4.0&language=1&signType=4&merchantAcctId=1001215986501&terminalId=0020001&payerName=张三&payerContactType=2&payerContact=15800000000&payerIdentityCard=320125198805232313&mobileNumber=15811111111&cardNumber=6228480402564890018&customerId=1001&orderId=20170821174125189&orderCurrency=CNY&settlementCurrency=CNY&orderAmount=600&orderTime=20170821174110&productName=IPHONE6&productNum=1&productId=100003&productDesc=IPHONE6港版&ext1=ext1&ext2=ext2&payType=30&refererUrl=http://www.baidu.com&customerIp=127.0.0.1&orderTimeout=60&redoFlag=1
								

2.进行RSA签名后获得sign,再经过Base64编码,具体加签代码 demo,最终的请求报文样式参考如下:

REQUEST URL: https://global.chinapnr.com/pay/recvquickpay.htm
REQUEST METHOD: POST
CONTENT:
pageUrl=http://127.0.0.1:8081/QAMOCK-Test/notifyReceiverPg.do
signType=4
refererUrl=http://www.baidu.com
settlementCurrency=CNY
version=4.0
inputCharset=1
customerId=1001
bgUrl=http://127.0.0.1:8081/QAMOCK-Test/notifyReceiverBg.do
inquireTrxNo=
orderAmount=600
productNum=1
payerContactType=2
orderId=20170821175929871
payerIdentityCard=320125198805232313
merchantAcctId=1001215986501
terminalId=0020001
orderCurrency=CNY
divDetails=
payerContact=15800000000
orderTime=20170821175928
customerIp=127.0.0.1
productId=100003
productDesc=IPHONE6港版
ext1=ext1
ext2=ext2
signMsg=TgPPi15HAgjVvjeRl8WH7tFL8DCWfaIQFUhxYjPenuaYz6JwVv9ExpCEckBcp9oMfkipTSOTMtaP2UYf3UUfe+kXiBr5OSML3chY5ZRHYTDKQ+NZKYY+yK7tZHQ6bNEvC3nG3cD+emeJj9oIoG6+AAlxxPtEuuzy+I+CzwWEI5E=
payType=30
language=1
mobileNumber=15811111111
orderTimeout=60
productName=IPHONE6
payerName=张三
cardNumber=6228480402564890018
redoFlag=1
								

注意:

  1. 没有值的参数无需传递,也无需包含到待签名数据中。

  2. 签名时将字符转化成字节流时指定的字符集UTF8。

  3. 根据HTTP协议要求,传递参数的值中如果存在特殊字符(如:&、@等),那么该值需要做URL Encoding,这样请求接收方才能接收到正确的参数。此时,待签名数据应该是原始值而不是encoding之后的值。 例如:调用某接口需要对请求参数 email 进行数字签名,那么待签名数据应该是:email=test@abc.com,而不是 email=test%40abc.com。

返回结果

返回示例:

dealTime=20170821180822
errCode=000000
merchantAcctId=1001215986501
orderTime=20170821180751
orderCurrency=CNY
dealId=1000015038
version=4.0
bankId=ccb
terminalId=0020001
payResult=10
ext1=ext1
orderAmount=600
ext2=ext2
signMsg=K+TAl+GOx89Pu27KqLfgLvfTZc2T491Mn8f6hO5xFxsJL/sgtsgM7/cwpJCxZJMEJE/wg5M30PKB6XKc/7BSrPlYtKUbbb0xm5Pi1btbKCprl/y/xYjg1JWaKpmQKv/kYobNd2LZFssA6TOTUQn3x9+wEK0N9Z/dUo+ISLNRbW0=
payType=30
orderId=20170821180758470
								

调用Chinapnr开放平台接口后,Chinapnr会向开发者提交的pageUrl地址同步返回支付结果。为保证信息安全,会经Chinapnr私钥进行RSA加密,开发者收到消息后可通过ChinapnrRSA公钥进行解密。

1.将所有返回参数(signMsg除外)按照signMsg验签串按顺序拼接:

bankDealId={bankDealId}&bankId={bankId}&dealId={dealId}&dealTime={dealTime}&errCode={errCode}&ext1={ext1}&ext2={ext2}&merchantAcctId={merchantAcctId}&orderAmount={orderAmount}&orderCurrency={orderCurrency}&orderId={orderId}&orderTime={orderTime}&payResult={payResult}&payType={payType}&terminalId={terminalId}&version={version}

组成待验签字符串,如:

bankId=ccb&dealId=1000015038&dealTime=20170821180822&errCode=000000&ext1=ext1&ext2=ext2&merchantAcctId=1001215986501&orderAmount=600&orderCurrency=CNY&orderId=20170821180758470&orderTime=20170821180751&payResult=10&payType=30&terminalId=0020001&version=4.0

2.将签名参数(signMsg)使用base64解码为字节码串

3.使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及Chinapnr公钥验证签名。具体验签方法 请详见Demo

支付完成后,Chinapnr会向开发者提交的bgUrl地址后台异步返回支付结果。商户处理支付结果以支付结果通知结果为准。

接口返回参数说明请参见《跨境聚合支付接口》

支付结果通知

支付结果通知示例:

dealTime=20170821180822
errCode=000000
merchantAcctId=1001215986501
orderTime=20170821180751
orderCurrency=CNY
dealId=1000015038
version=4.0
bankId=ccb
terminalId=0020001
payResult=10
ext1=ext1
orderAmount=600
ext2=ext2
signMsg=MnUsvrgsAS0ywOsp0w%2Fr1ihlfBLY3fHjBrhevejUosPC2hC7CFsmflv3LdWxKmYXDUUSJpYw7XxMwNUiwwZGO3hLLaVvUJKJeGWOrQ4E3LnKWqxgmiGeDyttKq2UJhvT7O067Rll%2BQDfaE254GLxzztgdjFNJMESoxLw2ckOLE8%3D
payType=30
orderId=20170821180758470
								

支付结果通知的验签

1.将所有返回参数(signMsg除外)按照signMsg验签串按顺序拼接:

bankDealId={bankDealId}&dealId={dealId}&dealTime={dealTime}&errCode={errCode}&ext1={ext1}&ext2={ext2}&merchantAcctId={merchantAcctId}&orderAmount={orderAmount}&orderCurrency={orderCurrency}&orderId={orderId}&orderTime={orderTime}&payResult={payResult}&payType={payType}&terminalId={terminalId}&version={version}

组成待验签字符串,如:

dealId=1000015038&dealTime=20170821180822&errCode=000000&ext1=ext1&ext2=ext2&merchantAcctId=1001215986501&orderAmount=600&orderCurrency=CNY&orderId=20170821180758470&orderTime=20170821180751&payResult=10&payType=30&terminalId=0020001&version=4.0
							

2.将签名参数signMsg和拼接的验签字符串进行URLDecoder。

如C#代码,signMsg为通知中的signMsg字段,signMsgVal为拼接的验签串:
String signMsgDecode = HttpUtility.UrlDecode(signMsg);
String signMsgValDecode = HttpUtility.UrlDecode(signMsgVal);

3.将URLDecoder后的签名参数(signMsg)使用base64解码为字节码串。

4.使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及Chinapnr公钥验证签名。具体验签方法 demo

商户业务处理注意事项

1.商户必须根据Chinapnr不同类型的业务通知,正确的进行不同的业务处理,并且过滤重复的通知结果数据。

2.Chinapnr异步通知以通知地址返回HTTPSTATUS为200认为成功,否则会一直通知,通知策略是一共通知15次,前面每隔10s通知一次 一共通知6次每次,后9次通知时间间隔增加(N*60s+30s,N为第几次通知,如第7次通知间隔第一次7min30s)。

3.在Chinapnr的业务通知中,只有交易通知payResult状态为10时,Chinapnr才会认定为买家付款成功。如果商户未正确处理业务通知,存在潜在的风险,商户自行承担因此而产生的所有损失。

货币符号 币别
CNY 人民币
USD 美元
HKD 港元
GBP 英镑
JPY 日元
EUR 欧元
AUD 澳元
CAD 加元
银行代码 银行名称
CMB 招商银行
ICBC 中国工商银行
ABC 中国农业银行
CCB 中国建设银行
BOC 中国银行
SPDB 浦发银行
BCOM 中国交通银行
CMBC 中国民生银行
GDB 广东发展银行
CITIC 中信银行
HXB 华夏银行
SRCB 上海农村商业银行
SRCB 上海农村商业银行
PSBC 中国邮政储蓄银行
BOB 北京银行
CBHB 渤海银行
BJRCB 北京农商银行
NJCB 南京银行
CEB 中国光大银行
CZB 浙商银行
CIB 兴业银行
HZB 杭州银行
PAB 平安银行
SHB 上海银行
code(支付错误代码) msg(支付错误描述)
999999 系统异常
000000 交易处理成功
000009 交易处理失败
110001 必须提交的请求参数未提交
110002 请求的数据项长度不符
110003 请求的数据项格式错误,合法格式请参照接入文档
110004 错误请求
130005 风控拦截
110005 请求的数据项不合法
110006 请求的交易币别暂不支持
200001 订单信息的签名内容不正确
120010 请求的商户号不存在,请检查后重试
120011 请求的商户号状态异常,不允许交易
120012 请求的终端号不存在,请检查后重试
120013 请求的终端号状态异常,不允许交易
120014 产品功能未开通,不允许交易
120023 交易请求Ip未知,不允许交易
120024 支付人Ip在黑名单中,不允许交易
120025 支付人Ip有变化,存在风险不允许交易
120026 支付人链接来源有变化,存在风险不允许交易
120028 未开通任何受理银行,不允许交易
120029 不可受理的银行代码,不允许交易
120030 请求的商户号[{0}]/终端号[{1}]对应的结算信息未开通,不允许交易
120031 请求的商户号/终端号对应的结算币别与交易申请的币别不一致,请更换对应终端后重试
120032 请求的商户号/终端号对应的报价币别与交易申请的币别不一致,请更换对应终端后重试
120034 请求的商户号[{0}]/产品代码[{1}]/币别[{2}]对应的手续费信息未配置,不允许交易
120040 商户订单号重复,请先确认订单状态或重新下单后支付
120050 请求的交易币别[{0}]与结算币别[{1}]不一致
120061 交易金额大于商户最高交易限额
120062 交易金额低于商户最低交易限额
120063 当日交易金额已大于日最高交易限额
120064 无可用的收单通道
120065 目标币别的汇率不存在
120066 交易金额精度超出交易币别的最小单位
120069 支付超时,请重新支付
120070 订单超时,请重新下单
120100 该商户账户异常,已被禁止交易
120101 该商户账户已被冻结,禁止交易
120102 该商户账户功能已被限制,禁止交易
120103 该商户账户已被删除,禁止交易
120110 该商户账户已被止入,禁止交易
120111 该商户账户已被止出,禁止交易
120112 该商户账户已被限制充值,禁止交易
120113 该商户账户已被限制提现,禁止交易
120114 该商户账户已被限制透支,禁止交易
120115 该商户账户已被限制支付,禁止交易
120116 该商户账户已被限制转入,禁止交易
120117 该商户账户已被限制转出,禁止交易
120300 授权商户未开通
120301 授权参数未设值
130001 交易失败,风控拒绝
130002 交易失败,疑似重复交易被拦截
130003 交易失败,产品不在经营范围内
100001 不支持的字符编码格式,系统支持的字符编码格式为1.UTF-8,2.GBK,3.GB2312
100003 页面返回地址和后台返回地址不能同时为空,请使用符合URL规则的http或者https地址
100005 不支持的网关接口版本号
100008 不支持的付款方联系方式,系统支持的联系方式为1.电子邮件,2.电话.当联系内容不为空时联系方式不能为空
100009 付款方的联系内容不正确,请输入合法的联系地址
100091 支付人手机号输入错误
100092 支付人身份信息有误
100010 订单号不正确,系统只支持以字母,数字组合的订单号,最大长度不能超过30
100011 订单金额不正确,请输入以分为单位的金额
100012 订单提交时间不正确,请输入以yyyyMMddhhmmss格式的时间字符串
100013 商品名称不正确
100014 商品数量不正确
100015 商品ID不正确
100016 商品的描述不正确
100017 扩展参数一不正确
100018 扩展参数二不正确
100019 指定的支付方式不正确
100021 指定的银行ID不正确
100022 不支持的语言类型,系统支持的语言为1.中文,2.英文
100023 不支持的签名类型,系统支持的签名类型为1.MD5
100024 客户号格式错误
100025 卡号格式错误
100037 对不起,该订单不允许重复提交,请重新下订单提交!
100054 商户签名数据不能为空
100065 未提供付款人IP地址,请联系商用户网站支持人员
100086 错误的币别代码
200001 订单信息的签名内容不正确
200004 交易金额格式错误
400001 原交易没有找到
400003 原交易可退余额不足
400002 退款币别与原交易不一致
400004 商户结算状态异常,无法退货
400008 商户账户余额不足
400006 超期退货
400007 原交易状态错误
500001 银行系统异常
结果码 含义 说明
10000 业务处理成功

商品编码列表

跨境系统商品类别列表下载

商品编码 中文类名
100200 服饰箱包
100201 食品药品
100202 化妆品
100203 电子产品
100204 日用家居
100205 其他
400200 航空机票
400201 酒店住宿
400202 留学教育
400203 旅游票务
400204 国际物流
400205 国际租车
400206 国际会议
400207 软件服务
400208 医疗服务
400209 通讯
400210 休闲娱乐
228024 广告服务
227020 计算机服务

1.1留学

{
studentInfo: {
“payAddr”:””; ”payType”:””; ”courseType”:””; ”studentCertId”:””; “studentCertType”:””; ”studentCertEndDate”:“”; “studentNo”:””; “subProductCode”:””}
}

字段枚举

字段 枚举值
payType 10:一般学费缴费;
11:学费分期付款;
12:定金/占位费;
13:学费预存;
14:校园生活费;
15:校园住宿费;
16:其他学杂费;
courseType 1、Graduate Programs 研究生课程
2、Undergraduate Programs 本科课程
9、其他课程
studentCertType 00:身份证
01:护照
02:驾照
09:其他证件类型
studentCertEndDate 格式为YYYYMMDD
subProductCode: SA:留学

1.2物流

{
logisticsInfo: {
"subProductCode":""}
}

字段枚举

字段 枚举值
subProductCode LOG:物流

跨境人民币付汇接口:

跨境人民币付汇接口下载

银行受理能力

银行受理能力列表下载

网银

网银支持的银行列表以及对借记卡,信用卡限额的说明。详细可下载银行受理文件

图7.1 网银受理能力表

快捷支付

快捷支付支持的银行列表以及对限额说明。详情的借记卡,信用卡受理能力请下载受理文件查看

注意:有些银行卡需要开通银联在线支付业务:

1、建设银行、中国银行、农业银行、光大、兴业、中信、渤海银行,上述银行卡有卡就能用,功能已默认开通。

2、交通银行、平安、浦发、邮储、上海银行,上述银行卡需通过https://online.unionpay.com/portal/open/init.do?entry=open开通银联在线支付业务。

图7.3 快捷支付受理能力表

银联app

银联app银行与限额:

图7.4 银联app受理能力表

转账支付

转账支付受理能力:

图7.5 转账支付受理能力表

产品集成

  1. 商户需上传唯一的商户订单号(orderId),同时建议商户订单号中包含年月日等时间信息。

  2. 商品ID(productId)需根据商品代码传递,商品名称(productName)需传递。

  3. Chinapnr默认银行支付超时时间12小时,即晚于该订单的最晚付款时间后,将关闭交易。

交易查询

商户可在商户后台进行交易查询,也可通过查询接口查询。

  1. 进入商户后台“交易管理”=>“交易查询”菜单,输入订单号,Chinapnr交易流水号发起查询。

    图6.1 商户后台交易查询

  2. 网关交易在未收到支付结果通知时通过查询接口查询支付结果,查询接口未返回支付成功,则继续轮询。

    详情请参见交易查询接口

退款

商户因业务原因需要退款时,可通过成功交易的商户订单号或Chinapnr交易号进行退款。Chinapnr退款支持单笔交易分多次退款,多次退款需要提交Chinapnr交易号并设置不同的退款单号;总退款金额不能超过用户实际支付金额。

  1. 对接退款接口。

    详情请参见退款接口

对账

商户可通过接口下载指定日期(当天除外)的业务明细账单文件,并结合自身业务系统实现自动对账。

  1. 商户可在商户后台发起日终查询,进入“交易管理”=>“日终交易查询”菜单,选择要查询的交易所对应的终端号,选择日期,点击查询。

    对查询出的日终列表,选择点击下载按钮下载日终对账文件。

    图6.4 商户后台日终文件查询

  2. 对接日终文件查询接口

    详情请参见日终交易查询

DEMO下载

注意:Demo下载后可直接运行,也可将项目里商户号,终端号,私钥证书(**.pfx)更换成已开通测试商户的。

支付模式 说明 平台 操作
聚合支付API 聚合支付API对应的DEMO JAVA 下载
PHP 下载
.NET 下载
GO 下载
单笔交易查询API 单笔交易查询API对应的DEMO JAVA 下载
PHP 下载
.NET 下载
退款API 退款API对应的DEMO JAVA 下载
PHP 下载
.NET 下载
日终交易查询API 日终交易查询API对应的DEMO JAVA 下载
PHP 下载
.NET 下载

文档下载

支付模式 说明 操作
跨境聚合支付API 跨境聚合支付API对应的文档 下载
协议支付API 协议支付API对应的文档 下载

1.订单信息的签名不正确

确保私钥证书正确。

确保加签字段和加签顺序正确,可对照Demo对比

2.订单返回信息验签失败

确保公钥证书正确,与所提交环境匹配,可在对应环境商户后台下载。

确保验签字段和验签顺序正确,可对照Demo对比

3.网关发起交易,报商户号不存在或未开通

网关发起交易时,提交的并非是商户号,而是会员号,会员号=商户号+“01”。

4.TLS1.0 SSL3.0等协议无法正常进行网关交易

根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

5.商户site后台证书上传失败

跟商户确认,证书生成“req -new -x509 -key private-rsa.key -days 750 -out public-rsa.cer,按enter”,这里的天数是不是不符合规范,可以查看site应用日志

测试环境证书过期,麻烦测试环境去掉证书到期的验证,就可以了,不影响验签

6.支付宝,微信支付返回支付失败、银行授权失败?

测试环境按照交易规则进行支付,

收单:交易金额transAmt(0,10000) 交易成功,transAmt[10000,50000) 交易失败

退款:退款金额transAmt(0,50)退款成功; transAmt[50,100)退款失败

微信直连退款:transAmt(2,50),退款成功; transAmt[50,100)退款失败

7.提交支付申请,返回产品功能未开通,指定支付方式不存在

麻烦检查终端号是否提交正确,终端号与提交支付方式是否相符,如果都相符,再联系联调同事处理。

8.商户提交申请,返回系统错误,签名错误

1.优先确认商户号是否+01;2.确认请求接口地址是否正确。3.确认商户证书是否上传。4.确认用的私钥证书和上传到我司后台的公钥证书是否一致。5.确认加签的参数和加签顺序是否符合我们文档上的要求。6.确认商户是否做过转码操作urldecode

9.我司公私钥证书作用

商户自行生成一公私钥证书

私钥-->向我司请求时加签

公钥-->上传到我司后台,我司用来对贵司的请求进行验签

商户后台下载公钥证书 ChinaPnR.ras.cer-->贵司用来验我司同步返回或异步通知的签名.由我司提供,在商户后台可自行下载.

10.退款多久可以收到异步通知

我司一般在退款订单提交后,即时执行任务上送通道发起退款,商户会在1-2分终左右收到退款异步通知

11.支付宝扫码支付,发起关单,银行授权失败

请使用支付宝app扫码1分钟后,再发起关单

12.支付成功,未接收到回调异步

烦请确认接口上传bgUrl异步通知地址是否可以正常使用,若可以,烦请联系我司运维同事

13.接收到我司异步通知后,返回我司什么数据

Chinapnr异步通知以通知地址返回HTTPSTATUS为200认为成功,否则会一直通知,通知策略是一共通知15次,前面每隔10s通知一次 一共通知6次每次,后9次通知时间间隔增加(N*60s+30s,N为第几次通知,如第7次通知间隔第一次7min30s)。商户在接受到Chinapnr异步通知后,应返回成功接受内容,如"SUCCESS"

OpenSSL工具安装

1.Linux用户(以Ubuntu为例)

sudo apt-get install openssl
							

2.Windows用户开发者可以在OpenSSL官方网站下载Windows的OpenSSL安装包进行安装。或直接下载

3.若不习惯查看文档中心,此为证书生成word文档,可自行下载证书生成文档下载

RSA私钥及公钥生成

生成证书days在730-780之间

1.Linux用户(以Ubuntu为例)

$ openssl   进入OpenSSL程序
OpenSSL> genrsa -out private-rsa.key 1024   生成私钥
OpenSSL> req -new -x509 -key private-rsa.key -days 750 -out public-rsa.cer     生成公钥
OpenSSL> pkcs12 -export -name test-alias -in public-rsa.cer -inkey private-rsa.key -out private-rsa.pfx    生成证书,密码和别名需记住
OpenSSL> exit   # 退出OpenSSL程序
							

2.Windows用户在cmd窗口中进行以下操作:

C:\Users\Hammer>cd C:\OpenSSL\bin     进入OpenSSL安装目录
C:\OpenSSL\bin>openssl.exe            进入OpenSSL程序
OpenSSL> genrsa -out private-rsa.key 1024   生成私钥
OpenSSL> req -new -x509 -key private-rsa.key -days 750 -out public-rsa.cer     生成公钥
OpenSSL> pkcs12 -export -name test-alias -in public-rsa.cer -inkey private-rsa.key -out private-rsa.pfx    生成证书,密码和别名需记住
OpenSSL> exit   # 退出OpenSSL程序
							

注意:

1.对于使用Php的开发者,需要将“private-rsa.pfx”证书转换为“private-rsa.pem”,输入转换命令pkcs12 -in dc-rsa.pfx -passin pass:“此处输入商户第3步设置的密码” -nodes -out private-rsa.pem。

跨境公钥转pem(cer转pem):x509 -in C:\OpenSSL\bin\ChinaPnR.rsa.cer -out C:\OpenSSL\bin\ChinaPnR.rsa.pem

2.如第二步报错,则根据工具所在路径指定下配置文件,如命令改为:req -new -x509 -key private-rsa.key -config "C:\OpenSSL\bin\openssl.cnf" -days 750 -out public-rsa.cer

私钥及公钥文件示例

经过以上步骤,开发者可以在当前文件夹中(Windows用户在C:\OpenSSL\bin)看到private-rsa.pfx和public-rsa.cer两个文件,前者为私钥,后者为公钥。开发者将私钥保留,将公钥提交给Chinapnr网关,用于信息加密及解密。公钥需修改前缀为商户号,并上传至跨境系统商户后台。以下为使用OpenSSL生成的私钥文件和公钥文件示例:

1.私钥文件示例(Java使用)

								-----BEGIN PRIVATE KEY-----
    MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAN0yqPkLXlnhM+2H
    /57aHsYHaHXazr9pFQun907TMvmbR04wHChVsKVgGUF1hC0FN9hfeYT5v2SXg1WJ
    Sg2tSgk7F29SpsF0I36oSLCIszxdu7ClO7c22mxEVuCjmYpJdqb6XweAZzv4Is66
    1jXP4PdrCTHRdVTU5zR9xUByiLSVAgMBAAECgYEAhznORRonHylm9oKaygEsqQGk
    YdBXbnsOS6busLi6xA+iovEUdbAVIrTCG9t854z2HAgaISoRUKyztJoOtJfI1wJa
    QU+XL+U3JIh4jmNx/k5UzJijfvfpT7Cv3ueMtqyAGBJrkLvXjiS7O5ylaCGuB0Qz
    711bWGkRrVoosPM3N6ECQQD8hVQUgnHEVHZYtvFqfcoq2g/onPbSqyjdrRu35a7P
    vgDAZx69Mr/XggGNTgT3jJn7+2XmiGkHM1fd1Ob/3uAdAkEA4D7aE3ZgXG/PQqlm
    3VbE/+4MvNl8xhjqOkByBOY2ZFfWKhlRziLEPSSAh16xEJ79WgY9iti+guLRAMra
    vGrs2QJBAOmKWYeaWKNNxiIoF7/4VDgrcpkcSf3uRB44UjFSn8kLnWBUPo6WV+x1
    FQBdjqRviZ4NFGIP+KqrJnFHzNgJhVUCQFzCAukMDV4PLfeQJSmna8PFz2UKva8f
    vTutTryyEYu+PauaX5laDjyQbc4RIEMU0Q29CRX3BA8WDYg7YPGRdTkCQQCG+pjU
    2FB17ZLuKRlKEdtXNV6zQFTmFc1TKhlsDTtCkWs/xwkoCfZKstuV3Uc5J4BNJDkQ
    OGm38pDRPcUDUh2/
    -----END PRIVATE KEY-----
							

3.公钥文件示例

								-----BEGIN CERTIFICATE-----
MIIDNzCCAqCgAwIBAgIJAJaZj8YlPQcIMA0GCSqGSIb3DQEBBQUAMHExCzAJBgNV
BAYTAkhLMQswCQYDVQQIEwJISzELMAkGA1UEBxMCSEsxDTALBgNVBAoTBE1QQVkx
DTALBgNVBAsTBE1QQVkxDTALBgNVBAMTBE1QQVkxGzAZBgkqhkiG9w0BCQEWDE1Q
QVlAMTIzLkNPTTAeFw0xNjA3MDUxMDM5NDJaFw0xODA3MjUxMDM5NDJaMHExCzAJ
BgNVBAYTAkhLMQswCQYDVQQIEwJISzELMAkGA1UEBxMCSEsxDTALBgNVBAoTBE1Q
QVkxDTALBgNVBAsTBE1QQVkxDTALBgNVBAMTBE1QQVkxGzAZBgkqhkiG9w0BCQEW
DE1QQVlAMTIzLkNPTTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAyiVbdBOF
Qtb03wKw+7oR7bA32vi5/XkJ33CbzdiID+ZK6lkeeRlJVIQvf2UsfScIeTLE/Nyn
lapF12Gsw9dVoiCzrScagn3kknFcE7fM2x4kyLLNQdJgJvb7jCRl/oMOziVT+z5R
cZ8SS11vO5Dk5kx8W4n66ldoyDeUVXArlCcCAwEAAaOB1jCB0zAdBgNVHQ4EFgQU
epQ9Qvg/VE5nb69L+D08eqn6/E8wgaMGA1UdIwSBmzCBmIAUepQ9Qvg/VE5nb69L
+D08eqn6/E+hdaRzMHExCzAJBgNVBAYTAkhLMQswCQYDVQQIEwJISzELMAkGA1UE
BxMCSEsxDTALBgNVBAoTBE1QQVkxDTALBgNVBAsTBE1QQVkxDTALBgNVBAMTBE1Q
QVkxGzAZBgkqhkiG9w0BCQEWDE1QQVlAMTIzLkNPTYIJAJaZj8YlPQcIMAwGA1Ud
EwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAOHgqqxMLoaUW/i43KtTHFGciwr9m
OkusX4B4kx5sKN8Ed110iyRPixMKCslV2EHP4uIVAMWhEw+AxULbJte86r8ryr/m
Jc0PR4U9vrpQxdWLsBh8lhKgC4GVJb8jkwcVkjF/XvvVUp/VqHto+LBnjdNAXqZa
GbuKXbLTnmIwGes=
-----END CERTIFICATE-----
							

聚合支付接口

正式环境发送异步通知只支持443或80端口 其他端口暂时不支持

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

提交参数

1.1预下单

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/pay/unifiedorder.htm
正式环境 https://global.chinapnr.com/pay/unifiedorder.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
pageUrl String 256 接受支付结果的页面地址 https://www.merchant.com/pay/notifyReceiverPg.do
bgUrl String 256 服务器接受支付结果的后台地址 https://www.merchant.com/pay/notifyReceiverBg.do
version String 10 网关版本,固定值:3.0 3.0
language String 3 网关页面显示语言种类,固定值:1
1-中文显示
1
signType String 256 签名类型,固定值:4
4-RSA加签
4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
payerName String 条件必选 96 支付人姓名,中文名,网银直连时必填 张三
payerContactType String 1 支付人联系方式类型,固定值:1或者2
1-代表电子邮件方式
2-其他联系方式
1
payerContact String 64 支付人联系方式,根据payerContactType的方式填写对应字符,邮箱或者其他联系方式 13400000000
payerIdentityCard String 条件必选 32 支付人身份证号码,字符串,18位身份证号,如果身份证号包含X,请保持字母为大写;跨境结算且为直连模式时必填 320125198800001000
mobileNumber String 32 支付人手机号 15800001111
cardNumber string 32 支付人所持卡号。 6225881257400000
customerId string 条件必填 32 支付人在商户系统的客户编号。快捷支付时必填,方便用户二次支付;
移动端聚合网关支付必填:(payType=5/5-2/5-4/5-123)
jd1001
customerIp string 条件必填 32 直连微信APP支付必填;
服务商公众号支付必填;
微信直连H5支付必填;
支付宝支付方式建议填写;
客户ip;示例:127.0.0.1
orderId string 32 商户订单号,只允许使用字母、数字、_,每商户提交的订单号,必须在自身账户交易中唯一 20170728120001299
inquireTrxNo string 32 查询流水号
商户从CHINAPNR外汇询价时需填入PNR返回的工单号,用于锁定汇率,不填则根据交易时间实时询价
交易前已在CHINAPNR询价返回工单号:2089,则填入2089
orderCurrency String 3 订单币种,3位币别码,详情请参照币别代码附录。当该字段不为CNY时,必须与settlementCurrency一致。
默认请填写CNY,如需其他币别,请联系我司确认
如人民币:CNY
settlementCurrency String 3 结算币种,3位币别码,详情请参照币别代码附录
默认请填写CNY,如需其他币别,请联系我司确认
如人民币:CNY
orderAmount Number 12 商户订单金额,整型数字,单位为分。日韩元支持的最小单位为元。 如100元,则填写10000
orderTime String 14 商户订单提交时间,一共14位格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] 20071117020101
productName String 256 商品名称 订单对应的商品信息,该内容可能会显示给支付人,请尽可能简短完整。
productNum Number 8 商品数量,整型数字 例:
单个商品数量:1
多个商品数量:商品总数量
productId String 32 商品代码,请根据我司提供的商品代码附录进行填写。 如服饰箱包,填写:100200(如多个商品填写最主要的商品代码)
productDesc String 256 填写规则:
商品编号|商品名称|商品数量|商品单价(单位元)|商品链接;商品编号|商品名称|商品数量|商品单价(单位元)|商品链接

填写说明:
1、同一商品用半角竖线分隔,不同商品间用半角分号分隔
2、商品编号,商家该款商品的唯一编码
3、其中,商品编号、商品名称、商品数量、商品单价必填,商品链接非必填(参数非必填,栏位|必要填写)
填写示例:
200R32P|爱他美1段|2|250|http://baidu.com;200R32M|爱他美2段|1|130|
ext1 String 128 扩展字段1,英文或中文字符串支付完成后,按照原样返回给商户 服务商公众号支付时可为空
ext2 String 128 扩展字段2,英文或中文字符串支付完成后,按照原样返回给商户 扩展字段2
openId String 条件必填 128 deviceType=2,payType=7或8时必填,关注微信公众号的用户分配的id,可参考微信官方文档指引 如:
op5EP1G8XtyYH1VvmAbleB3AYgc8
deviceType String 1 1:pc端支付2:移动端支付 1
payType String 4 当deviceType=1时
1:微信扫码
2:支付宝扫码
4:网银直连
6:聚合网关,包含多种支付方式(返回跳转地址)
     1:微信扫码
     2:支付宝扫码
     4:网银支付
     5:快捷支付

当deviceType=2时
4: 快捷支付(汇数网关)
5:移动端聚合,包含多种支付方式(返回跳转地址)
      2:支付宝H5支付
      4:快捷支付
7:微信公众号支付(返回payInfo,注意微信公众号支付已不支持付款完成后回跳来源页面,只能通过微信的点金计划间接实现,如需了解请联系我司沟通)
8:微信小程序支付(返回payInfo)
B:微信直连APP(返回payInfo)
C:支付宝直连APP(返回payInfo)
D:服务商公众号支付(返回跳转链接)
H:银联收银台APP支付
K:微信直连H5(返回跳转链接)
当deviceType=1时:
聚合网关可指定一个或多个支付方式,形如:
6展示全部开通支付方式
6-4只显示网银支付
6-5只显示快捷支付
41网银直连只开通B2C 42网银直连只开通B2B
当deviceType=2时:
移动端聚合网关可指定一个或多个支付方式,形如:
5展示所有支付方式
5-2只有支付宝H5支付
5-4只有快捷支付
bankId String 8 银行代码,请参考银行代码表附录:银行代码。网银直连时必填;即deviceType=1且payType为4时 如中国农业银行,ABC
redoFlag String 1 1表示同一订单禁止重复提交标志,预留字段
2表示 同一订单,可重复提交(订单状态为未支付成功)
当前只有如下支付方式支持: deviceType=1,payType=2 支付宝扫码;
deviceType=2,payType=5-2 支付宝H5;
deviceType=2,payType=7 微信公众号;
deviceType=2,payType=8 微信小程序;
deviceType=2,payType=B 微信直连APP;
deviceType=2,payType=C 支付宝直连APP;
deviceType=2,payType=H 微信直连H5;
divFlag String 1 指定交易需要分账时上送 1表示分账,不上送或上送0表示不分账;分账需要联系我司运营进行开通配置
bizContent JSON 128 1.指定付款人时上送,格式为:{"desPayer":{"isDestPayer":"Y"}},仅支付宝相关支付方式支持,微信公众号/小程序支付请联系我司沟通

2.指定订单有效期上送,格式为:{"orderExpireTime":"20220210183030"}

3.指定appid上送,格式为:{"appId":"wxf11111a1c4c0a721"}

4.指定上送期望付款人,格式为:
{ "companyName": "企业名称", "companyLicenseNo": "DZ1000-11", "legalPersonName": "张三", "legalPersonIdNo": "342623198812171432" }

5.指定微信H5:h5_info,格式为:
{"h5_info": {"type":"场景类型", "app_name":"应用名", "bundle_id":"iOS平台BundleID", "app_url":"网站URL", "package_name":"Android平台PackageName", } }

6.小程序插件支付,格式为:{"miniProgramPlugin":"1"}
指定付款人:即微信支付宝会按照上送的付款人姓名+身份证号进行控制,只有以该信息实名的微信账号/支付宝账号才能支付
指定付款人时,payerName和payerIdentityCard必填

针对orderExpireTime值,如下要求:
1、如果传值,则订单的最长可支付时间以传值作为截止时间,格式:YYYYMMDDhhmmss
2、该时间最小不能小于时间-1分钟,最长不能超过当前时间+2小时,以北京时间为准

指定appid上送,只限于微信公众号/微信小程序支付方式(deviceType=2,payType=7/8),其他支付方式不可上送;用于解决同一个商户主体有多个appid且都报备关联时具体一笔交易发生在哪个appId下。

针对上送期望付款人(企业网银B2B),
(1)付款企业名称:companyName
(2)付款企业营业执照编码:companyLicenseNo
(3)付款企业法人姓名:legalPersonName
(4)付款企业法人身份证号:legalPersonIdNo

针对微信直连H5上送,
(1)type场景类型示例值:iOS,Android,Wap,必填
(2)app_name应用名:按照实际填写,可空
(3)bundle_id iOS平台BundleID:按照实际填写,可空
(4)app_url网站URL:按照实际填写,可空
(5)package_name Android平台PackageName:按照实际填写,可空

针对小程序插件支付:请参考链接
signMsg String 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签

备注:ext1传值注意事项

当deviceType=1且payType=6-2或6或6-1245或2;
deviceType=2且payType=5或5-2(支付宝支付)时,
或当deviceType=2且payType=D(服务商公众号支付)时,
ext1字段为JSON格式,内容参考如下:
{ "userProv":"1","userCity":"xxxxxxx", "userGpsAddr":{"latitude":"xxx.xxxxxx","longitude":"xxxx.xxxxx"} }
userProv-用户所属省份;
userCity-用户所属城市;
上述两个字段请参考我司提供的省份城市码表;
userGpsAddr-用户GPS地址,格式如上文参考,纬度和经度,各自最长不超过20位。

-	按以下固定字段顺序进行加签
- 仅对非空字段进行加签 pageUrl={pageUrl}&bgUrl={bgUrl}&merchantAcctId={merchantAcctId}&terminalId={terminalId}& customerId={customerId}&orderId={orderId}&orderAmount={orderAmount}&orderTime={orderTime}&productDesc={productDesc}&ext1={ext1}&ext2={ext2}& deviceType={deviceType}&payType={payType}&shortCardno={shortCardno}

返回结果

交易结果会同时通知提交时pageUrl和bgUrl对应的地址。

1.1.1预下单返回

预下单请求处理完成后,会返回如下数据,:

参数名称 参数含义 最大长度 参数说明
url 返回地址 1024 需转义
type=1:商户需将url转换成二维码展示
type=2:商户需将用户的浏览器跳转至该url
type=3:此字段为空
queryUrl 扫码结果轮训地址 1024 备用字段
type 返回类型 1 1:url是二维码
2:url跳转地址:
(1)聚合网关(deviceType=1,payType=6或6-123等;deviceType=2,payType=5或5-123等)及微信服务商公众号支付返回url;
(2)转账支付-PC/移动网关模式返回url,商户需跳转至该url以进行后续操作;此场景下,商户需先关注2.3的结果,若2.3返回成功,则可通过2.4接收交易结果(也可通过交易查询来查询交易结果);若2.3返回失败,则交易失败,不再有2.4的异步结果
3:其他(payInfo):
(1)微信支付(公众号、小程序)、微信直连APP/支付宝直连APP支付为payInfo;
(2)转账支付-API模式为payInfo
4:小程序插件支付
respCode 错误代码 6 000000 成功,其它为异常
respMsg 错误描述 512 失败错误描述
payInfo 支付信息 64 当type为3、4时返回回。
type=3时:
如果是支付宝APP直连支付、微信APP直连支付、微信APP支付、微信公众号支付、微信小程序支付,则为微信生成的预支付回话标识,用于后续接口调用中使用

1.微信小程序、公众号返回payinfo示例:
payInfo={"timeStamp":"1575347367","package":"prepay_id=wx03122927942374103a20ec9e1536844900","paySign":"adRRLnffPDdQppE1VmgiZ3EcjnYg7W8r61h+FoSDzWIeUOwic0VNslp3QYvCHXp+x2kr/HzgHTWEgwvAuxqlhecWvPzRdkxSYgNqyKRf36aKJpIvqnyeRGOmouU0AiSOUjM8tMNlLf2m29/MU0iMmdHoGKeo5iMzXAhSremm2wNEPF7/7UjFtikyj2wBN7g0NRBVgMPgjNYghzRV00byZwdoAWcsOTKk63woKMSMmyThAepiYtxtysgXJFbHUsFYFP1F6yThP8AGbw6ZMdkRuVm7jMZ5mMlCEwic9yW24RSpO0yG1cX4/9zP70j1kchr9xkJ41ShQUirGBhcqMoTQg==","appId":"wx561a6afdd366710b","signType":"RSA","nonceStr":"pfv8TcZuJuLTkaYBLLicNBS0pjr4V86a"}

2.银联收银台APP支付(deviceType=2,payType=H)返回示例:
type=3&payInfo={"tnOrderNo":"694664222131649327456"}&respCode=000000

3.支付宝/微信直连app返回示例:(唤醒支付宝/微信app支付取红色部分:用正则表达式 /(?<=&payInfo=).*?(?=&respCode)/ 取)
type=3&payInfo=alipay_sdk=alipay-sdk-java-3.3.49.ALL&app_auth_token=202001BBa8e8a22d595343adae20e25850e0aX39&app_id=2021001105620951&biz_content=%7B%22out_trade_no%22%3A%2215012008036642332200174%22%2C%22total_amount%22%3A%220.04%22%2C%22subject%22%3A%22app%E6%94%AF%E4%BB%98%E9%AA%8C%E8%AF%81%22%7D&charset=UTF-8&format=json&method=alipay.trade.app.pay& notify_url=https%3A%2F%2Ftdbpsit.cloudpnr.com%2Fapi%2Ftdbp-biptd-union%2Fat%2Fali%2Ftrans%2Fvk&sign=Cyjydef%2FC6fU6%2F3z4oCkTxVD7TPXfrnE4jo1eyFUW6lJbiMow2qc31%2FkFgVv6gBnR6YuWtQ7DUioQr2zllgXIt600l%2Bpf%2BxsP%2B2NtehX5c6ZObODCJ0V%2BDtCKiVx6ZkfjEeqYMbxsRNG6SaiqJgeVm52pTRzq5ddURuT1M4Hpbs2YdwBZiUKkdGYBlvEGCKiQA43Cnvwr5xwX04zK037NaOanVLVSn6CbG0jVkSRyc4C6JI%2FPEPUJZgq%2BZzC8t6iqYaJFmBzqIB3WfdNmabs%2BtInaIUFpYx4hUsrJotr9XzoYTvutWhHngiBk%2FKHJYw7DR%2FTK6Eg0RXlo%2BiXg346og%3D%3D&sign_type=RSA2×tamp=2020-08-03+18%3A27%3A03&version=1.0&respCode=000000

4.小程序插件支付返回示例:
type=3&payInfo={"sequenceId":"2038472330","mac":"8B998DFC8A329D2AA929358969F67CAF"}&respCode=000000

1.1.2返回商户支付结果

商户在接受到Chinapnr异步通知后,应返回成功接受内容,如"SUCCESS"。

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 32 会员账号,与提交订单时的保持一致 1001234001101
terminalId String 8 终端号,与提交订单时的保持一致 999999
version String 10 网关版本,与提交订单时一致 3.0
payType String 4 支付方式,与提交订单时一致 00
bankId String 8 银行代码,与提交订单一致 BOC
orderId String 32 商户订单号,与提交订单时一致 20170728120001299
orderTime String 14 商户订单提交时间,与提交订单时一致 20171117020101
orderCurrency String 3 订单币种,与提交订单时一致 USD
orderAmount Number 12 商户订单金额,与提交订单时一致 10000
dealId String 32 收单系统交易号,该交易在收单系统对应的交易号 20000100
dealTime String 14 交易时间,交易失败时可能为空。收单系统对交易进行处理的时间,格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] 20170728120001
ext1 String 128 扩展字段1,与提交订单时一致 扩展字段1
ext2 String 128 扩展字段2,与提交订单时一致 扩展字段2
extInfo Json 可选 不定长 需单独申请配置,配置后返回该字段,目前包括:authTransId(微信支付宝端支付单号),authMerOrderId(微信支付宝端商家订单号),actualPayType(实际支付方式),deviceType(实际支付的设备类型);前两个字段当微信/支付宝支付时返回,后两个字段值可联合得到消费者最后选择的支付方式。(参考请求中payType和deviceType的定义)由于银联特殊规则,当支付方式为支付宝时,银联会在支付宝的原始支付单号前加两位数字,若接入方需要该字段进行逻辑处理,请依据银联规则裁剪长度。(若银联规则有变更,我司会在得到通知后告知新规则) 2020-11-16 V4.5新增]样例为:{"deviceType":"1","authMerOrderId":"07012011163829365007287","actualPayType":"2","authTransId":"932020111622001466645715328950"}该字段以key:value形式返回,每个key之间,分隔;接入时需要支持该字段的扩展,以备后续该字段增加/减少key值。

注意:商户接收到的字段值为urlEncode之后的值(如:extInfo=%7B%22deviceType%22%3A%222%22%2C%22authMerOrderId%22%3A%2207212011253343123302602%22%2C%22actualPayType%22%3A%227%22%2C%22authTransId%22%3A%224200000744202011259445484075%22%7D),需要对=号后面的内容进行urlDecode,上文解码之后的内容为:{"deviceType":"2","authMerOrderId":"07212011253343123302602","actualPayType":"7","authTransId":"4200000744202011259445484075"}
bankDealId String 128 银行交易号,后端通道系统的交易流水号。
需要按照海关179 号文报送的商户可以解析该字段存储,格式为1 位字母(标识银联/网联/其他)+流水号。其中U-银联,N-网联,D-直连,O-其他目前后端渠道在断直连背景下 A-支付宝直连,W-微信直连,基本均为U或者N
如:U20181203215458215 表示交易渠道为银联,流水号为20181203215458215
partyOrderId String 可选 64 支付宝直连扫码、支付宝直连APP、微信直连扫码、微信直连APP四种场景下返回
payResult String 2 处理结果:
10-支付成功
其他均为失败
10
errCode String 128 错误代码,详细请参考
signMsg String 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成。对于所有值不为空的参数及对应值,按照字母顺序组成字符串 DSA:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
singMsg需要进行urldecode解码:veryfyResult = XMLSecurityProcess.veryfySignature(dataReceived, URLDecoder.decode(signMsg));
注:若通过sdk接入,则无需自己处理,代码已封装
-	下述字段按首字母排列进行验签
- 仅对非空字段进行验签
bankDealId={bankDealId}&bankId={bankId}&dealId={dealId}&dealTime={dealTime}&errCode={errCode}&ext1={ext1}&ext2={ext2}&merchantAcctId={merchantAcctId}&orderAmount={orderAmount}&orderCurrency={orderCurrency}&orderId={orderId}&orderTime={orderTime}&payResult={payResult}&payType={payType}&terminalId={terminalId}&version={version}

PG返回示例

http://192.168.1.111:8081/QAMOCK-Test/notifyReceiverPg.do?dealTime=20170825155744&errCode=000000&merchantAcctId=1001215986501&orderTime=20170825155735&orderCurrency=CNY&dealId=2000003898&version=3.0&bankId=cmb&terminalId=0010003&payResult=10&ext1=ext1&ext2=ext2&orderAmount=600&signMsg=URgwbxHfL%2FE3YNiIBpP0vbL1UPtvbsqfAvGMpLFo5nIW2Bq786Mi0uLrvsIs8BHHw7B3f%2BRDEkdjE96nxfT4YcP4cYXkzk1SPAlAFwUy4JDgOQAOwYVgUG7%2FcHWx6Ef7uIMWZxyNxQ2SCC1WVBXsWPfnIRhzvGPDpgiqzK46cdA%3D&payType=10&orderId=20170825155741712
					

BG返回示例

BG以http Key-Value方式返回,如:
bankDealId=0181203215458215					
dealTime=20170825155744
errCode=000000
merchantAcctId=1001215986501
orderTime=20170825155735
orderCurrency=CNY
dealId=2000003898
version=3.0
bankId=cmb
terminalId=0010003
payResult=10
ext1=ext1
ext2=ext2
orderAmount=600
signMsg=URgwbxHfL%2FE3YNiIBpP0vbL1UPtvbsqfAvGMpLFo5nIW2Bq786Mi0uLrvsIs8BHHw7B3f%2BRDEkdjE96nxfT4YcP4cYXkzk1SPAlAFwUy4JDgOQAOwYVgUG7%2FcHWx6Ef7uIMWZxyNxQ2SCC1WVBXsWPfnIRhzvGPDpgiqzK46cdA%3D
payType=10
orderId=20170825155741712

交易规则

1. 支付宝/微信支付

收单:交易金额transAmt(0,10000) 交易成功,transAmt[10000,50000) 交易失败

退款:退款金额transAmt(0,50)退款成功; transAmt[50,100)退款失败

微信直连退款:transAmt(2,50),退款成功; transAmt[50,100)退款失败

微信小程序:transAmt(0,100),交易成功; transAmt[100,)交易失败

支付宝扫码无需进行扫码,只需要获取我司支付结果即可

2. 网银支付

网银测试时选择兴业银行(其余会跳转其他银行真实环境)

3. 快捷支付

工商银行:卡号:6257080018600105 姓名:张三 (移动快捷可用)
工商银行:卡号:6223150000123456789 姓名:张三
农业银行:卡号:6228220000123456789 姓名:张三
建设银行:卡号:5453242000123456789 姓名:张三
招商银行:卡号:6282900000123456789 姓名:张三
中国银行:卡号:5123160000123456789 姓名:张三
身份证号,手机号随意填写,格式正确即可
绑卡申请获取验证码:111111 支付申请获取验证码:111111

单笔交易查询接口

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

提交参数

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/pay/singleTrxQuery.htm
正式环境 https://global.chinapnr.com/pay/singleTrxQuery.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 5 字符集,固定值:1
1-UTF-8
1
signType String 2 签名类型,固定值:4
4-RSA加签
4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
orderId string 必填 32 商户提交的原订单号 20170728120001299
dealId String 可选 32 收单系统交易号,该交易在收单系统对应的交易号 2000003882
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
inputCharset={inputCharset}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&orderId={orderId}&dealId={dealId}
按照以上字段固定顺序加签-
只对非空值的字段进行加签-

返回结果

查询结果会接口同步返回。

返回参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,与提交订单时的保持一致 1001234001101
terminalId String 必选 8 终端号,与提交订单时的保持一致 999999
version String 必选 10 网关版本,与提交订单时一致 3.0
payType String 必选 4 支付方式,与提交订单时一致 00
bankId String 必选 10 银行代码,与提交订单一致 ABC
orderId String 必选 32 商户订单号,与提交订单时一致 20170728120001299
orderTime String 必选 14 商户订单提交时间,与提交订单时一致 20171117020101
orderCurrency String 必选 3 订单币种,与提交订单时一致 USD
orderAmount Number 必选 12 商户订单金额,与提交订单时一致 10000
dealId String 必选 32 收单系统交易号,该交易在收单系统对应的交易号 20000100
dealTime String 必选 14 交易时间,交易失败时可能为空。收单系统对交易进行处理的时间,格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] 20170728120001
partyOrderId String 可选 64 支付宝直连扫码、支付宝直连APP、微信直连扫码、微信直连APP四种场景下返回 10
payResult String 必选 2 处理结果,10:支付成功 11:支付未成功 C0: 支付中 10
bankDealId String 可选 64 银行交易号,字符串,可为空
errCode String 可选 8 错误代码,详细请参考错误代码附录 000000
ext1 String 可选 128 扩展字段1,与提交订单时一致 扩展字段1
ext2 String 可选 128 扩展字段2,与提交订单时一致 扩展字段2
extInfo Json 可选 不定长 与提交订单时一致,参考支付接口返回
queryRespCode String 必选 2 查询结果,S查询成功、F查询失败 S
queryRespMsg String 可选 512 查询返回描述:字符串,可为空
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
商户需对该字段进行验签。对于所有值不为空的参数及对应值,按照字母顺序组成字符串 DSA:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
注:若通过sdk接入,则无需自己处理,代码已封装
bankDealId={bankDealId}&bankId={bankId}&dealId={dealId}&dealTime={dealTime}&errCode={errCode}&ext1={ext1}&ext2={ext2}&extInfo={extInfo}&merchantAcctId={merchantAcctId}&orderAmount={orderAmount}&orderCurrency={orderCurrency}&orderId={orderId}&orderTime={orderTime}&partyOrderId={partyOrderId}&payResult={payResult}&payType={payType}&queryRespCode={queryRespCode}&queryRespMsg={queryRespMsg}&terminalId={terminalId}&version={version}
根据字母排序(如a**字段放在b**字段前面)验签。

请求示例

请参考具体Demo。下载地址

收单分账接口目录:

1.收单分账接口

注意:当前未分账交易,默认30天自动结算到商户主账户;自动分账结算时间可配置,如有需要,烦请联系销售同事更改

汇付国际商户分账产品介绍:文件下载

收单分账流程请参考支付流程中的序列图10:跳转支付流程

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

1.1收单分账申请

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/ledger/transDiv.htm
正式环境 https://global.chinapnr.com/ledger/transDiv.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
version String 10 网关版本,固定值:1.0 1.0
signType String 1 签名类型,固定值:4-RSA加签 4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
requestId String 必选 32 请求流水号,只允许使用字母、数字、_,每个商户提交的流水号,必须在自身账户交易中唯一 20170728120001001
requestTime String 必选 14 请求时间, 数字串,一共14位。 格式:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]
即: yyyyMMddHHmmss
20170728120001
dealId String 必选 32 收单系统交易号,该交易在收单系统对应的交易号 20000100
details String 必选 分账明细, 明细笔数最多99 见分账明细字段说明:例:10019671|10000|描述;10019671|10000|
ext1 String 可选 128 扩展字段1, 预留
ext2 String 可选 128 扩展字段2, 预留
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签

1.2 分账明细字段说明

各字段以|分隔,各行以;分隔

序号 字段名 格式 是否必输 说明
1 用户号 String(11) 汇付唯一用户号
2 金额 Number(15) 格式为实际金额扩大100倍提交。如1000,表示10元
3 描述 String(128) 分账描述
version={version}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&requestId={requestId}&requestTime={requestTime}
- 按以上固定字段顺序进行加签。
- 仅对非空字段进行加签。
- 加密字段明文加签。

1.3同步返回参数

收单分账请求处理完成后,会同步返回如下数据,

参数名称 参数含义 长度 参数说明
requestId 商户请求流水号 32 商户请求流水号,与提交订单时一致
requestTime 请求时间 14 商户提交的请求时间, 与提交订单时一致
dealId 原交易收单系统交易号 32 原交易收单系统交易号, 与提交订单时一致
ext1 扩展字段1 128 扩展字段1, 与提交订单时一致
ext2 扩展字段2 128 扩展字段2, 与提交订单时一致
respCode 错误代码 6 000000 成功,其它为异常
respMsg 错误描述 512 错误代码不为000000时提供
signMsg 签名字段 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
商户需对该字段进行验签。详情请参考验签方法。对于所有值不为空的参数及对应值,按照指定顺序组成字符串:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
注:若通过sdk接入,则无需自己处理,代码已封装
details 分账明细 存在错误明细时返回,格式见返回明细字段说明
dealId={dealId}&ext1={ext1}&ext2={ext2}&requestId={requestId}&requestTime={requestTime}&respCode={respCode}&respMsg={respMsg}
- 下述字段字母顺序进行验签
- 仅对非空字段进行验签

返回明细字段说明:各字段以|分隔,各行以半角“;”分隔

序号 字段名 格式 是否必输 说明
1 用户号 String(11) 原样返回
2 金额 number(15) 原样返回
3 描述 String(128) 原样返回
4 失败原因 String(128) 当失败时返回失败原因描述

1.4应答码表

应答代码 错误描述
000000 成功
110001 必须提交的请求参数未提交
110002 请求的数据项长度不符
110003 请求的数据项格式错误
110005 请求的数据项不合法
120010 请求的商户不存在
120011 请求的商户状态异常
120014 该商户账户已被冻结,禁止交易
120103 该商户账户已被删除,禁止交易
120110 该商户账户已被止入,禁止交易
120111 请求的商户号状态异常,不允许交易
120014 产品功能未开通,不允许交易
120023 交易请求Ip未知,不允许交易
170001 请求流水号重复
170002 分账明细笔数超出限制
170003 原交易不允许分账
170004 原交易可分账余额不足
170006 原交易分账状态错误
170100 分账明细格式有误,详情见明细失败原因
200001 订单信息的签名内容不正确
400001 原交易不存在
400007 原交易状态错误
99999 系统错误

2.收单分账查询接口

本文档的全部接口,商户请求的报文与系统返回的报文都需要做防篡改签名。
- 请求与返回报文需要加签与验签
- 商户收到系统的数据后,需按照相同的规则生成签名字符串,并与系统返回的SIGNMSG字符串进行对比。
- 参数值为NULL或空,不拼接签名串
- 所有参与加密的参数KEY及其值的大小写敏感。
接口中标注密文传输字段需使用PNR公钥证书加密传输,防止敏感信息泄露。(加密字段明文参与加签,密文传输)

2.1收单分账查询申请

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/ledger/transDivQuery.htm
正式环境 https://global.chinapnr.com/ledger/transDivQuery.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset Number 1 字符集,固定值:1
1-UTF-8
1
version String 10 网关版本,固定值:1.0 1.0
signType String 1 签名类型,固定值:4-RSA加签 4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
requestId String 必选 32 请求流水号,只允许使用字母、数字、_,每个商户提交的流水号,必须在自身账户交易中唯一 20170728120001001
dealId String 非必选 32 原分账指令中的dealId 原始被分账交易的支付流水号,若填写该字段值,则将以此字段作为唯一条件查询分账指令状态。
requestTime String 必选 14 请求时间, 数字串,一共14位。 格式:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]
即: yyyyMMddHHmmss
20170728120001
origRequestId String 必选 32 原分账指令的请求流水号 20170728120001001
ext1 String 可选 128 扩展字段1, 预留
ext2 String 可选 128 扩展字段2, 预留
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
version={version}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&requestId={requestId}&requestTime={requestTime}&origRequestId={origRequestId}
- 按以上固定字段顺序进行加签。
- 仅对非空字段进行加签。
- 加密字段明文加签。

2.2同步返回参数

收单分账查询请求处理完成后,会同步返回如下数据:

参数名称 参数含义 长度 参数说明
requestId 商户请求流水号 32 商户请求流水号,与提交订单时一致
requestTime 请求时间 14 商户提交的请求时间, 与提交订单时一致
origRequestId 请求时间 14 商户提交的请求时间, 与提交订单时一致
ext1 扩展字段1 128 扩展字段1, 与提交订单时一致
ext2 扩展字段2 128 扩展字段2, 与提交订单时一致
respCode 查询指令处理结果 6 000000 成功
999999 查询执行失败
respMsg 错误描述 512 错误代码不为000000时提供
divStatus 分账状态 1 respCode为000000时根据该字段判断原分账指令状态
N-原分账交易不存在
I-分账受理成功,表示分账指令已受理待执行
S-分账处理成功,表示分账指令已成功执行,交易已分账
F-分账处理失败,表示分账指令处理失败,正常情况下此错误码基本不会出现,若返回此错误码可联系我司进行确认

3.待分账查询接口

应用场景:

商户可以通过该接口查询对应订单的总可分账金额、已分账金额、剩余待分账金额。

名词解释:

总可分账金额:该笔交易的总计可分账金额,一般情况下为订单金额-手续费金额

已分账金额:该笔交易已经执行的分账指令累计的分账金额,包括分给用户和商户自身的金额。

剩余待分账金额:总可分账金额-已分账金额

3.1待分账查询申请

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/ledger/unsplitQuery.htm
正式环境 https://global.chinapnr.com/ledger/unsplitQuery.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset Number 1 字符集,固定值:1
1-UTF-8
1
version String 10 网关版本,固定值:1.0 1.0
signType String 1 签名类型,固定值:4-RSA加签 4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
requestId String 必选 32 请求流水号,只允许使用字母、数字、_,每个商户提交的流水号,必须在自身账户交易中唯一 20170728120001001
dealId String 必选 19 支付成功时返回的汇付支付交易唯一流水号 原始被分账交易的支付流水号,若填写该字段值,则将以此字段作为唯一条件查询分账指令状态。
requestTime String 必选 14 请求时间, 数字串,一共14位。 格式:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]
即: yyyyMMddHHmmss
20170728120001
ext1 String 可选 128 扩展字段1, 预留
ext2 String 可选 128 扩展字段2, 预留
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
version={version}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&requestId={requestId}&requestTime={requestTime}
- 按以上固定字段顺序进行加签。
- 仅对非空字段进行加签。
- 加密字段明文加签。

3.2同步返回参数

收单分账查询请求处理完成后,会同步返回如下数据:

参数名称 参数含义 长度 参数说明
requestId 商户请求流水号 32 商户请求流水号,与提交订单时一致
requestTime 请求时间 14 商户提交的请求时间, 与提交订单时一致
dealId 支付成功时返回的汇付支付交易唯一流水号 32 原被分账交易的支付流水号,与提交订单时一致
ext1 扩展字段1 128 扩展字段1, 与提交订单时一致
ext2 扩展字段2 128 扩展字段2, 与提交订单时一致
respCode 查询指令处理结果 6 000000 成功
999999 查询执行失败
respMsg 错误描述 512 错误代码不为000000时提供
currency 币别 3 目前仅支持人民币,值为CNY
totalDivAmount 总可分账金额 32 respCode为成功时返回,单位为分
dividedAmount 已分账金额 32 respCode为成功时返回,单位为分
unDivAmount 剩余待分账金额 32 respCode为成功时返回,单位为分

3.3应答码表

应答代码 错误描述
000000 成功
110001 必须提交的请求参数未提交
110002 请求的数据项[{0}]长度最大允许[{1}],实际[{2}]
110003 请求的数据项[{0}]格式错误,合法格式请参照接入文档
110005 请求的数据项[{0}]不合法
111024 非法请求
120208 指定交易不存在或交易状态不正确
120209 指定交易非分账交易
200001 订单信息的签名内容不正确
999999 其他异常

4.收单分账回退接口

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

应用场景:

分账交易发生退款时,从用户账户扣除金额,返还给商户。分账回退时需指定原始分账请求流水号及分账接收方。允许对同一笔分账的同一个分账方进行多次回退,总金额不超过分账指令时分给该用户的金额。分账回退不影响原始交易的分账状态,即分账回退后,原交易仍为已分账,不能再次执行分账。

4.1分账回退申请

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/ledger/rollback.htm
正式环境 https://global.chinapnr.com/ledger/rollback.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
version String 10 网关版本,固定值:1.0 1.0
signType String 1 签名类型,固定值:4-RSA加签 4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
returnReqId String 必选 32 分账回退请求流水号,只允许使用字母、数字、_、-,每个商户提交的流水号,必须在自身商户号下唯一 20170728120001001
origReqId String 必选 32 原分账指令的请求流水号 原始分账指令的请求流水号
userId String 必选 11 需要回退的原分账接收方,即资金是从该用户返还 必须是原分账指令中存在的分账接收方用户号
amount String 必选 12 CNY,单位为分 不能超过原始分给该用户的总金额。
requestTime String 必选 14 请求时间, 数字串,一共14位。 格式:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]
即: yyyyMMddHHmmss
20170728120001
ext1 String 可选 128 扩展字段1, 预留
ext2 String 可选 128 扩展字段2, 预留
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
version={version}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&returnReqId={returnReqId}&origReqId={origReqId}&userId={userId}&requestTime={requestTime}
- 按以上固定字段顺序进行加签。
- 仅对非空字段进行加签。
- 加密字段明文加签。

4.2同步返回参数

收单分账回退请求处理完成后,会同步返回如下数据,

参数名称 参数含义 长度 参数说明
returnReqId 商户分账回退请求流水号 32 商户分账回退请求流水号,与提交订单时一致
requestTime 请求时间 14 商户提交的请求时间, 与提交订单时一致
origReqId 原分账指令的请求流水号 32 与提交订单时一致
userId 需要回退的原分账接收方,即资金是从该用户返还 11 与提交订单时一致
amount CNY,单位为分 11 与提交订单时一致
status 回退结果 1 P-处理中 S-成功 F-失败
ext1 扩展字段1 128 扩展字段1, 与提交订单时一致
ext2 扩展字段2 128 扩展字段2, 与提交订单时一致
respCode 查询指令处理结果 6 000000-处理成功
999999-处理异常,处理中
其他请参阅应答码列表说明
respMsg 错误描述 512 错误代码不为000000时提供

4.3应答码表

应答代码 错误描述
000000 成功
110001 必须提交的请求参数未提交
110002 请求的数据项长度不符
110003 请求的数据项格式错误
110005 请求的数据项不合法
110010 频繁请求,请稍后重试
111024 非法请求
120014 产品功能未开通,不允许交易
170001 请求流水号重复
170008 指定交易不存在或交易状态不正确
170009 分账回退金额超出可回退金额
170010 用户号与原分账指令不一致
200001 订单信息的签名内容不正确
999999 系统错误
170300 风控拒绝

判断逻辑:

respCode=000000+status=S 回退成功
respCode=000000+status=F 回退失败
respCode=000000+status=P 回退处理中
respCode=170008 回退失败
respCode=170300 回退失败
respCode=999999 异常,再次查询
其它 检查后再次查询

5.分账回退申请查询

用于查询分账回退指令的执行结果。

5.1分账回退查询申请

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/ledger/rollbackQuery.htm
正式环境 https://global.chinapnr.com/ledger/rollbackQuery.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset Number 1 字符集,固定值:1
1-UTF-8
1
version String 10 网关版本,固定值:1.0 1.0
signType String 1 签名类型,固定值:4-RSA加签 4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 0010001
queryReqId String 必选 32 查询请求流水号,只允许使用字母、数字、_、-,每个商户提交的流水号,必须在自身商户号下唯一 20211012155501032
returnReqId String 非必选 32 分账回退请求流水号 20170728120001001
ext1 String 可选 128 扩展字段1, 预留
ext2 String 可选 128 扩展字段2, 预留
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
version={version}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&queryReqId={queryReqId}&returnReqId={returnReqId}
- 按以上固定字段顺序进行加签。
- 仅对非空字段进行加签。
- 加密字段明文加签。

5.2同步返回参数

参数名称 参数含义 长度 参数说明
queryReqId 查询请求流水号 32 查询请求流水号,与请求一致
returnReqId 分账回退请求流水号 32 分账回退请求流水号,与请求一致
origReqId 原分账指令的请求流水号 32 respCode为000000时返回,对应分账回退交易的信息
userId 需要回退的原分账接收方,即资金是从该用户返还 11 respCode为000000时返回,对应分账回退交易的信息
amount CNY,单位为分 12 respCode为000000时返回,对应分账回退交易的信息
status 回退结果 1 P-处理中 S-成功 F-失败
ext1 扩展字段1 128 扩展字段1, 与提交订单时一致
ext2 扩展字段2 128 扩展字段2, 与提交订单时一致
respCode 查询指令处理结果 6 000000 成功
999999-处理异常
其他请参阅应答码列表说明
respMsg 错误描述 512 错误代码不为000000时提供

5.3应答码表

应答代码 错误描述
000000 成功
110001 必须提交的请求参数未提交
110002 请求的数据项长度不符
110003 请求的数据项格式错误
110005 请求的数据项不合法
110010 频繁请求,请稍后重试
111024 非法请求
120014 产品功能未开通,不允许交易
170001 请求流水号重复
170008 指定交易不存在或交易状态不正确
200001 订单信息的签名内容不正确
999999 系统错误

判断逻辑:

respCode=000000+status=S 回退成功
respCode=000000+status=F 回退失败
respCode=000000+status=P 回退处理中
respCode=170008 回退失败
respCode=999999 异常,再次查询
其它 检查后再次查询

6.收单分账完结接口

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

应用场景:

支付交易发生时标记需要分账,但由于商户自身需求,不再需要对该笔交易进行分账操作时,提供分账完结接口。商户调用分账完结接口对待分账交易进行完结分账,资金结算至商户账户。

6.1分账完结申请

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/ledger/close.htm
正式环境 https://global.chinapnr.com/ledger/close.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
version String 10 网关版本,固定值:1.0 1.0
signType String 1 签名类型,固定值:4-RSA加签 4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 0010001
requestId String 必选 32 分账完结请求流水号,只允许使用字母、数字、_、-,每个商户提交的流水号,必须在自身商户号下唯一 20170728120001001
dealId String 必选 32 目标交易号,对应需要执行分账完结的原支付交易的汇付交易号,可在支付流程的返回中获取。 2013772751
requestTime String 必选 14 请求时间, 数字串,一共14位。 格式:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]
即: yyyyMMddHHmmss
20170728120001
ext1 String 可选 128 扩展字段1, 预留
ext2 String 可选 128 扩展字段2, 预留
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
version={version}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&requestId={requestId}&requestTime={requestTime}
- 按以上固定字段顺序进行加签。
- 仅对非空字段进行加签。
- 加密字段明文加签。

6.2同步返回参数

收单分账完结请求处理完成后,会同步返回如下数据,

参数名称 参数含义 长度 参数说明
requestId 分账完结请求流水号 32 商户分账完结请求流水号,与提交订单时一致
requestTime 请求时间 14 商户提交的请求时间, 与提交订单时一致
dealId 目标交易号,对应需要执行分账完结的原支付交易的汇付交易号,可在支付流程的返回中获取。 32 与提交订单时一致
ext1 扩展字段1 128 扩展字段1, 与提交订单时一致
ext2 扩展字段2 128 扩展字段2, 与提交订单时一致
status 完结结果 1 P-处理中 S-成功 F-失败
respCode 查询指令处理结果 6 000000-处理成功
999999-处理异常,处理中
其他请参阅应答码列表说明
respMsg 错误描述 512 错误代码不为000000时提供

6.3应答码表

应答代码 错误描述
000000 成功
110001 必须提交的请求参数未提交
110002 请求的数据项长度不符
110003 请求的数据项格式错误
110005 请求的数据项不合法
110010 频繁请求,请稍后重试
111024 非法请求
120011 请求的商户号状态异常,不允许交易
120014 产品功能未开通,不允许交易
120030 请求的商户号[{0}]/终端号[{1}]对应的结算信息未开通,不允许交易
120073 商户结算账户类型有误
120074 商户结算账户未开通
170001 请求流水号重复
170008 指定交易不存在或交易状态不正确
170006 原交易分账状态错误
170011 交易暂不支持此操作
170030 风控拒绝
200001 订单信息的签名内容不正确
999999 系统错误

判断逻辑:

respCode=000000+status=S 完结成功
respCode=000000+status=F 完结失败
respCode=000000+status=P 完结处理中
respCode=170008 完结失败
respCode=170300 完结失败
respCode=999999 异常,需要查询
其它 检查后再次查询

7.分账完结查询

用于查询分账完结指令的执行结果。

7.1分账完结查询申请

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/ledger/closeQuery.htm
正式环境 https://global.chinapnr.com/ledger/closeQuery.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset Number 1 字符集,固定值:1
1-UTF-8
1
version String 10 网关版本,固定值:1.0 1.0
signType String 1 签名类型,固定值:4-RSA加签 4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 0010001
queryReqId String 必选 32 查询请求流水号,只允许使用字母、数字、_、-,每个商户提交的流水号,必须在自身商户号下唯一 20211012155501032
origReqId String 非必选 32 分账完结指令的请求流水号 20170728120001001
ext1 String 可选 128 扩展字段1, 预留
ext2 String 可选 128 扩展字段2, 预留
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
version={version}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&queryReqId={queryReqId}&origReqId={origReqId}
- 按以上固定字段顺序进行加签。
- 仅对非空字段进行加签。
- 加密字段明文加签。

7.2同步返回参数

参数名称 参数含义 长度 参数说明
queryReqId 查询请求流水号 32 查询请求流水号,与请求一致
origReId 分账完结请求流水号 32 分账完结请求流水号,与请求一致
status 完结结果 1 P-处理中 S-成功 F-失败
ext1 扩展字段1 128 扩展字段1, 与提交订单时一致
ext2 扩展字段2 128 扩展字段2, 与提交订单时一致
respCode 查询指令处理结果 6 000000 成功
999999-处理异常
其他请参阅应答码列表说明
respMsg 错误描述 512 错误代码不为000000时提供

7.3应答码表

应答代码 错误描述
000000 成功
110001 必须提交的请求参数未提交
110002 请求的数据项长度不符
110003 请求的数据项格式错误
110005 请求的数据项不合法
111024 非法请求
120014 产品功能未开通,不允许交易
170008 指定交易不存在或交易状态不正确
200001 订单信息的签名内容不正确
999999 系统错误

判断逻辑:

respCode=000000+status=S 完结成功
respCode=000000+status=F 完结失败
respCode=000000+status=P 完结处理中
其它 检查后再次查询

8.1多次分账申请

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/ledger/transMultiDiv.htm
正式环境 https://global.chinapnr.com/ledger/transMultiDiv.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
version String 10 网关版本,固定值:1.0 1.0
signType String 1 签名类型,固定值:4-RSA加签 4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
requestId String 必选 32 请求流水号,只允许使用字母、数字、_,每个商户提交的流水号,必须在自身账户交易中唯一 20170728120001001
requestTime String 必选 14 请求时间, 数字串,一共14位。 格式:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]
即: yyyyMMddHHmmss
20170728120001
dealId String 必选 32 收单系统交易号,该交易在收单系统对应的交易号 20000100
details String 必选 分账明细, 明细笔数最多99 见分账明细字段说明:例:10019671|10000|描述;10019671|10000|
ext1 String 可选 128 扩展字段1, 预留
ext2 String 可选 128 扩展字段2, 预留
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签

1.2 分账明细字段说明

各字段以|分隔,各行以;分隔

序号 字段名 格式 是否必输 说明
1 用户号 String(11) 汇付唯一用户号,如需分账到商户主账户,请填入固定值99,分账给商户主账户的明细不支持回退,分给用户的可以回退。
2 金额 Number(15) 格式为实际金额扩大100倍提交。如1000,表示10元
3 描述 String(128) 分账描述
version={version}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&requestId={requestId}&requestTime={requestTime}
- 按以上固定字段顺序进行加签。
- 仅对非空字段进行加签。
- 加密字段明文加签。

1.3同步返回参数

收单分账请求处理完成后,会同步返回如下数据,

参数名称 参数含义 长度 参数说明
requestId 商户请求流水号 32 商户请求流水号,与提交订单时一致
requestTime 请求时间 14 商户提交的请求时间, 与提交订单时一致
dealId 原交易收单系统交易号 32 原交易收单系统交易号, 与提交订单时一致
ext1 扩展字段1 128 扩展字段1, 与提交订单时一致
ext2 扩展字段2 128 扩展字段2, 与提交订单时一致
respCode 错误代码 6 000000 成功,其它为异常
respMsg 错误描述 512 错误代码不为000000时提供
signMsg 签名字段 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
商户需对该字段进行验签。详情请参考验签方法。对于所有值不为空的参数及对应值,按照指定顺序组成字符串:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
注:若通过sdk接入,则无需自己处理,代码已封装
details 分账明细 存在错误明细时返回,格式见返回明细字段说明
dealId={dealId}&ext1={ext1}&ext2={ext2}&requestId={requestId}&requestTime={requestTime}&respCode={respCode}&respMsg={respMsg}
- 下述字段字母顺序进行验签
- 仅对非空字段进行验签

返回明细字段说明:各字段以|分隔,各行以半角“;”分隔

序号 字段名 格式 是否必输 说明
1 用户号 String(11) 原样返回
2 金额 number(15) 原样返回
3 描述 String(128) 原样返回
4 失败原因 String(128) 当失败时返回失败原因描述

1.4应答码表

应答代码 错误描述
000000 成功
110001 必须提交的请求参数未提交
110002 请求的数据项长度不符
110003 请求的数据项格式错误
110005 请求的数据项不合法
120010 请求的商户不存在
120011 请求的商户状态异常
120014 该商户账户已被冻结,禁止交易
120103 该商户账户已被删除,禁止交易
120110 该商户账户已被止入,禁止交易
120111 请求的商户号状态异常,不允许交易
120014 产品功能未开通,不允许交易
120023 交易请求Ip未知,不允许交易
170001 请求流水号重复
170002 分账明细笔数超出限制
170003 原交易不允许分账
170004 原交易可分账余额不足
170006 原交易分账状态错误
170100 分账明细格式有误,详情见明细失败原因
200001 订单信息的签名内容不正确
400001 原交易不存在
400007 原交易状态错误
99999 系统错误

交易退款接口

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

提交参数

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/pay/refundreceive.htm
正式环境 https://global.chinapnr.com/pay/refundreceive.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
bgUrl String 256 服务器接受支付结果的后台地址 https://www.merchant.com/pay/notifyReceiverBg.do
version String 10 网关版本,固定值:3.0
3.0-交易退款
3.0
language String 2 网关页面显示语言种类,固定值:1
1-中文显示
1
signType String 2 签名类型,固定值:4
4-RSA加签
4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
refundOrderId string 必选 32 商户退款交易订单号,只允许使用字母、数字、_,并以_,字母或数字开头每商户提交的订单号,必须在自身账户交易中唯一 20170728120001299
originalOrderId String 必选 32 原交易订单号,只允许使用字母、数字、_,并以_,字母或数字开头每商户提交的订单号,必须在自身账户交易中唯一 同笔订单30秒内无法发起多次退款,会触发频繁请求报错 20170728120001299
refundCurrency String 必选 3 退货币种,字符串,3位币别码,详情请参照币别代码附录进行参考 CNY
refundAmount Number 必选 12 退货金额,整型数字,单位为分。日韩元支持的最小单位为元。 如100元,则填写10000
refundDesc String 可选 256 退货说明,字符串,不签名 无理由退款
refundMode String 可选 1 退货模式 1.传1表示特殊退款,仅针对待分账交易时支持,此时退款从待分账余额进行轧差,并影响该待分账交易的分账、完结、到期自动结算
2.不传或传0表示普通退款,此时退款从商户余额轧差退款
ext1 String 可选 128 扩展字段1,英文或中文字符串支付完成后,按照原样返回给商户 扩展字段1
ext2 String 可选 128 扩展字段2,英文或中文字符串支付完成后,按照原样返回给商户 扩展字段2
signMsg String 必选 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
inputCharset={inputCharset}&bgUrl={bgUrl}&version={version}&language={language}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&refundOrderId={refundOrderId}&originalOrderId={originalOrderId}&refundCurrency={refundCurrency}&refundAmount={refundAmount}&ext1={ext1}&ext2={ext2}
只对非空值的字段进行加签。

返回结果

退款结果会通知提交时bgUrl对应的地址。

返回参数(同步通知,异步通知返回皆为以下参数)

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,与提交订单时的保持一致 1001234001101
terminalId String 必选 8 终端号,与提交订单时的保持一致 999999
refundOrderId String 必选 32 商户订单号,与提交订单时一致 20170728120001299
originalOrderId String 必选 32 原交易订单号 20170728120001299
dealId String 可选 32 收单系统交易号,该交易在收单系统对应的交易号 20000100
dealTime String 可选 14 交易时间,交易失败时可能为空。收单系统对交易进行处理的时间,格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位]。bg返回,pg无返回 20170728120001
refundCurrency String 必选 3 退货币种,详细请参考币别代码附录 CNY
refundAmount Number 必选 12 退货金额,整型数字,以分为单位。比方10元,提交时金额应为1000,商户页面显示金额可以转换成以元为单位显示 10000
refundBalance Number 可选 12 可退金额,整型数字,以分为单位。比方10元,提交时金额应为1000,商户页面显示金额可以转换成以元为单位显示 1000
ext1 String 可选 128 扩展字段1,与提交订单时一致 扩展字段1
ext2 String 可选 128 扩展字段2,与提交订单时一致 扩展字段2
refundResult String 必选 2 同步返回:C0-退款申请成功,退款结果以异步
通知为准。10-退款成功,其余均为失败
异步返回:10-退款成功,其余均为失败
10
errCode String 必选 8 错误代码,详细请参考错误代码附录 000000
errMsg String 可选 256 错误描述,失败时返回的错误信息,可以为空。 原交易可退金额不足
signMsg String 必选 2048 签名字符串,商户需对该字段进行验签,对于所有值不为空的参数及对应值,按照字母顺序组成字符串 DSA:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
注:若通过sdk接入,则无需自己处理,代码已封装
dealId={dealId}&dealTime={dealTime}&errCode={errCode}&ext1={ext1}&ext2={ext2}&merchantAcctId={merchantAcctId}&originalOrderId={originalOrderId }&refundAmount={refundAmount}&refundBalance={refundBalance}&refundCurrency={refundCurrency}&refundOrderId={refundOrderId}&refundResult={refundResult}&terminalId={terminalId}
根据字母排序(如a**字段放在b**字段前面)验签。

BG返回示例

BG以http Key-Value方式返回,如:
dealTime=20170822034757
terminalId=0010003
refundAmount=1000
ext1=ext1
refundResult=10
ext2=ext2
signMsg=nUjiQh3vWHIRjFYjBTspc4NADb1QLo0jHhDghw2N4wNhab91DHwIZDkhs%2BW8n3%2FMFLEqJd1chgRXL7pVF%2FlqtDVIgxnqGvtH3bqxZe%2BlaBvvWaJDkUZcvJO14lEpzJQmdlFnaGMbtbFalfZFea9SKucgRQm8XJvz%2FtlDitcTXLM%3D
originalOrderId=2017082115280239
merchantAcctId=1001215986501
refundBalance=0
dealId=2000003884
refundOrderId=20170822114749925
refundCurrency=CNY
						

日终交易查询接口

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

提交参数

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/pay/dailyTxnConfirm.htm
正式环境 https://global.chinapnr.com/pay/dailyTxnConfirm.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
signType String 256 签名类型,固定值:4
4-RSA加签
4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 必选 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
trxDate String 必选 32 交易日,数字串,一共8位格式为:年[4位]月[2位]日[2位] 20071117
signMsg String 必选 2048 签名字符串,可参考签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
inputCharset={inputCharset}&signType={signType}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&trxDate ={trxDate}
只对非空值的字段进行加签。

返回结果

查询结果接口会同步返回。

返回参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,与提交订单时的保持一致 1001234001101
terminalId String 必选 8 终端号,与提交订单时的保持一致 999999
trxDate String 必选 32 交易日,数字串,一共8位格式为:年[4位]月[2位]日[2位] 20071117
token String 可选 32 唯一关联号,由我司提供
expTime Number 可选 14 下载请求的过期时间,数字串,一共14位格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] 20071117020101
errCode String 可选 8 错误代码,详细请参考错误代码附录 查询成功,无错误码返回
errorMsg String 可选 128 错误描述,错误描述,不参与签名 结算文件未找到
signMsg String 必选 2048 签名字符串,商户需对该字段进行验签,对于所有值不为空的参数及对应值,按照字母顺序组成字符串 DSA:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
注:若通过sdk接入,则无需自己处理,代码已封装
errCode={errCode}&expTime={expTime}&merchantAcctId={merchantAcctId}&terminalId={terminalId}&token={token}&trxDate={trxDate}
根据字母排序(如a**字段放在b**字段前面)验签。

日终交易文件下载请求

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/pay/dailyFileDownload.htm
正式环境 https://global.chinapnr.com/pay/dailyFileDownload.htm

请求参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,与提交订单时的保持一致 1001234001101
terminalId String 必选 8 终端号,与提交订单时的保持一致 999999
token String 必选 32 唯一关联号,由我司提供

日终交易文件下载返回

对账文件首行为汇总行,其他行为明细行,各行数据以“|”分隔。

首行

商户号|终端|结算币别|对账日期|总消费笔数|总消费金额|总消费手续费金额|总退款笔数|总退款金额|总退款手续费|预留字段

明细行

交易类型|交易号|商户订单号|商户订单时间|交易确认时间|订单币别|订单金额|结算币别|结算金额|手续费金额|支付方式|银行代码

首行参数

参数 是否必填 描述 示例值
商户号 必选 由我司提供 1001234001101
终端 必选 由我司提供 999999
结算币别 必选 币别代码,详细请参考币别代码附录 CNY
对账日期 必选 年月日,例如:20160101 20160101
总消费笔数 必选 明细中的交易笔数 100
总消费金额 必选 目标金额汇总,单位为元,精确到小数点后两位 10.00
总消费手续费金额 必选 交易的手续费汇总,单位为元,精确到小数点后两位 10.00
总退款笔数 必选 明细中的退款笔数 2
总退款金额 必选 退款金额,单位为元,精确到小数点后两位 10.00
总退款手续费 必选 退款返回的手续费,单位为元,精确到小数点后两位 10.00
预留字段 可选 总退款扣费,如后续退款收手续费则汇总到这个字段

明细行参数

参数 是否必填 描述 示例值
交易类型 必选 sales/refund
交易号 必选 我方消费交易号或退款交易号 2000003884
商户订单号 必选 商户消费交易订单号或退款交易申请号 20170822114749925
商户订单时间 必选 商户提交时间 2017082210220712
交易确认时间 必选 系统交易状态确认成功的时间 2017082210220712
订单币别 必选 订单币别,详细请参考币别代码附录 CNY
订单金额 必选 订单金额,单位为元,精确到小数点后两位 10.00
结算币别 必选 结算币别,详细请参考币别代码附录 CNY
结算金额 必选 结算金额,单位为元,精确到小数点后两位 10.00
手续费 必选 消费手续费金额,币别同结算币别。单位为元,精确到小数点后两位 10.00

关单接口

当前关单接口,支付宝扫码需注意:支付宝扫码支付必须通过支付宝app扫码后方可发起关单申请。

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

提交参数

请求地址

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/pay/unifiedclose.htm
正式环境 https://global.chinapnr.com/pay/unifiedclose.htm

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 必选 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
bgUrl String 256 服务器接受关单结果的后台地址商户不传不会通知 https://www.merchant.com/pay/notifyReceiverBg.do
orderId string 必选 32 原交易订单号 20170728120001299
signMsg String 必选 2048 签名字符串,签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
-	按以下固定字段顺序进行加签
- 只对非空值的字段进行加签。
bgUrl={bgUrl}&merchantAcctId={merchantAcctId}&orderId={orderId}

同步返回结果

关单请求处理完成后,会返回如下数据

返回参数

参数 类型 是否必填 最大长度 描述 示例值
respCode String 6 错误代码 000000 关单成功
120088 关单失败:订单已关闭
000002 受理成功,当且仅当通道30秒内未给明确结果时返回,商户可以尝试再次关单或接受异步通知进行处理。
其它则为处理失败
respMsg String 512 错误描述 失败错误描述

异步返回结果

当且仅当通道30秒内同步未返回明确结果,汇付在收到通道关单处理完成之后,会给商户返回如下数据:

返回参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 32 会员账号,与提交订单时的保持一致 1001234001101
orderId String 32 商户订单号,与提交订单时一致 20170728120001299
closeResult String 2 处理结果:10-关单成功其他均为失败 10
errCode String 8 120088:订单已关闭 120088
signMsg String 2048 签名字符串,商户需对该字段进行验签。详情请参考验签方法。对于所有值不为空的参数及对应值,按照字母顺序组成字符串:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
注:若通过sdk接入,则无需自己处理,代码已封装
-	按以下字段字母顺序进行验签
- 只对非空值的字段进行验签。
closeResult={closeResult}&errCode={errCode}&merchantAcctId={merchantAcctId}&orderId={orderId}

转账支付接口目录:

1.转账支付-网关

转账支付-网关流程请参考支付流程中的序列图:时序图8

正式环境发送异步通知只支持443或80端口 其他端口暂时不支持

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

提交参数

1.1预下单

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/pay/unifiedorder.htm
正式环境 https://global.chinapnr.com/pay/unifiedorder.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
pageUrl String 256 接收入账标识结果的页面地址网关模式转账支付时, 会带结果跳转商户页面,需商户根据交易结果展示对应页面(获取入账标识后展示打款银行账号、打款银行名称等信息) https://www.merchant.com/pay/notifyReceiverPg.do
bgUrl String 256 服务器接受支付结果的后台地址 https://www.merchant.com/pay/notifyReceiverBg.do
version String 10 网关版本,固定值:3.0 3.0
language String 3 网关页面显示语言种类,固定值:1
1-中文显示
1
signType String 256 签名类型,固定值:4
4-RSA加签
4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
payerName String 条件必选 96 支付人姓名,中文名,网银直连时必填 张三
payerContactType String 1 支付人联系方式类型,固定值:1或者2
1-代表电子邮件方式
2-其他联系方式
1
payerContact String 条件必选 64 支付人联系方式,根据payerContactType的方式填写对应字符,邮箱或者其他联系方式,转账支付必填,填写支付人邮箱地址 13400000000
payerIdentityCard String 条件必选 32 支付人身份证号码,字符串,18位身份证号,如果身份证号包含X,请保持字母为大写;跨境结算且为直连模式时必填 320125198800001000
mobileNumber String 32 支付人手机号 15800001111
cardNumber string 条件必选 32 支付人所持卡号。 6225881257400000
customerId string 条件必填 32 支付人在商户系统的客户编号。快捷支付时必填,方便用户二次支付; jd1001
customerIp string 条件必填 32 直连微信APP支付必填;
服务商公众号支付必填;
支付宝支付方式建议填写;
不支持v6ip;
客户ip;示例:127.0.0.1
orderId string 32 商户订单号,只允许使用字母、数字、_,每商户提交的订单号,必须在自身账户交易中唯一 20170728120001299
inquireTrxNo string 32 查询流水号
商户从CHINAPNR外汇询价时需填入PNR返回的工单号,用于锁定汇率,不填则根据交易时间实时询价
交易前已在CHINAPNR询价返回工单号:2089,则填入2089
orderCurrency String 3 订单币种,3位币别码,详情请参照币别代码附录。当该字段不为CNY时,必须与settlementCurrency一致。
默认请填写CNY,如需其他币别,请联系我司确认
如人民币:CNY
settlementCurrency String 3 结算币种,3位币别码,详情请参照币别代码附录
默认请填写CNY,如需其他币别,请联系我司确认
如人民币:CNY
orderAmount Number 12 商户订单金额,整型数字,单位为分。日韩元支持的最小单位为元。 如100元,则填写10000
orderTime String 14 商户订单提交时间,一共14位格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] 20071117020101
productName String 256 商品名称 订单对应的商品信息,该内容可能会显示给支付人,请尽可能简短完整。
productNum Number 8 商品数量,整型数字 例:
单个商品数量:1
多个商品数量:商品总数量
productId String 32 商品代码,请根据我司提供的商品代码附录进行填写。 如服饰箱包,填写:100200(如多个商品填写最主要的商品代码)
productDesc String 256 填写规则:
商品编号|商品名称|商品数量|商品单价(单位元)|商品链接;商品编号|商品名称|商品数量|商品单价(单位元)|商品链接

填写说明:
1、同一商品用半角竖线分隔,不同商品间用半角分号分隔
2、商品编号,商家该款商品的唯一编码
3、其中,商品编号、商品名称、商品数量、商品单价必填,商品链接非必填(参数非必填,栏位|必要填写)
填写示例:
200R32P|爱他美1段|2|250|http://baidu.com;200R32M|爱他美2段|1|130|
ext1 String 128 扩展字段1,英文或中文字符串支付完成后,按照原样返回给商户 当deviceType=2且payType=1(微信H5)时,该字段值为JSON格式,内容参考如下:
{
"deviceInfo":"1",
"appInfoId":"xxxxxxx",
"appName":"xxxxxxx"
}
字段解释:
deviceInfo:
1:苹果APP
2:安卓APP
3:IOS手机网站
4:ANDROID手机网站
appInfoId:
苹果APP:IOS应用唯一标识
安卓APP:APP包名
WAP:网站首页URL,须保证公网能正常访问到
appName:
APP:app的名字
WAP:网站名字
ext2 String 128 扩展字段2,英文或中文字符串支付完成后,按照原样返回给商户 扩展字段2
openId String 条件必填 128 deviceType=2,payType=7或8时必填,关注微信公众号的用户分配的id,可参考微信官方文档指引 如:
op5EP1G8XtyYH1VvmAbleB3AYgc8
deviceType String 1 1:pc端支付2:移动端支付 1
payType String 4 当deviceType=1时
G:转账支付(PC网关)

当deviceType=2时
G:转账支付(移动端网关)
bankId String 8 银行代码,请参考银行代码表附录。网银直连时必填;即deviceType=1且payType为4时 如中国农业银行,ABC
redoFlag String 1 1表示同一订单禁止重复提交标志,预留字段;订单失败后才可以重新提交
divFlag String 1 指定交易需要分账时上送 1表示分账,不上送或上送0表示不分账;分账需要联系我司运营进行开通配置
riskInfo JSON 条件必填 1024 详细描述参见附录riskInfo,留学、航空、酒店类需按要求上送。
asyncUrl String 条件必填 256 转账支付-网关模式(PC/移动端)必填,用以接受1.3中的网关中转异步下单结果
signMsg String 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
-	按以下固定字段顺序进行加签
- 仅对非空字段进行加签 pageUrl={pageUrl}&bgUrl={bgUrl}&merchantAcctId={merchantAcctId}&terminalId={terminalId}& customerId={customerId}&orderId={orderId}&orderAmount={orderAmount}&orderTime={orderTime}&productDesc={productDesc}&ext1={ext1}&ext2={ext2}& deviceType={deviceType}&payType={payType}&shortCardno={shortCardno}

返回结果

交易结果会同时通知提交时pageUrl和bgUrl对应的地址。

1.2预下单返回

预下单请求处理完成后,会返回如下数据,:

参数名称 参数含义 最大长度 参数说明
url 返回地址 1024 需转义
type=1:商户需将url转换成二维码展示
type=2:商户需将用户的浏览器跳转至该url
type=3:此字段为空
type=4:此字段为空
queryUrl 扫码结果轮训地址 1024 备用字段
type 返回类型 1 1:url是二维码
2:url跳转地址:
(1)聚合网关(deviceType=1,payType=6或6-123等;deviceType=2,payType=5或5-123等)及微信服务商公众号支付返回url;
(2)转账支付-PC/移动网关模式返回url,商户需跳转至该url以进行后续操作;此场景下,商户需先关注2.3的结果,若2.3返回成功,则可通过2.4接收交易结果(也可通过交易查询来查询交易结果);若2.3返回失败,则交易失败,不再有2.4的异步结果
3:其他(payInfo):
(1)微信支付(公众号、小程序)、微信直连APP/支付宝直连APP支付为payInfo;
(2)转账支付-API模式为payInfo
4:APP转小程序的特殊返回
respCode 错误代码 6 000000 成功,其它为异常
respMsg 错误描述 512 失败错误描述
payInfo 支付信息 64 当type为3、4时返回回。
type=3时:
如果是支付宝APP直连支付、微信APP直连支付、微信APP支付、微信公众号支付、微信小程序支付,则为微信生成的预支付回话标识,用于后续接口调用中使用
如果是转账支付API形式,则为支付人转账所需的收款银行账户信息,格式如下:
{
“referenceId”:”付款参考号,支付人转账时填写”; “”benificiaryName:”汇付收款银行账户户名”; “benificiaryBank”:”汇付的收款账户所属银行”; “bankAddr”:”汇付收款银行地址”; “benificiaryAcct”:”汇付收款账号”; “cinapsNo”:”联行号”;
}
Type=4时:
PP转小程序调用返回值,
{“username”:”小程序原始ID”,”path”:”/app2minip/payment?seqId=xxxxxx”}

1.3网关中转下单结果返回

当支付方式为转账支付-网关(PC/移动端),即deviceType=1且payType=F,deviceType=2且payType=F两种支付方式时返回,接入时请按照实际需要进行获取(字段可能后续会有增加),不要限制必须是如下字段。

参数 类型 最大长度 参数含义 参数说明
merchantAcctId String 32 会员账号,与提交订单时的保持一致 同请求,原样返回
terminalId String 8 终端号,与提交订单时的保持一致 同请求,原样返回
version String 10 网关版本,与提交订单时一致 同请求,原样返回
orderId String 32 商户订单号,与提交订单时一致 同请求,原样返回
orderTime String 14 订单时间yyyyMMddHHmmss 同请求,原样返回
orderCurrency String 3 订单币种,与提交订单时一致 同请求,原样返回
orderAmount Number 12 订单金额扩大100倍 同请求,原样返回
dealId String 32 处理交易编号 PNR的交易唯一标识
dealTime String 14 处理交易时间yyyyMMddHHmmss PNR收到交易请求的时间
ext1 String 128 扩展字段1 同请求,原样返回
ext2 String 128 扩展字段2 同请求,原样返回
respCode String 6 错误代码 000000 成功,成功时可根据type进行下一步处理,目前仅为payInfo类型;其它返回码为异常
respMsg String 512 错误描述 失败错误描述
type String 1 返回类型 3:其他(payInfo)
payInfo String 64 支付信息 目前支持转账支付-网关模式,格式如下:
{
“referenceId”:”付款参考号,支付人转账时填写”; “”benificiaryName:”汇付收款银行账户户名”; “benificiaryBank”:”汇付的收款账户所属银行”; “bankAddr”:”汇付收款银行地址”; “benificiaryAcct”:”汇付收款账号”; “cinapsNo”:”联行号”; }
signMsg String 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成merchantAcctId,terminalId,version,orderId,orderTime,orderCurrency,orderAmount,dealId,dealTime,respCode,payInfo,按字母顺序先排序后加签
注:若通过sdk接入,则无需自己处理,代码已封装

1.4返回商户支付结果

在用户支付完成之后,会给商户返回如下数据:

商户在接受到Chinapnr异步通知后,应返回成功接受内容,如"SUCCESS"。

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 32 会员账号,与提交订单时的保持一致 1001234001101
terminalId String 8 终端号,与提交订单时的保持一致 999999
version String 10 网关版本,与提交订单时一致 3.0
payType String 4 支付方式,与提交订单时一致 00
bankId String 8 银行代码,与提交订单一致 BOC
orderId String 32 商户订单号,与提交订单时一致 20170728120001299
orderTime String 14 商户订单提交时间,与提交订单时一致 20171117020101
orderCurrency String 3 订单币种,与提交订单时一致 USD
orderAmount Number 12 商户订单金额,与提交订单时一致 10000
dealId String 32 收单系统交易号,该交易在收单系统对应的交易号 20000100
dealTime String 14 交易时间,交易失败时可能为空。收单系统对交易进行处理的时间,格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] 20170728120001
ext1 String 128 扩展字段1,与提交订单时一致 扩展字段1
ext2 String 128 扩展字段2,与提交订单时一致 扩展字段2
extInfo Json 可选 不定长 需单独申请配置,配置后返回该字段,目前包括:authTransId(微信支付宝端支付单号),authMerOrderId(微信支付宝端商家订单号),actualPayType(实际支付方式),deviceType(实际支付的设备类型);前两个字段当微信/支付宝支付时返回,后两个字段值可联合得到消费者最后选择的支付方式。(参考请求中payType和deviceType的定义)由于银联特殊规则,当支付方式为支付宝时,银联会在支付宝的原始支付单号前加两位数字,若接入方需要该字段进行逻辑处理,请依据银联规则裁剪长度。(若银联规则有变更,我司会在得到通知后告知新规则) 2020-11-16 V4.5新增]样例为:{"deviceType":"1","authMerOrderId":"07012011163829365007287","actualPayType":"2","authTransId":"932020111622001466645715328950"}该字段以key:value形式返回,每个key之间,分隔;接入时需要支持该字段的扩展,以备后续该字段增加/减少key值。

注意:商户接收到的字段值为urlEncode之后的值(如:extInfo=%7B%22deviceType%22%3A%222%22%2C%22authMerOrderId%22%3A%2207212011253343123302602%22%2C%22actualPayType%22%3A%227%22%2C%22authTransId%22%3A%224200000744202011259445484075%22%7D),需要对=号后面的内容进行urlDecode,上文解码之后的内容为:{"deviceType":"2","authMerOrderId":"07212011253343123302602","actualPayType":"7","authTransId":"4200000744202011259445484075"}
bankDealId String 128 银行交易号,后端通道系统的交易流水号。
需要按照海关179 号文报送的商户可以解析该字段存储,格式为1 位字母(标识银联/网联/其他)+流水号。其中U-银联,N-网联,D-直连,O-其他目前后端渠道在断直连背景下 A-支付宝直连,b-微信直连,基本均为U或者N
如:U20181203215458215 表示交易渠道为银联,流水号为20181203215458215
partyOrderId String 可选 64 支付宝直连APP、微信直连APP四种场景下返回
payResult String 2 处理结果:
10-支付成功
其他均为失败
10
errCode String 128 错误代码,详细请参考
signMsg String 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成。对于所有值不为空的参数及对应值,按照字母顺序组成字符串 DSA:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
singMsg需要进行urldecode解码:veryfyResult = XMLSecurityProcess.veryfySignature(dataReceived, URLDecoder.decode(signMsg));
注:若通过sdk接入,则无需自己处理,代码已封装
-	下述字段按首字母排列进行验签
- 仅对非空字段进行验签
bankDealId={bankDealId}&bankId={bankId}&dealId={dealId}&dealTime={dealTime}&errCode={errCode}&ext1={ext1}&ext2={ext2}&merchantAcctId={merchantAcctId}&orderAmount={orderAmount}&orderCurrency={orderCurrency}&orderId={orderId}&orderTime={orderTime}&payResult={payResult}&payType={payType}&terminalId={terminalId}&version={version}

2.转账支付-API

转账支付-API流程请参考支付流程中的序列图:时序图9

正式环境发送异步通知只支持443或80端口 其他端口暂时不支持

本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
根据PCI-DSS检查要求,正式环境禁止使用低版本的SSL3.0 TLS1.0 TLS1.1等协议,请使用高于TLSv1.2及以上发送请求,推荐使用TLSv1.2

提交参数

2.1预下单

环境 HTTPS请求地址
测试环境 https://hfgj.testpnr.com/pay/banktransApi.htm
正式环境 https://global.chinapnr.com/pay/banktransApi.htm

协议参数

参数 类型 是否必填 最大长度 描述 示例值
inputCharset String 1 字符集,固定值:1
1-UTF-8
1
pageUrl String 256 接受支付结果的页面地址网关模式转账支付时,会带结果跳转商户页面,需商户根据交易结果展示对应页面 https://www.merchant.com/pay/notifyReceiverPg.do
bgUrl String 256 服务器接受支付结果的后台地址 https://www.merchant.com/pay/notifyReceiverBg.do
version String 10 网关版本,固定值:3.0 3.0
language String 3 网关页面显示语言种类,固定值:1
1-中文显示
1
signType String 256 签名类型,固定值:4
4-RSA加签
4

业务参数

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 32 会员账号,由我司提供的商户号+01,共13位数字 1001234001101
terminalId String 8 终端号,由我司提供的终端号,不同的接口/功能可能会分配不同的终端号,故请考虑多终端情况下的兼容。 999999
payerName String 96 支付人姓名,中文名 张三
payerContactType String 1 支付人联系方式类型,固定值:1或者2
1-代表电子邮件方式
2-其他联系方式
1
payerContact String 条件必选 64 支付人联系方式,根据payerContactType的方式填写对应字符,邮箱或者其他联系方式,转账支付必填,填写支付人邮箱地址 13400000000
payerIdentityCard String 32 支付人身份证号码,字符串,18位身份证号;如果身份证号包含X,请保持字母为大写 320125198800001000
mobileNumber String 32 支付人手机号 15800001111
cardNumber string 32 支付人所持卡号。 6225881257400000
customerId string 32 支付人在商户系统的客户编号。快捷支付时必填,方便用户二次支付 jd1001
customerIp string 条件必填 32 直连微信APP支付必填;
服务商公众号支付必填;
支付宝支付方式建议填写;
客户ip;示例:127.0.0.1
orderId string 32 商户订单号,只允许使用字母、数字、_,每商户提交的订单号,必须在自身账户交易中唯一 20170728120001299
inquireTrxNo string 32 查询流水号
商户从CHINAPNR外汇询价时需填入PNR返回的工单号,用于锁定汇率,不填则根据交易时间实时询价
交易前已在CHINAPNR询价返回工单号:2089,则填入2089
orderCurrency String 3 订单币种,3位币别码,详情请参照币别代码附录。当该字段不为CNY时,必须与settlementCurrency一致。
默认请填写CNY,如需其他币别,请联系我司确认
如人民币:CNY
settlementCurrency String 3 结算币种,3位币别码,详情请参照币别代码附录
默认请填写CNY,如需其他币别,请联系我司确认
如人民币:CNY
orderAmount Number 12 商户订单金额,整型数字,单位为分。日韩元支持的最小单位为元。 如100元,则填写10000
orderTime String 14 商户订单提交时间,一共14位格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] 20071117020101
productName String 256 商品名称
productNum Number 8 商品数量,整型数字 1
productId String 32 商品代码,请根据我司提供的商品代码附录进行填写。 如服饰箱包,填写:100200(如多个商品填写最主要的商品代码)
productDesc String 256 填写规则:
商品编号|商品名称|商品数量|商品单价(单位元)|商品链接;商品编号|商品名称|商品数量|商品单价(单位元)|商品链接

填写说明:
1、同一商品用半角竖线分隔,不同商品间用半角分号分隔
2、商品编号,商家该款商品的唯一编码
3、其中,商品编号、商品名称、商品数量、商品单价必填,商品链接非必填(参数非必填,栏位|必要填写)
填写示例:
200R32P|爱他美1段|2|250|http://baidu.com;200R32M|爱他美2段|1|130|
ext1 String 128 扩展字段1,预留 扩展字段1
ext2 String 128 扩展字段2,预留 扩展字段2
openId String 128 deviceType=2,payType=7或8时必填,关注微信公众号的用户分配的id,可参考微信官方文档指引 如:
op5EP1G8XtyYH1VvmAbleB3AYgc8
deviceType String 1 1:pc端支付 1
payType String 4 F:转账支付(API)
bankId String 8 银行代码,请参考银行代码表附录。网银直连时必填;即deviceType=1且payType为4时 如中国农业银行,ABC
redoFlag String 1 1表示同一订单禁止重复提交标志,预留字段,订单失败后才可以重新提交
divFlag String 1 指定交易需要分账时上送 1表示分账,不上送或上送0表示不分账;分账需要联系我司运营进行开通配置
riskInfo JSON 1024 详细描述参见附录riskInfo,留学、航空、酒店类需按要求上送。
asyncUrl String 256 转账支付-网关模式(PC/移动端)必填,用以接受网关中转异步下单结果
signMsg String 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成
注:若通过sdk接入,则无需自己处理,代码已封装
参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行商户密钥进行加签
-	按以下固定字段顺序进行加签
- 仅对非空字段进行加签 pageUrl={pageUrl}&bgUrl={bgUrl}&merchantAcctId={merchantAcctId}&terminalId={terminalId}& customerId={customerId}&orderId={orderId}&orderAmount={orderAmount}&orderTime={orderTime}&productDesc={productDesc}&ext1={ext1}&ext2={ext2}&deviceType={deviceType}&payType={payType}

返回结果

交易结果会同时通知提交时pageUrl和bgUrl对应的地址。

2.2预下单返回

预下单请求处理完成后,会返回如下数据,:

参数名称 参数含义 最大长度 参数说明
url 返回地址 1024 type=3:此字段为空
queryUrl 扫码结果轮训地址 1024 type=3:此字段为空
type 返回类型 1
3:其他(payInfo):
转账支付-API模式为payInfo
respCode 错误代码 6 000000 成功,其它为异常
respMsg 错误描述 512 失败错误描述
payInfo 支付信息 64 转账支付API形式,则为支付人转账所需的收款银行账户信息,格式如下:
{
“referenceId”:”付款参考号,支付人转账时填写”; “”benificiaryName:”汇付收款银行账户户名”; “benificiaryBank”:”汇付的收款账户所属银行”; “bankAddr”:”汇付收款银行地址”; “benificiaryAcct”:”汇付收款账号”; “cinapsNo”:”联行号”;
}

2.3返回商户支付结果

在用户支付完成之后,会给商户返回如下数据:

商户在接受到Chinapnr异步通知后,应返回成功接受内容,如"SUCCESS"。

参数 类型 是否必填 最大长度 描述 示例值
merchantAcctId String 32 会员账号,与提交订单时的保持一致 1001234001101
terminalId String 8 终端号,与提交订单时的保持一致 999999
version String 10 网关版本,与提交订单时一致 3.0
payType String 4 支付方式,与提交订单时一致 00
bankId String 8 银行代码,与提交订单一致 BOC
orderId String 32 商户订单号,与提交订单时一致 20170728120001299
orderTime String 14 商户订单提交时间,与提交订单时一致 20171117020101
orderCurrency String 3 订单币种,与提交订单时一致 USD
orderAmount Number 12 商户订单金额,与提交订单时一致 10000
dealId String 32 收单系统交易号,该交易在收单系统对应的交易号 20000100
dealTime String 14 交易时间,交易失败时可能为空。收单系统对交易进行处理的时间,格式为:年[4位]月[2位]日[2位]时[2位]分[2位]秒[2位] 20170728120001
ext1 String 128 扩展字段1,与提交订单时一致 扩展字段1
ext2 String 128 扩展字段2,与提交订单时一致 扩展字段2
extInfo Json 可选 不定长 需单独申请配置,配置后返回该字段,目前包括:authTransId(微信支付宝端支付单号),authMerOrderId(微信支付宝端商家订单号),actualPayType(实际支付方式),deviceType(实际支付的设备类型);前两个字段当微信/支付宝支付时返回,后两个字段值可联合得到消费者最后选择的支付方式。(参考请求中payType和deviceType的定义)由于银联特殊规则,当支付方式为支付宝时,银联会在支付宝的原始支付单号前加两位数字,若接入方需要该字段进行逻辑处理,请依据银联规则裁剪长度。(若银联规则有变更,我司会在得到通知后告知新规则) 2020-11-16 V4.5新增]样例为:{"deviceType":"1","authMerOrderId":"07012011163829365007287","actualPayType":"2","authTransId":"932020111622001466645715328950"}该字段以key:value形式返回,每个key之间,分隔;接入时需要支持该字段的扩展,以备后续该字段增加/减少key值。

注意:商户接收到的字段值为urlEncode之后的值(如:extInfo=%7B%22deviceType%22%3A%222%22%2C%22authMerOrderId%22%3A%2207212011253343123302602%22%2C%22actualPayType%22%3A%227%22%2C%22authTransId%22%3A%224200000744202011259445484075%22%7D),需要对=号后面的内容进行urlDecode,上文解码之后的内容为:{"deviceType":"2","authMerOrderId":"07212011253343123302602","actualPayType":"7","authTransId":"4200000744202011259445484075"}
bankDealId String 128 银行交易号,后端通道系统的交易流水号。
需要按照海关179 号文报送的商户可以解析该字段存储,格式为1 位字母(标识银联/网联/其他)+流水号。其中U-银联,N-网联,D-直连,O-其他目前后端渠道在断直连背景下 A-支付宝直连,b-微信直连,基本均为U或者N
如:U20181203215458215 表示交易渠道为银联,流水号为20181203215458215
partyOrderId String 可选 64 支付宝直连扫码、支付宝直连APP、微信直连扫码、微信直连APP四种场景下返回
payResult String 2 处理结果:
10-支付成功
其他均为失败
10
errCode String 128 错误代码,详细请参考
signMsg String 2048 签名字符串请参考签名方法
加签证书,请参照私钥公钥生成。对于所有值不为空的参数及对应值,按照字母顺序组成字符串 DSA:参数1={参数1}&参数2={参数2}&……&参数n={参数n}然后进行支付平台证书加密形成密文后进行2048位的Base64转码。
singMsg需要进行urldecode解码:veryfyResult = XMLSecurityProcess.veryfySignature(dataReceived, URLDecoder.decode(signMsg));
注:若通过sdk接入,则无需自己处理,代码已封装
-	下述字段按首字母排列进行验签
- 仅对非空字段进行验签
bankDealId={bankDealId}&bankId={bankId}&dealId={dealId}&dealTime={dealTime}&errCode={errCode}&ext1={ext1}&ext2={ext2}&merchantAcctId={merchantAcctId}&orderAmount={orderAmount}&orderCurrency={orderCurrency}&orderId={orderId}&orderTime={orderTime}&payResult={payResult}&payType={payType}&terminalId={terminalId}&version={version}
下载支付流程文档:支付流程图文档,或者查看下方流程图

微信/支付宝交易(生产环境)的默认前提:

1、客户需要提供用于微信/支付宝入驻的主体资质,通过汇付向微信/支付宝入驻获得微信/支付宝的特约商户号;
2、对于微信支付,客户需要完成如下事宜方能完成完整的入驻/配置工作:
(1)微信入驻后,商户需要扫描我司提供的微信渠道商二维码确认关联;
(2)公众号支付(JSAPI支付):客户需要提供用于唤起微信收银台的支付授权目录,汇付需将该目录(支持不超过5个)配置到上述微信商户号下;
(3)公众号支付时,客户还需提供自身的公众号APPID,同样通过我司完成与前述微信商户号的关联;小程序同理,但小程序支付无需支付授权目录;
(4)客户发起公众号/小程序支付时,需要提前获取openId,在调用我司聚合支付接口时上送。
3、具体所需入驻材料、流程细节可在实际对接时沟通获取。

1.微信公众号支付(JSAPI)时序图

2.微信小程序支付时序图

3.微信APP支付(通过小程序支付间接实现)时序图

4-1.支付宝扫码-跳转汇付网关模式-PC(二维码两小时失效)

4-2.支付宝扫码-非跳转模式(下单后返回codeUrl)(二维码两小时失效)

返回的codeUrl样例为:
https%3A%2F%2Fqr.alipay.com%2Fbax04967znkjcqjsbnxp0015,注意需要进行urlDecode
此url可以通过浏览器拉起支付宝app,也可以转换为二维码展示供消费者扫码支付。

5.移动端聚合支付

类似deviceType=1,payType=6这种PC聚合,移动聚合包含了支付宝H5和快捷支付,商家也可以通过下单时指定具体的支付方式来唯一展示一种支付方式。

6.微信公众号包装为微信扫码支付

7.H5拉起小程序并使用小程序支付

8.转账支付-网关模式

9.转账支付-api

10.分账交易流程

alt用户开户:步骤1,2,3:调用个人开户或企业开户接口:个人用户开户接口企业用户开户接口

alt交易及分账:步骤4,5:调用聚合支付接口和步骤6,7,8:分账接口:聚合支付接口收单分账接口

alt交易退款:步骤9,10:调用交易退款接口:交易退款接口

alt分账回退:步骤11,12,13:调用分账回退接口分账回退(目录4)

alt分账完结:步骤14,15:调用分账完结接口分账完结(目录6)

11.银联APP支付

银联APP支付支持银行APP、云闪付APP等多种APP支付,商家APP通过整合银联SDK实现一次对接支持多种支付APP。

银联SDK下载地址:https://open.unionpay.com/tjweb/acproduct/list?apiSvcId=3021&index=4

12.广告业务B2B支付流程

该方案适用于广告代理服务平台的客户为企业、并且使用企业网银支付的场景,主要是广告服务平台基于自身资金来源与签约协议匹配性要求(合作客户为A,那么付款对象应该也为A;不为A时广告服务平台不接受,可能直接发起退款)。


1.支付申请时提交期望的企业付款人信息:
指定上送期望付款人,格式为:
{ "companyName": "企业名称", "companyLicenseNo": "DZ1000-11", "legalPersonName": "张三", "legalPersonIdNo": "342623198812171432" }
(1)付款企业名称:companyName
(2)付款企业营业执照编码:companyLicenseNo(统一社会信用代码)
(3)付款企业法人姓名:legalPersonName
(4)付款企业法人身份证号:legalPersonIdNo


2.支付成功(仅限B2B网银支付)后广告服务平台查询实际付款人
根据平台自身实际需要,如果不接受付款人和合作客户不同的情况,平台可主动退款;若一致则可继续服务。


3.根据需要获取B2B支付业务的电子回单


4.根据实际需要,以企业客户的法人身份证+姓名发起资金出境(购汇或人民币出境)