人民币网关

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

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

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

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

  2. 网关直连

    商户在自己的收银台展示银行列表,消费者在商户收银台选择支付使用的银行,支付过程中不出现汇付的收银台,直接跳转到银行网银页面。(注:直连模式需要商户自行采集消费者的身份信息及卡号)

商户接入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. 1-2个工作日内由开通组负责将开通的账号信息发送至商户邮箱。

第二步:配置密钥

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

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

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

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

调用流程

接口调用时序图:

图4.1 非直连模式

图4.2 直连模式

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

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

  3. 非直连模式: 汇付对商户的支付请求进行处理并跳转到汇付的支付页面,该页面显示订单信息,商户开通的支付方式。用户选择银行后点击确认支付,此时页面跳转到该用户对应的银行支付页面。
    直连模式: 汇付对商户的支付请求进行处理后,直接跳转到银行页面。(注意:直连模式在接口提交时必须指定支付方式和银行。)

  4. 用户在银行页面按照银行要求完成支付。

  5. 支付完成后,银行页面会自动(或由用户发起)跳转到汇付的支付成功页面。

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

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

  8. 同时汇付系统会在后台通过《支付结果通知》接口通知商户系统该笔订单的支付结果,该地址不能与第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公钥证书需在不对环境的商户后台下载。

Chinapnr网关与开发者的通信主要由开发者主动调用Chinapnr网关接口(下文简称OpenAPI)实现。其中Chinapnr网关地址:
测试环境:https://hfgj.chinapnr.com/pay/receivermb.htm
生产环境:https://global.chinapnr.com/pay/receivermb.htm

接口参数说明请参见《人民币网关接口说明》

API请求

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

请求示例:


pageUrl=http://192.168.1.111:8081/QAMOCK-Test/notifyReceiverPg.do
signType=4
refererUrl=http://www.baidu.com
version=3.0
redoFlag=1
terminalId=0010002
inputCharset=1
bgUrl=http://192.168.1.111:8081/QAMOCK-Test/notifyReceiverBg.do
customerId=
orderAmount=1000
productNum=1
payerContactType=2
orderId=20170821182123655
payerIdentityCard=320125198805232313
merchantAcctId=1001215986501
payerContact=15800000000
orderCurrency=CNY
orderTime=20170821182104
customerIp=127.0.0.1
bankId=
productId=YN0001
productDesc=IPHONE6港版
ext1=ext1
ext2=ext2
signMsg=Cs0eci1gWCqB+pATk7lZaS2aTVkuVqcnOfcZFTZj//WhrPQ/PFTpaDyawpJaYJXd82MSP5KCQc4rztS+4XKeF7O+PR9JeEVMU1c7y1PyltQZSOTGNpSkVrObKn2mNopx0oW0HzvYLXvTivB+T6AwqwOG0oxcID4R3SaEWuv3J9s=
payType=00
language=1
orderTimeout=60
mobileNumber=15800000000
productName=IPHONE6
payerName=张三
cardNumber=6225881257000000

