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";
