本开发文档的阅读对象为:具有一定开发能力,了解PHP、JAVA、.NET等开发语言的开发、维护或管理人员。
本文档定义CHINAPNR支付网关商户接入接口规范,提供接口报文参数说明、示例报文、信息安全解决方案,并给出相关问题说明等,以帮助商户技术人员接入,便于尽快投入使用。
版本号 | 更新说明 | 更新日期 |
---|---|---|
V1.0 | 创建 | 2017.07.27 |
-
商户会员号
Chinapnr网关支付时提交的为商户会员号,并非商户号,会员号=商户号+"01"(如商户号为abc时,会员号为abc01)
-
网关直连
商户在自己的收银台展示银行列表,消费者在商户收银台选择支付使用的银行,支付过程中不出现汇付的收银台,直接跳转到银行网银页面。(注:直连模式需要商户自行采集消费者的身份信息及卡号)
商户接入Chinapnr网关支付时,调用API须遵循以下规则:
传输方式 | 为保证交易安全性,采用 HTTPS 传输 |
提交方式 | 采用 POST 方法提交 |
数据格式 | HTTP KEY=VALUE 格式 |
字符编码 | 支持 UTF-8 字符编码 |
签名算法 | 商户生成签名字符串,现支持的签名算法类型为 RSA-SHA1 |
签名要求 | 请求和接收数据均需要校验签名 |
场景介绍
“收款+外币结算”的一站式接口,收款资金将按约定的结算周期全部以外币的形式结算至商户指定境外银行账户。支持网银、微信扫码、支付宝扫码等支付方式。适用于PC端。
可参考跨境外汇模拟下单
第一步:消费者击进入商户网页购物进行支付

图3.0 商户网页下单
第二步:商户调用跨境系统网关,消费者跳转到跨境外汇支付网关页面。消费者选择支付方式和银行,输入证件信息,发起支付。
注意:如果调用接口选择直连模式,即调用时直接指定bankId,则不会显示此网关页面,直接跳转到网银。

图3.1 调用跨境外汇网关支付
第三步:消费者根据选择支付方式和银行跳转到银行页面,如网银支付-招商银行,消费者输入卡号密码等支付完成。

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

图3.3 返回商户页面
概述
本文档展示了如何从零开始,与Chinapnr跨境系统网关对接的流程。
第一步:获取账号信息
-
商户需与前端销售沟通开通测试账号或生产账号,并提供接受邮箱地址。
-
1-2个工作日内由开通组负责将开通的账号信息发送至商户邮箱。
第二步:配置密钥
-
开发者调用接口前需要先生成RSA密钥,RSA密钥包含私钥、公钥。生成密钥后在商户后台进行密钥配置,配置完成后可发起交易。详细步骤请参考《配置密钥》。
第三步:搭建和配置开发环境
-
下载示例代码Demo
为了帮助开发者调用开放接口,我们提供了示例代码下载,包含JAVA、PHP和.NET三语言版本,封装了签名&验签、HTTP接口请求等基础功能。请先下载对应语言版本的Demo并引入您的开发工程《Demo下载》。 -
将Demo运行成功,并将代码集成到您的项目中,记得修改商户号,终端号,和私钥证书。如生产环境,还需更换Chinapnr生产公钥证书。
调用流程
接口调用时序图:

图4.1 非直连模式