在提交参数中需要对传入的数据进行签名组成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}&orderCurrency={orderCurrency}&orderAmount={orderAmount}&orderTime={orderTime}&inquireTrxNo={inquireTrxNo}&productName={productName}&productNum={productNum}&productId={productId}&productDesc={productDesc}&ext1={ext1}&ext2={ext2}&payType={payType}&bankId={bankId}&refererUrl={refererUrl}&customerIp={customerIp}&orderTimeout={orderTimeout}&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=0010002&payerName=张三&payerContactType=2&payerContact=1&payerIdentityCard=320125198805232313&mobileNumber=15800000000&cardNumber=6225881257000000&customerId=1001&orderId=20170817180757683&orderCurrency=CNY&orderAmount=1000&orderTime=20170817180426&productName=IPHONE6&productNum=1&productId=YN0001&productDesc=IPHONE6港版&ext1=ext1&ext2=ext2&payType=00&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/receivecb.htm
REQUEST METHOD: POST
CONTENT:
pageUrl=http://192.168.1.111:8081/QAMOCK-Test/notifyReceiverPg.do
signType=4
refererUrl=http://www.baidu.com
version=3.0
redoFlag=1
terminalId=0010002
inputCharset=1
bgUrl=http://192.168.1.111:8081/QAMOCK-Test/notifyReceiverBg.do
customerId=
orderAmount=1000
productNum=1
payerContactType=2
orderId=20170821182123655
payerIdentityCard=320125198805232313
merchantAcctId=1001215986501
payerContact=15800000000
orderCurrency=CNY
orderTime=20170821182104
customerIp=127.0.0.1
bankId=
productId=YN0001
productDesc=IPHONE6港版
ext1=ext1
ext2=ext2
signMsg=Cs0eci1gWCqB+pATk7lZaS2aTVkuVqcnOfcZFTZj//WhrPQ/PFTpaDyawpJaYJXd82MSP5KCQc4rztS+4XKeF7O+PR9JeEVMU1c7y1PyltQZSOTGNpSkVrObKn2mNopx0oW0HzvYLXvTivB+T6AwqwOG0oxcID4R3SaEWuv3J9s=
payType=00
language=1
orderTimeout=60
mobileNumber=15800000000
productName=IPHONE6
payerName=张三
cardNumber=6225881257000000

注意:

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

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

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

返回结果

返回示例:

dealTime=20170817181646
errCode=000000
merchantAcctId=1001215986501
orderTime=20170817181604
orderCurrency=CNY
dealId=1000014989
version=3.0
bankId=cmb
terminalId=0010002
payResult=10
ext1=ext1
orderAmount=1000
ext2=ext2
signMsg=J+YM2hBexEr74jKaLW0guji7kVFVTMJI0VdZaoGy8z0MZ/VVlHo5/Di+DJFcGqDI78udAF6iJLomO7acEYASd9fd9GpPnXw8J6Nh/czZRzu3kji895+Cwfzt93KwfIRizujgIAqVEjs7/yqJ2R1bj9qftf8NQ2gEzRf5sZZTC3Q=
payType=00
orderId=20170817181623922

调用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=1000014989&dealTime=20170817181646&errCode=000000&ext1=ext1&ext2=ext2&merchantAcctId=1001215986501&orderAmount=1000&orderCurrency=CNY&orderId=20170817181623922&orderTime=20170817181604&payResult=10&payType=00&terminalId=0010002&version=3.0

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

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

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

接口返回参数说明请参见《人民币网关接口说明》

支付结果通知

支付结果通知示例:

dealTime=20170817181646
errCode=000000
merchantAcctId=1001215986501
orderTime=20170817181604
orderCurrency=CNY
dealId=1000014989
version=3.0
bankId=cmb
terminalId=0010002
payResult=10
ext1=ext1
orderAmount=1000
ext2=ext2
signMsg=J%2BYM2hBexEr74jKaLW0guji7kVFVTMJI0VdZaoGy8z0MZ%2FVVlHo5%2FDi%2BDJFcGqDI78udAF6iJLomO7acEYASd9fd9GpPnXw8J6Nh%2FczZRzu3kji895%2BCwfzt93KwfIRizujgIAqVEjs7%2FyqJ2R1bj9qftf8NQ2gEzRf5sZZTC3Q%3D
payType=00
orderId=20170817181623922

