银联电子支付报文说明
1 请求报文 2 Version 版本号 3 MerId 商户号 4 MerOrderNo 必填,变长 32位,同一商户同一交易日期内不可重复 5 TranDate 商户提交交易的日期,例如交易日期为2015年1月2日,则值为20150102 6 TranTime 商户提交交易的时间,例如交易时间10点11分22秒,则值为101122 7 OrderAmt 单位:分 8 BusiType 0001(注意:字符串类型) 9 MerPageUrl 0 商户前台页面接收交易结果的地址,用于引导使用者支付后返回商户网站页面 10 MerBgUrl 商户后台接收交易结果的地址 11 CommodityMsg 0 用来描述购买商品的信息,ChinaPay原样返回 12 MerResv 0 商户自定义,ChinaPay原样返回 13 14 Signature 商户报文签名信息,报文中的所有字段都参与签名(Signature除外) 15 16 应答报文 17 * MerId 商户号 18 * MerOrderNo 商户订单号 19 * TranDate 交易日期 年月日 20 * TranTime 交易时间 时分秒 21 * OrderAmt 订单金额 单位分 22 * OrderStatus 订单支付状态 0000为支付成功状态,0001为未支付,其它为失败状态 23 * MerResv 商户私有域 自定义原样返回 24 * TranReserved 交易扩展域 json格式 原样返回 25 * Signature 签名 26 27 1、开发过程中,商户签名报SecurityException异常 28 29 检查交易证书密码是否配置正确,并检查配置文件security.properties是否配置正确。 30 31 需要将security.properties放在类路径下,并配置如下: 32 33 #交易证书路径 34 35 sign.file=D:/cert_cp/000000000000001.pfx 36 37 #交易证书密码 38 39 sign.file.password=123456 40 41 #交易证书的密钥容器格式 42 43 sign.cert.type=PKCS12 44 45 #报文中不参与签名的字段名称,多个字段用逗号进行分隔 46 47 sign.invalid.fields=Signature,CertId 48 49 #验签证书路径 50 51 verify.file=D:/cert_cp/cp_test.cer 52 53 #签名值字段名称 54 55 signature.field=Signature 56 57 2、开发过程中,商户签名报“未初始化配置”异常 58 59 检查签名或验签之前是否调用SecssUtil.init();方法,如果未调用,则调用SecssUtil.init()方法初始化安全签名配置 60 61 3、签名过程出现 Illegal key size错误 62 63 请检查下载的pfx证书是否正确,或者重新申请CFCA交易证书 64 65 4、交易失败!错误信息:证书未配置 66 67 这个报错通常有两个原因,一是没有申请交易证书,二是交易地址提交错误,测试地址和正式地址搞错了。 68 69 5、交易失败!错误信息:验签失败。 70 71 需要确认交易证书在Internet选项---内容---证书---颁发给的名字和在商户服务管理系统里面查到的交易证书的证书名称是一样的。 72 证书确认没有问题,需要确认参加签名的字段和传过来的字段是一样的。 73 74 75 签名示例代码 76 77 require 'SecssUtil.class.php'; 78 79 $securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties"; 80 81 $paramArray=array( 82 83 "AcqCode"=>"000000000000014", 84 85 "BankInstNo"=>"", 86 87 "BusiType"=>"0001", 88 89 "CommodityMsg"=>"ChinaPay测试-商品信息", 90 91 "CurryNo"=> "CNY", 92 93 " AccessType"=>"0", 94 95 " MerBgUrl"=>"http://172.16.9.233:9080/CPOA_TEST/mer/receiveStdasServlet", 96 97 " MerPageUrl"=>"http://172.16.9.233:9080/CPOA_TEST/receive", 98 99 " MerSplitMsg"=>""); 100 101 $secssUtil = new SecssUtil(); 102 103 $secssUtil->init($securityPropFile); //初始化安全控件: 104 105 $secssUtil->sign($paramArray); 106 107 if("00"!==$secssUtil.getErrCode()){ 108 109 echo"签名过程发生错误,错误信息为-->".$secssUtil.getErrMsg(); 110 111 return; 112 113 } 114 115 $signature==$secssUtil->getSign(); 116 117 echo "签名数据为:".$signature; 118 119 120 121 验证签名示例代码 122 123 require 'SecssUtil.class.php'; 124 125 $securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties"; 126 127 $paramArray=array( 128 129 "AcqCode"=>"000000000000014", 130 131 "BankInstNo"=>"", 132 133 "BusiType"=>"0001", 134 135 "CommodityMsg"=>"ChinaPay测试-商品信息", 136 137 "CurryNo"=> "CNY", 138 139 " AccessType"=>"0", 140 141 " MerBgUrl"=>"http://172.16.9.233:9080/CPOA_TEST/mer/receiveStdasServlet", 142 143 " MerPageUrl"=>"http://172.16.9.233:9080/CPOA_TEST/receive", 144 145 " MerSplitMsg"=>"", 146 147 "Signature"=>"………" 148 149 ); 150 151 $secssUtil = new SecssUtil(); 152 153 $secssUtil->init($securityPropFile); //初始化安全控件: 154 155 $secssUtil->verify($paramArray); 156 157 if("00"!==$secssUtil.getErrCode()){ 158 159 echo"验签过程发生错误,错误信息为-->".$secssUtil.getErrMsg(); 160 161 return; 162 163 } 164 165 echo "验签通过。"; 166 167 敏感数据加密示例代码 168 169 require 'SecssUtil.class.php'; 170 171 $securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties"; 172 173 $plainData="testtest"; 174 175 $secssUtil = new SecssUtil(); 176 177 $secssUtil->init($securityPropFile); //初始化安全控件: 178 179 $secssUtil->encryptData ($plainData); 180 181 if("00"!==$secssUtil.getErrCode()){ 182 183 echo"加密过程发生错误,错误信息为-->".$secssUtil.getErrMsg(); 184 185 return; 186 187 } 188 189 echo "加密后的密文为:".$secssUtil->getEncValue(); 190 191 192 193 密码加密示例代码 194 195 require 'SecssUtil.class.php'; 196 197 $securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties"; 198 199 $card="6225882125408888"; 200 201 $pin="123456"; 202 203 $secssUtil = new SecssUtil(); 204 205 $secssUtil->init($securityPropFile); //初始化安全控件: 206 207 $secssUtil->encryptPin($pin, $card); 208 209 if("00"!==$secssUtil.getErrCode()){ 210 211 echo"密码加密过程发生错误,错误信息为-->".$secssUtil.getErrMsg(); 212 213 return; 214 215 } 216 217 echo "加密后的PIN密文为:".$secssUtil->getEncPin(); 218 219 文件验签示例代码 220 221 require ' SecssUtil.class.php'; 222 223 $securityPropFile="D:/Zend/workspaces/DefaultWorkspace12/chinapaySECSS_PHP/security.properties"; 224 225 $secssUtil = new SecssUtil(); 226 227 $secssUtil->init($securityPropFile); 228 229 $file="D:/Zend/workspaces/DefaultWorkspace12/ChinaPaySECSS_PHP/测试文件.txt"; 230 231 echo "verify start time".date('y-m-d h:i:s',time())."\r\n"; 232 233 $secssUtil->verifyFile($file); 234 235 if("00"===$secssUtil->getErrCode()){ 236 237 echo "文件验签成功,errcode=[" .$secssUtil->getErrCode()."]\r\n"; 238 239 }else{ 240 241 echo "文件验签失败,errcode=[" .$secssUtil->getErrCode()."]\r\n"; 242 243 } 244 245 echo "verify end time".date('y-m-d h:i:s',time())."\r\n";
By Mr.Yang