图4.2 直连模式
-
用户(交易过程中的买家或实际支付人,以下简称用户)在商户(交易过程中的卖家或者电商平台,以下简称商户)网站下单完毕后确认进行在线支付。
-
用户点击确认按钮后,商户系统收集订单信息并通过《跨境外汇接口》下单接口向汇付天下(以下简称汇付)发起支付请求。
-
非直连模式: 汇付对商户的支付请求进行处理并跳转到汇付的支付页面,该页面显示订单信息,商户开通的支付方式以及需要用户完善的身份信息(如身份证信息、手机号等)。用户选择银行并完善身份信息后点击确认支付,此时页面跳转到该用户对应的银行支付页面。
直连模式: 汇付对商户的支付请求进行处理后,直接跳转到银行页面。(注意:直连模式在接口提交时必须填写身份信息和卡号字段,并指定支付方式和银行。) -
用户在银行页面按照银行要求完成支付。
-
支付完成后,银行页面会自动(或由用户发起)跳转到汇付的支付成功页面。
-
支付结果页面跳转到汇付后,汇付会进行相关处理,并继续将页面跳转到由商户提供的支付结果页面,汇付在跳转时所携带的参数请参照《跨境外汇接口》中的返回参数章节。
-
商户系统根据收到的支付结果进行相应的展示,告知用户该笔订单的支付结果。
-
同时汇付系统会在后台通过《支付结果通知》接口通知商户系统该笔订单的支付结果,该地址不能与第6步中提供的支付结果页面地址相同。 后台通知以收到商户系统返回的http状态码200表示成功,否则将继续通知,如果连续通知10次仍不成功将停止通知。
注意:为确保安全,商户在收到汇付支付结果通知后,务必先验证返回的签名字段。
概述
Chinapnr开放平台采用了 RSA 安全签名机制,开发者可以通过Chinapnr公钥验证消息来源,同时可使用自己的私钥对信息进行加密。RSA 算法及数字签名机制是Chinapnr平台与开发者网关安全通信的基础,若开发者不熟悉 RSA 及数字签名,请先查阅相关资料。
RSA 私钥及公钥生成
1. 生成 RSA 私钥及公钥,请详见“附录一:私钥公钥生成及范例”。 生成的文件格式如:客户私钥private-rsa.pfx,客户公钥public-rsa.cer。
商户上传公钥
注意:
-
上传商户公钥前需先联系前端获取商户后台账号和密码,并将客户公钥public-rsa.cer文件前缀名称修改为商户号。 如开通的商户号为10012159865,则证书修改为10012159865.cer上传。
商户平台登录地址 测试环境 / 生产环境进入Platform Management菜单下Certificate Management菜单,转入如下界面:

图5.1 上传公钥
在证书管理,输入邮箱,点击Do Upload上传证书。页面提示上传成功,证书列表中可以查看新增证书,状态为1有效。
下载Chinapnr公钥
点击Download下载系统公钥用于接收跨境系统返回时验签。