支付结果通知的验签

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=1000014989&dealTime=20170817181646&errCode=000000&ext1=ext1&ext2=ext2&merchantAcctId=1001215986501&orderAmount=1000&orderCurrency=CNY&orderId=20170817181623922&orderTime=20170817181604&payResult=10&payType=00&terminalId=0010002&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 交易处理失败
110001 必须提交的请求参数未提交
110002 请求的数据项长度不符
110003 请求的数据项格式错误,合法格式请参照接入文档
110004 错误请求
110005 请求的数据项不合法
110006 请求的交易币别暂不支持
130005 风控拦截
200001 订单信息的签名内容不正确
120010 请求的商户号不存在,请检查后重试
120011 请求的商户号状态异常,不允许交易
120012 请求的终端号不存在,请检查后重试
120013 请求的终端号状态异常,不允许交易
120014 产品功能未开通,不允许交易
120023 交易请求Ip未知,不允许交易
120024 支付人Ip在黑名单中,不允许交易
120025 支付人Ip有变化,存在风险不允许交易
120026 支付人链接来源有变化,存在风险不允许交易
120028 未开通任何受理银行,不允许交易
120029 不可受理的银行代码,不允许交易
120031 请求的商户号/终端号对应的结算币别与交易申请的币别不一致,请更换对应终端后重试
120032 请求的商户号/终端号对应的报价币别与交易申请的币别不一致,请更换对应终端后重试
120040 商户订单号重复,请先确认订单状态或重新下单后支付
120061 交易金额大于商户最高交易限额
120062 交易金额低于商户最低交易限额
120063 当日交易金额已大于日最高交易限额
120064 无可用的收单通道
120065 目标币别的汇率不存在
120066 交易金额精度超出交易币别的最小单位
120069 支付超时,请重新支付
120100 该商户账户异常,已被禁止交易
120101 该商户账户已被冻结,禁止交易
120102 该商户账户功能已被限制,禁止交易
120103 该商户账户已被删除,禁止交易
120110 该商户账户已被止入,禁止交易
120111 该商户账户已被止出,禁止交易
120112 该商户账户已被限制充值,禁止交易
120113 该商户账户已被限制提现,禁止交易
120114 该商户账户已被限制透支,禁止交易
120115 该商户账户已被限制支付,禁止交易
120116 该商户账户已被限制转入,禁止交易
120117 该商户账户已被限制转出,禁止交易
120300 授权商户未开通
120301 授权参数未设值
130001 交易失败,风控拒绝
130002 交易失败,疑似重复交易被拦截
130003 交易失败,产品不在经营范围内
130004 (退款)受理失败
130005 交易失败,风控拒绝
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 银行系统异

商品编码列表

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


商品编码 中文类名
100003 护肤品
100004 洗发护发
100005 身体护理
100006 口腔护理
100003 护肤品
100004 洗发护发
100005 身体护理
100006 口腔护理
100007 包包
100008 女装
100009 男装
100010 童装
100011 内衣
100012 睡衣
100013 袜品
100014 配饰
100015 香水
100016 彩妆
100017 奶粉
100018 母婴营养保健
100019 婴儿辅食
100020 尿裤纸巾
100021 男鞋
100022 女鞋
100023 运动鞋
100024 户外鞋
100025 运动服
100026 休闲服装
100027 家纺/床品
100028 生活日用
100029 厨房电器
100030 家装软饰
100031 生活电器
100032 手机
100033 手机配件
100034 数码相机
100035 单反相机
100036 摄像机
100037 镜头
100038 耳机/耳麦
100039 音箱/音响
100040 数码配件
100041 智能手环
100042 影音娱乐
100043 笔记本
100044 进口食品
100045 休闲食品
100046 营养品
100047 地方特产
200003 游戏点卡
200004 游戏周边
200005 网页游戏
200006 手机游戏
200007 电脑杀毒软件
200008 电脑安装软件
200009 虚拟服务租赁
200010 物理服务器租赁
200011 国际线路租赁
200012 域名
200013 网页设计
200014 软件设计
300003 留学学费
300004 出国夏令营费用
400003 机票
400004 酒店
400005 当地旅游费用

银行受理能力

EXCEL受理能力列表下载

网银B2C

网银B2C支持的银行列表以及对借记卡,信用卡限额的说明。

图7.1 网银B2C受理能力表

网银B2B

网银B2B支持的银行列表以及对限额的说明。

图7.2 网银B2B受理能力表

快捷支付

快捷支付支持的银行列表以及对限额说明。

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

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

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

图7.3 快捷支付受理能力表

商户请求API

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

  2. Chinapnr默认在网关页面半小时不选择银行支付,则超时失败。如已选择银行支付,默认支付超时时间12小时,即晚于该订单的最晚付款时间后,将关闭交易。

交易查询

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

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

    图6.1 商户后台交易查询

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

    详情请参见交易查询接口

退款

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

  1. 对接退款接口。

    详情请参见退款接口

对账

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

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

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

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

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

    详情请参见日终交易查询

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 日终交易查询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-----