请求报文
Version 版本号
MerId 商户号
MerOrderNo 必填,变长 32位,同一商户同一交易日期内不可重复
TranDate 商户提交交易的日期,例如交易日期为2015年1月2日,则值为20150102
TranTime 商户提交交易的时间,例如交易时间10点11分22秒,则值为101122
OrderAmt 单位:分
BusiType 0001(注意:字符串类型)
MerPageUrl 0 商户前台页面接收交易结果的地址,用于引导使用者支付后返回商户网站页面
MerBgUrl 商户后台接收交易结果的地址
CommodityMsg 0 用来描述购买商品的信息,ChinaPay原样返回
MerResv 0 商户自定义,ChinaPay原样返回
Signature 商户报文签名信息,报文中的所有字段都参与签名(Signature除外)
应答报文
* MerId 商户号
* MerOrderNo 商户订单号
* TranDate 交易日期 年月日
* TranTime 交易时间 时分秒
* OrderAmt 订单金额 单位分
* OrderStatus 订单支付状态 0000为支付成功状态,0001为未支付,其它为失败状态
* MerResv 商户私有域 自定义原样返回
* TranReserved 交易扩展域 json格式 原样返回
* Signature 签名
1、开发过程中,商户签名报SecurityException异常
检查交易证书密码是否配置正确,并检查配置文件security.properties是否配置正确。
需要将security.properties放在类路径下,并配置如下:
#交易证书路径
sign.file=D:/cert_cp/000000000000001.pfx
#交易证书密码
sign.file.password=123456
#交易证书的密钥容器格式
sign.cert.type=PKCS12
#报文中不参与签名的字段名称,多个字段用逗号进行分隔
sign.invalid.fields=Signature,CertId
#验签证书路径
verify.file=D:/cert_cp/cp_test.cer
#签名值字段名称
signature.field=Signature
2、开发过程中,商户签名报“未初始化配置”异常
检查签名或验签之前是否调用SecssUtil.init();方法,如果未调用,则调用SecssUtil.init()方法初始化安全签名配置
3、签名过程出现 Illegal key size错误
请检查下载的pfx证书是否正确,或者重新申请CFCA交易证书
4、交易失败!错误信息:证书未配置
这个报错通常有两个原因,一是没有申请交易证书,二是交易地址提交错误,测试地址和正式地址搞错了。
5、交易失败!错误信息:验签失败。
需要确认交易证书在Internet选项---内容---证书---颁发给的名字和在商户服务管理系统里面查到的交易证书的证书名称是一样的。
证书确认没有问题,需要确认参加签名的字段和传过来的字段是一样的。
签名示例代码
require 'SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$paramArray=array(
"AcqCode"=>"000000000000014",
"BankInstNo"=>"",
"BusiType"=>"0001",
"CommodityMsg"=>"ChinaPay测试-商品信息",
"CurryNo"=> "CNY",
" AccessType"=>"0",
" MerBgUrl"=>"http://172.16.9.233:9080/CPOA_TEST/mer/receiveStdasServlet",
" MerPageUrl"=>"http://172.16.9.233:9080/CPOA_TEST/receive",
" MerSplitMsg"=>"");
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile); //初始化安全控件:
$secssUtil->sign($paramArray);
if("00"!==$secssUtil.getErrCode()){
echo"签名过程发生错误,错误信息为-->".$secssUtil.getErrMsg();
return;
}
$signature==$secssUtil->getSign();
echo "签名数据为:".$signature;
验证签名示例代码
require 'SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$paramArray=array(
"AcqCode"=>"000000000000014",
"BankInstNo"=>"",
"BusiType"=>"0001",
"CommodityMsg"=>"ChinaPay测试-商品信息",
"CurryNo"=> "CNY",
" AccessType"=>"0",
" MerBgUrl"=>"http://172.16.9.233:9080/CPOA_TEST/mer/receiveStdasServlet",
" MerPageUrl"=>"http://172.16.9.233:9080/CPOA_TEST/receive",
" MerSplitMsg"=>"",
"Signature"=>"………"
);
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile); //初始化安全控件:
$secssUtil->verify($paramArray);
if("00"!==$secssUtil.getErrCode()){
echo"验签过程发生错误,错误信息为-->".$secssUtil.getErrMsg();
return;
}
echo "验签通过。";
敏感数据加密示例代码
require 'SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$plainData="testtest";
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile); //初始化安全控件:
$secssUtil->encryptData ($plainData);
if("00"!==$secssUtil.getErrCode()){
echo"加密过程发生错误,错误信息为-->".$secssUtil.getErrMsg();
return;
}
echo "加密后的密文为:".$secssUtil->getEncValue();
密码加密示例代码
require 'SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$card="6225882125408888";
$pin="123456";
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile); //初始化安全控件:
$secssUtil->encryptPin($pin, $card);
if("00"!==$secssUtil.getErrCode()){
echo"密码加密过程发生错误,错误信息为-->".$secssUtil.getErrMsg();
return;
}
echo "加密后的PIN密文为:".$secssUtil->getEncPin();
文件验签示例代码
require ' SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile);
$file="D:/Zend/workspaces/DefaultWorkspace12/ChinaPaySECSS_PHP/测试文件.txt";
echo "verify start time".date('y-m-d h:i:s',time())."\r\n";
$secssUtil->verifyFile($file);
if("00"===$secssUtil->getErrCode()){
echo "文件验签成功,errcode=[" .$secssUtil->getErrCode()."]\r\n";
}else{
echo "文件验签失败,errcode=[" .$secssUtil->getErrCode()."]\r\n";
}
echo "verify end time".date('y-m-d h:i:s',time())."\r\n";
Version 版本号
MerId 商户号
MerOrderNo 必填,变长 32位,同一商户同一交易日期内不可重复
TranDate 商户提交交易的日期,例如交易日期为2015年1月2日,则值为20150102
TranTime 商户提交交易的时间,例如交易时间10点11分22秒,则值为101122
OrderAmt 单位:分
BusiType 0001(注意:字符串类型)
MerPageUrl 0 商户前台页面接收交易结果的地址,用于引导使用者支付后返回商户网站页面
MerBgUrl 商户后台接收交易结果的地址
CommodityMsg 0 用来描述购买商品的信息,ChinaPay原样返回
MerResv 0 商户自定义,ChinaPay原样返回
Signature 商户报文签名信息,报文中的所有字段都参与签名(Signature除外)
应答报文
* MerId 商户号
* MerOrderNo 商户订单号
* TranDate 交易日期 年月日
* TranTime 交易时间 时分秒
* OrderAmt 订单金额 单位分
* OrderStatus 订单支付状态 0000为支付成功状态,0001为未支付,其它为失败状态
* MerResv 商户私有域 自定义原样返回
* TranReserved 交易扩展域 json格式 原样返回
* Signature 签名
1、开发过程中,商户签名报SecurityException异常
检查交易证书密码是否配置正确,并检查配置文件security.properties是否配置正确。
需要将security.properties放在类路径下,并配置如下:
#交易证书路径
sign.file=D:/cert_cp/000000000000001.pfx
#交易证书密码
sign.file.password=123456
#交易证书的密钥容器格式
sign.cert.type=PKCS12
#报文中不参与签名的字段名称,多个字段用逗号进行分隔
sign.invalid.fields=Signature,CertId
#验签证书路径
verify.file=D:/cert_cp/cp_test.cer
#签名值字段名称
signature.field=Signature
2、开发过程中,商户签名报“未初始化配置”异常
检查签名或验签之前是否调用SecssUtil.init();方法,如果未调用,则调用SecssUtil.init()方法初始化安全签名配置
3、签名过程出现 Illegal key size错误
请检查下载的pfx证书是否正确,或者重新申请CFCA交易证书
4、交易失败!错误信息:证书未配置
这个报错通常有两个原因,一是没有申请交易证书,二是交易地址提交错误,测试地址和正式地址搞错了。
5、交易失败!错误信息:验签失败。
需要确认交易证书在Internet选项---内容---证书---颁发给的名字和在商户服务管理系统里面查到的交易证书的证书名称是一样的。
证书确认没有问题,需要确认参加签名的字段和传过来的字段是一样的。
签名示例代码
require 'SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$paramArray=array(
"AcqCode"=>"000000000000014",
"BankInstNo"=>"",
"BusiType"=>"0001",
"CommodityMsg"=>"ChinaPay测试-商品信息",
"CurryNo"=> "CNY",
" AccessType"=>"0",
" MerBgUrl"=>"http://172.16.9.233:9080/CPOA_TEST/mer/receiveStdasServlet",
" MerPageUrl"=>"http://172.16.9.233:9080/CPOA_TEST/receive",
" MerSplitMsg"=>"");
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile); //初始化安全控件:
$secssUtil->sign($paramArray);
if("00"!==$secssUtil.getErrCode()){
echo"签名过程发生错误,错误信息为-->".$secssUtil.getErrMsg();
return;
}
$signature==$secssUtil->getSign();
echo "签名数据为:".$signature;
验证签名示例代码
require 'SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$paramArray=array(
"AcqCode"=>"000000000000014",
"BankInstNo"=>"",
"BusiType"=>"0001",
"CommodityMsg"=>"ChinaPay测试-商品信息",
"CurryNo"=> "CNY",
" AccessType"=>"0",
" MerBgUrl"=>"http://172.16.9.233:9080/CPOA_TEST/mer/receiveStdasServlet",
" MerPageUrl"=>"http://172.16.9.233:9080/CPOA_TEST/receive",
" MerSplitMsg"=>"",
"Signature"=>"………"
);
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile); //初始化安全控件:
$secssUtil->verify($paramArray);
if("00"!==$secssUtil.getErrCode()){
echo"验签过程发生错误,错误信息为-->".$secssUtil.getErrMsg();
return;
}
echo "验签通过。";
敏感数据加密示例代码
require 'SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$plainData="testtest";
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile); //初始化安全控件:
$secssUtil->encryptData ($plainData);
if("00"!==$secssUtil.getErrCode()){
echo"加密过程发生错误,错误信息为-->".$secssUtil.getErrMsg();
return;
}
echo "加密后的密文为:".$secssUtil->getEncValue();
密码加密示例代码
require 'SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$card="6225882125408888";
$pin="123456";
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile); //初始化安全控件:
$secssUtil->encryptPin($pin, $card);
if("00"!==$secssUtil.getErrCode()){
echo"密码加密过程发生错误,错误信息为-->".$secssUtil.getErrMsg();
return;
}
echo "加密后的PIN密文为:".$secssUtil->getEncPin();
文件验签示例代码
require ' SecssUtil.class.php';
$securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties";
$secssUtil = new SecssUtil();
$secssUtil->init($securityPropFile);
$file="D:/Zend/workspaces/DefaultWorkspace12/ChinaPaySECSS_PHP/测试文件.txt";
echo "verify start time".date('y-m-d h:i:s',time())."\r\n";
$secssUtil->verifyFile($file);
if("00"===$secssUtil->getErrCode()){
echo "文件验签成功,errcode=[" .$secssUtil->getErrCode()."]\r\n";
}else{
echo "文件验签失败,errcode=[" .$secssUtil->getErrCode()."]\r\n";
}
echo "verify end time".date('y-m-d h:i:s',time())."\r\n";