图5.2 下载Chinapnr公钥
注意:
不同环境Chinapnr公钥证书需在不对环境的商户后台下载。
Chinapnr网关与开发者的通信主要由开发者主动调用Chinapnr网关接口(下文简称OpenAPI)实现。其中Chinapnr网关地址:
测试环境:https://hfgj.chinapnr.com/pay/receivehw.htm
生产环境:https://global.chinapnr.com/pay/receivehw.htm
接口参数说明请参见《跨境外汇接口说明》
API请求
Chinapnr开放平台的OpenAPI调用采取POST方式(application/x-www-form-urlencoded),内容通过键值对(Key-Value)的形式作为参数传入。
请求示例:
inputCharset=1
pageUrl=http://192.168.1.111:8080/QAMOCK-Test/notifyReceiverPg.do
bgUrl=http://192.168.1.111:8080/QAMOCK-Test/notifyReceiverBg.do
version=3.0
language=1
signType=4
signMsg=Y4pQ4UrpbU+Xj9cELMGaqD8mUiYh3FweS2Ra8j1FSx7WZfSvVJP+m8yzsKeNfifz7sWwa9mSDlWspq607ywy/ny0b2uNzFN2z6oeWhNvOQw77Vq7ASQV/Fl9ZAx0jHWM2+NJ2CA7xzZCya+4GNz3JC5ZSEn5mTKpYdA4bzIdw84=
terminalId=0010001
merchantAcctId=1001215986501
payerName=张三
payerContactType=2
payerContact=15800000000
cardNumber=6225881257000000
mobileNumber=15811111111
customerId=1001
payerIdentityCard=320125198805232313
inquireTrxNo=
orderCurrency=USD
settlementCurrency=USD
orderId=20170801103440477
orderAmount=600
orderTime=20170801103429
productName=IPHONE6
productNum=1
productId=100003
productDesc=IPHONE6港版
ext1=ext1
ext2=ext2
payType=10
bankId=
redoFlag=1
pid=
在提交参数中需要对传入的数据进行签名组成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}&bankId={bankId}&redoFlag={redoFlag}
按顺序用&连接起来组成字符串,格式是:p1=v1&p2=v2。如:
inputCharset=1&pageUrl=http://192.168.1.111:8081/QAMOCK-Test/notifyReceiverPg.do&bgUrl=http://192.168.1.111:8081/QAMOCK-Test/notifyReceiverBg.do&version=3.0&language=1&signType=4&merchantAcctId=1001215986501&terminalId=0010001&payerName=张三&payerContactType=2&payerContact=15800000000&payerIdentityCard=320125198805232313&mobileNumber=15811111111&cardNumber=6225881257000000&customerId=1001&orderId=20170801103807381&orderCurrency=USD&settlementCurrency=USD&orderAmount=600&orderTime=20170801103803&productName=IPHONE6&productNum=1&productId=100003&productDesc=IPHONE6港版&ext1=ext1&ext2=ext2&payType=10&redoFlag=1
2.进行RSA签名后获得sign,再经过Base64编码,具体加签代码请详见Demo其最终的请求报文样式参考如下:
REQUEST URL: https://global.chinapnr.com/pay/receivehw.htm
REQUEST METHOD: POST
CONTENT:
inputCharset=1
pageUrl=http://192.168.1.111:8080/QAMOCK-Test/notifyReceiverPg.do
bgUrl=http://192.168.1.111:8080/QAMOCK-Test/notifyReceiverBg.do
version=3.0
language=1
signType=4
signMsg=Y4pQ4UrpbU+Xj9cELMGaqD8mUiYh3FweS2Ra8j1FSx7WZfSvVJP+m8yzsKeNfifz7sWwa9mSDlWspq607ywy/ny0b2uNzFN2z6oeWhNvOQw77Vq7ASQV/Fl9ZAx0jHWM2+NJ2CA7xzZCya+4GNz3JC5ZSEn5mTKpYdA4bzIdw84=
terminalId=0010001
merchantAcctId=1001215986501
payerName=张三
payerContactType=2
payerContact=15800000000
cardNumber=6225881257000000
mobileNumber=15811111111
customerId=1001
payerIdentityCard=320125198805232313
inquireTrxNo=
orderCurrency=USD
settlementCurrency=USD
orderId=20170801103440477
orderAmount=600
orderTime=20170801103429
productName=IPHONE6
productNum=1
productId=100003
productDesc=IPHONE6港版
ext1=ext1
ext2=ext2
payType=10
bankId=
redoFlag=1
pid=
注意:
没有值的参数无需传递,也无需包含到待签名数据中。
签名时将字符转化成字节流时指定的字符集UTF8。
根据HTTP协议要求,传递参数的值中如果存在特殊字符(如:&、@等),那么该值需要做URL Encoding,这样请求接收方才能接收到正确的参数。此时,待签名数据应该是原始值而不是encoding之后的值。 例如:调用某接口需要对请求参数 email 进行数字签名,那么待签名数据应该是:email=test@abc.com,而不是 email=test%40abc.com。
返回结果
返回示例:
dealTime=20170801110050
errCode=000000
merchantAcctId=1001215986501
orderTime=20170801110026
orderCurrency=USD
dealId=1000014683
version=3.0
bankId=cmb
terminalId=0010001
payResult=10
ext1=ext1
orderAmount=600
ext2=ext2
signMsg=cBFKSxb6fb3On3cMsNMi9YL7yJ5rHayeeAqjnT8zqzMgIJR9W467i4/hNsWNRBYXyitS4JOyrHdOtbEiU38TNotbuACagG/lyWxnzJIWjkMHdQJJNkjErMCQZ/KbpKSeMi/Qpu8l+ArOFPWKWp75lXJ/aadmtIWU7TK8NsuTVMM=
payType=10
orderId=20170801110030142
调用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=cmb&dealId=1000014683&dealTime=20170801110050&errCode=000000&ext1=ext1&ext2=ext2&merchantAcctId=1001215986501&orderAmount=600&orderCurrency=USD&orderId=20170801110030142&orderTime=20170801110026&payResult=10&payType=10&terminalId=0010001&version=3.0
2.将签名参数(signMsg)使用base64解码为字节码串
3.使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及Chinapnr公钥验证签名。具体验签方法 请详见Demo
支付完成后,Chinapnr会向开发者提交的bgUrl地址后台异步返回支付结果。商户处理支付结果以支付结果通知结果为准。
接口返回参数说明请参见《跨境外汇接口说明》
支付结果通知
支付结果通知示例:
dealTime=20170801110050
errCode=000000
merchantAcctId=1001215986501
orderTime=20170801110026
orderCurrency=USD
dealId=1000014683
version=3.0
bankId=cmb
terminalId=0010001
payResult=10
ext1=ext1
orderAmount=600
ext2=ext2
signMsg=cBFKSxb6fb3On3cMsNMi9YL7yJ5rHayeeAqjnT8zqzMgIJR9W467i4%2fhNsWNRBYXyitS4JOyrHdOtbEiU38TNotbuACagG%2flyWxnzJIWjkMHdQJJNkjErMCQZ%2fKbpKSeMi%2fQpu8l%2bArOFPWKWp75lXJ%2faadmtIWU7TK8NsuTVMM%3d
payType=10
orderId=20170801110030142
支付结果通知的验签
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=cmb&dealId=1000014683&dealTime=20170801110050&errCode=000000&ext1=ext1&ext2=ext2&merchantAcctId=1001215986501&orderAmount=600&orderCurrency=USD&orderId=20170801110030142&orderTime=20170801110026&payResult=10&payType=10&terminalId=0010001&version=3.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认为成功,否则会一直通知,通知策略是一共通知16次,前面每隔10s通知一次 一共通知6次每次,后10次通知时间间隔增加(N*60s+30s,N为第几次通知,如第7次通知间隔第一次7min30s)。商户在接受到Chinapnr异步通知后,应返回成功接受内容,如"SUCESS"。
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 | 交易处理失败 |
000010 | 交易退款成功 |
110001 | 必须提交的请求参数未提交 |
110002 | 请求的数据项长度不符 |
110003 | 请求的数据项格式错误,合法格式请参照接入文档 |
110005 | 请求的数据项不合法 |
110006 | 请求的交易币别暂不支持 |
200001 | 订单信息的签名内容不正确 |
120010 | 请求的商户号不存在,请检查后重试 |
120011 | 请求的商户号状态异常,不允许交易 |
120012 | 请求的终端号不存在,请检查后重试 |
120013 | 请求的终端号状态异常,不允许交易 |
120014 | 产品功能未开通,不允许交易 |
120015 | 功能参数未设值,不允许交易 |
120016 | 功能参数非法,不允许交易 |
120023 | 交易请求Ip未知,不允许交易 |
120024 | 支付人Ip在黑名单中,不允许交易 |
120025 | 支付人Ip有变化,存在风险不允许交易 |
120026 | 支付人链接来源有变化,存在风险不允许交易 |
120028 | 未开通任何受理银行,不允许交易 |
120029 | 不可受理的银行代码,不允许交易 |
120030 | 请求的商户号/终端号对应的结算信息未开通,不允许交易 |
120031 | 请求的商户号/终端号对应的结算币别与交易申请的币别不一致,请更换对应终端后重试 |
120032 | 请求的商户号/终端号对应的报价币别与交易申请的币别不一致,请更换对应终端后重试 |
120034 | 请求的商户号/产品代码/币别对应的手续费信息未配置,不允许交易 |
120040 | 商户订单号重复,请先确认订单状态或重新下单后支付 |
120050 | 请求的交易币别与结算币别不一致 |
120051 | 跨境人民币的交易的结算币别只能为CNY |
120052 | 跨境外币支付交易的结算币别不能为CNY |
120061 | 交易金额大于商户最高交易限额 |
120062 | 交易金额低于商户最低交易限额 |
120063 | 当日交易金额已大于日最高交易限额 |
120064 | 无可用的收单通道 |
120065 | 目标币别的汇率不存在 |
120066 | 交易金额精度超出交易币别的最小单位 |
120067 | 询盘流水号非法 |
120068 | 询盘流水号已过期 |
120069 | 支付超时,请重新支付 |
120100 | 该商户账户异常,已被禁止交易 |
120101 | 该商户账户已被冻结,禁止交易 |
120102 | 该商户账户功能已被限制,禁止交易 |
120103 | 该商户账户已被删除,禁止交易 |
120110 | 该商户账户已被止入,禁止交易 |
120111 | 该商户账户已被止出,禁止交易 |
120112 | 该商户账户已被限制充值,禁止交易 |
120113 | 该商户账户已被限制提现,禁止交易 |
120114 | 该商户账户已被限制透支,禁止交易 |
120115 | 该商户账户已被限制支付,禁止交易 |
120116 | 该商户账户已被限制转入,禁止交易 |
120117 | 该商户账户已被限制转出,禁止交易 |
120200 | 分账格式不合法 |
120201 | 分账商户不合法 |
120202 | 分账总金额不正确 |
120203 | 分账方商户号/终端号对应的结算信息未开通,不允许交易 |
120204 | 分账方商户号/终端号对应的结算币别与分账申请的币别不一致,请更换对应终端后重试 |
120205 | 存在分账子订单需要跨境处理,用户身份信息字段不能为空 |
120206 | 分账明细退款金额不正确 |
120207 | 原分账明细交易状态处理中,无法退货,请确认交易状态后重试 |
120300 | 授权商户未开通 |
120301 | 授权参数未设值 |
130001 | 交易失败,风控拒绝 |
130002 | 交易失败,疑似重复交易被拦截 |
130003 | 交易失败,产品不在经营范围内 |
100001 | 不支持的字符编码格式,系统支持的字符编码格式为1.UTF-8,2.GBK,3.GB2312 |
100003 | 页面返回地址和后台返回地址不能同时为空,请使用符合URL规则的http或者https地址 |
100005 | 不支持的网关接口版本号 |
100008 | 不支持的付款方联系方式,系统支持的联系方式为1.电子邮件,2.电话.当联系内容不为空时联系方式不能为空 |
100009 | 付款方的联系内容不正确,请输入合法的联系地址 |
100091 | 支付人手机号输入错误 |
100092 | 支付人身份信息有误 |
100011 | 订单金额不正确,请输入以分为单位的金额 |
100012 | 订单提交时间不正确,请输入以yyyyMMddhhmmss格式的时间字符串 |
100024 | 客户号格式错误 |
100065 | 未提供付款人IP地址,请联系商用户网站支持人员 |
100085 | 结算币种不可为空 |
100086 | 错误的币别代码 |
200001 | 订单信息的签名内容不正确 |
商品编码列表
跨境系统商品类别列表下载商品编码 | 中文类名 |
---|---|
100200 | 服饰箱包 |
100201 | 食品药品 |
100202 | 化妆品 |
100203 | 电子产品 |
100204 | 日用家居 |
100205 | 其他 |
400200 | 航空机票 |
400201 | 酒店住宿 |
400202 | 留学教育 |
400203 | 旅游票务 |
400204 | 国际物流 |
400205 | 国际租车 |
400206 | 国际会议 |
400207 | 软件服务 |
400208 | 医疗服务 |
400209 | 通讯 |
400210 | 休闲娱乐 |
银行受理能力
银行受理能力列表下载网银B2C
网银B2C支持的银行列表以及对借记卡,信用卡限额的说明。


图7.1 网银B2C受理能力表
网银B2B
网银B2B支持的银行列表以及对限额的说明。

图7.2 网银B2B受理能力表
快捷支付
快捷支付支持的银行列表以及对限额说明。
注意:有些银行卡需要开通银联在线支付业务:
1、建设银行、中国银行、农业银行、光大、兴业、中信、渤海银行,上述银行卡有卡就能用,功能已默认开通。
2、交通银行、平安、浦发、邮储、上海银行,上述银行卡需通过https://online.unionpay.com/portal/open/init.do?entry=open开通银联在线支付业务。

图7.3 快捷支付受理能力表
产品集成
商户需上传唯一的商户订单号(orderId),同时建议商户订单号中包含年月日等时间信息。
商品ID(productId)需根据商品代码传递,商品名称(productName)需传递。
Chinapnr默认在网关页面半小时不选择银行支付,则超时失败。如已选择银行支付,默认支付超时时间12小时,即晚于该订单的最晚付款时间后,将关闭交易。
交易查询
商户可在商户后台进行交易查询,也可通过查询接口查询。
-
进入商户后台“交易管理”=>“交易查询”菜单,输入订单号,Chinapnr交易流水号发起查询。
图6.1 商户后台交易查询
-
网关交易在未收到支付结果通知时通过查询接口查询支付结果,查询接口未返回支付成功,则继续轮询。
详情请参见交易查询接口。
退款
商户因业务原因需要退款时,可通过成功交易的商户订单号或Chinapnr交易号进行退款。Chinapnr退款支持单笔交易分多次退款,多次退款需要提交Chinapnr交易号并设置不同的退款单号;总退款金额不能超过用户实际支付金额。
-
进入商户后台“交易管理”=>“交易查询”菜单,输入订单号,Chinapnr交易流水号发起查询,对查询的结果确认无误后,点击操作栏的退款按钮。
图6.2 商户后台退款
在新弹出的退款页面,输入需要退款的金额,点击确认退款。
图6.3 商户后台退款
-
对接退款接口。
详情请参见退款接口。
对账
商户可通过接口下载指定日期(当天除外)的业务明细账单文件,并结合自身业务系统实现自动对账。
-
商户可在商户后台发起日终查询,进入“交易管理”=>“日终交易查询”菜单,选择要查询的交易所对应的终端号,选择日期,点击查询。
对查询出的日终列表,选择点击下载按钮下载日终对账文件。
图6.4 商户后台日终文件查询
-
对接日终文件查询接口
详情请参见日终交易查询。
DEMO下载
注意:Demo下载后可直接运行,也可将项目里商户号,终端号,私钥证书(**.pfx)更换成已开通测试商户的。
支付模式 | 说明 | 平台 | 操作 |
---|---|---|---|
跨境外汇API | 跨境外汇API对应的DEMO | JAVA | 下载 |
PHP | 下载 | ||
.NET | 下载 | ||
单笔交易查询API | 单笔交易查询API对应的DEMO | JAVA | 下载 |
PHP | 下载 | ||
.NET | 下载 | ||
退款API | 退款API对应的DEMO | JAVA | 下载 |
PHP | 下载 | ||
.NET | 下载 | ||
日终交易查询API | 日终交易查询API对应的DEMO | JAVA | 下载 |
PHP | 下载 | ||
.NET | 下载 |
文档下载
支付模式 | 说明 | 操作 |
---|---|---|
跨境外汇API | 跨境外汇API对应的文档 | 下载 |
退款接口API | 退款接口对应的文档 | 下载 |
单笔交易查询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
OpenSSL工具安装
1.Linux用户(以Ubuntu为例)
sudo apt-get install openssl
2.Windows用户开发者可以在OpenSSL官方网站下载Windows的OpenSSL安装包进行安装。或直接下载
RSA私钥及公钥生成
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-----