package com.tenwa.collectaudit.cache; import java.io.IOException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.PostMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.httpclient.protocol.Protocol; import org.apache.commons.httpclient.protocol.ProtocolSocketFactory; import com.amarsoft.app.awe.config.InitCollectConfigTj; import com.gnete.security.crypt.Crypt; import com.gnete.security.crypt.CryptException; /** * 新签名包测试用例(依赖新签名包gnete-bc-139.jar与gnete-security.jar) */ public class CollectAuditProcessTj { private static Log log = LogFactory.getLog(CollectAuditProcessTj.class); /** *代收付代收、代付交易测试URL */ //private static final String SERVER_URL = "http://59.41.103.98:333/gzdsf/ProcessServlet"; //代收付签约、银行卡验证交易测试URL //private static final String SERVER_URL = "http://59.41.103.98:9110/gzdsf/ProcessServlet"; /* public static void main(String[] args) throws CryptException { CollectAuditProcess tp = new CollectAuditProcess( ); tp.CollectAuditPayReq(); } */ /** * 验证签名信息 * @throws CryptException */ private boolean verifySign(String strXML) throws CryptException { //签名(代收付系统JDK环境使用GBK编码,商户使用签名包时需传送GBK编码集) Crypt crypt = new Crypt("gbk" ); String pathCer = InitCollectConfigTj.PUBLICKEYURL; //"D:\\BaiduNetdisk\\Download\\代收付系统接口文档和JAVA版测试demo及测试相关参数\\JAVA版测试DEMO及测试参数_20170825\\测试商户证书\\gzdsf.cer"; int iStart = strXML.indexOf(""); if (iStart != -1) { int end = strXML.indexOf(""); String signedMsg = strXML.substring(iStart+12, end); log.info(signedMsg); String strMsg = strXML.substring(0, iStart) + strXML.substring(end+13); //调用签名包验签接口(原文,签名,公钥路径) if (crypt.verify(strMsg,signedMsg, pathCer)){ log.info("verify ok"); return true; } else { log.error("verify error"); return false; } } return true; } /** * 数据签名 * comment here * @param strData * @return * @throws CryptException * @since gnete-ora 0.0.0.1 */ private String signMsg(String strData) throws CryptException { String strRnt = ""; //签名(代收付系统JDK环境使用GBK编码,商户使用签名包时需传送GBK编码集) Crypt crypt = new Crypt("gbk"); String pathPfx = InitCollectConfigTj.PRIVATEKEYURL; //"D:\\BaiduNetdisk\\Download\\代收付系统接口文档和JAVA版测试demo及测试相关参数\\JAVA版测试DEMO及测试参数_20170825\\测试商户证书\\cps@00019140020764901.p12"; //"D:\\BaiduNetdisk\\Download\\代收付系统接口文档和JAVA版测试demo及测试相关参数\\JAVA版测试DEMO及测试参数_20170825\\测试商户证书\\ORA@TEST1.p12"; String strMsg = strData.replaceAll("", ""); //调用签名包签名接口(原文,私钥路径,密码) String signedMsg = crypt.sign(strMsg, pathPfx, "123456"); return strData.replaceAll("", ""+signedMsg+""); } /** * 测试请求 * comment here * @throws CryptException * @since gnete-ora 0.0.0.1 */ protected String CollectAuditPayReq(StringBuffer sendXml,String fileSavePath,String fileName) throws CryptException { String strSendData = sendXml.toString(); HttpClient httpClient = new HttpClient( ); PostMethod postMethod = new PostMethod(InitCollectConfigTj.C_SERVERURL); //设置编码 httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GBK"); //新加入代码 ProtocolSocketFactory fcty = new MySecureProtocolSocketFactory(); //加入相关的https请求方式 Protocol.registerProtocol("https", new Protocol("https", fcty, 443)); strSendData = this.signMsg(strSendData); log.info("发送报文:"+strSendData); InterFaceFileCreate.sendDiscFileCreate(strSendData, fileSavePath, fileName); postMethod.setRequestBody(strSendData); try { long start = System.currentTimeMillis(); //执行getMethod int statusCode = httpClient.executeMethod(postMethod); System.out.println("TianJin interface ["+fileName+"] call cost time:" + (System.currentTimeMillis() - start)); //失败 if (statusCode != HttpStatus.SC_OK) { log.error("Method failed: " + postMethod.getStatusLine()); //读取内容 byte[] responseBody = postMethod.getResponseBody(); //处理内容 String strResp = new String(responseBody, "GBK"); log.error(strResp); return strResp; } else { //读取内容 byte[] responseBody = postMethod.getResponseBody(); String strResp = new String(responseBody, "GBK"); log.info("服务器返回:" + strResp); InterFaceFileCreate.replyDiscFileCreate(strResp, fileSavePath, fileName); //验签 if (this.verifySign(strResp)) { log.info("验签正确,处理服务器返回的报文"); } return strResp; } } catch (HttpException e) { //发生致命的异常,可能是协议不对或者返回的内容有问题 log.error("Please check your provided http address!", e); e.printStackTrace( ); } catch (IOException e) { //发生网络异常 log.error(e); } catch (Exception e) { log.error(null, e); } finally { //释放连接 postMethod.releaseConnection(); } return ""; } /** * 测试验证银行卡二、三、四要素请求 * comment here * @throws CryptException * @since gnete-ora 0.0.0.1 */ protected String CollectAuditVerifyReq(StringBuffer sendXml) throws CryptException { String strSendData = sendXml.toString(); HttpClient httpClient = new HttpClient(); PostMethod postMethod = new PostMethod(InitCollectConfigTj.B_SERVERURL); //设置编码 httpClient.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"GBK"); strSendData = this.signMsg(strSendData); log.info(strSendData); System.out.println("发送报文:"+strSendData); postMethod.setRequestBody(strSendData); try { long start = System.currentTimeMillis(); //执行getMethod int statusCode = httpClient.executeMethod(postMethod); System.out.println("cost:"+(System.currentTimeMillis()-start)); //失败 if (statusCode != HttpStatus.SC_OK) { log.error( "Method failed: " + postMethod.getStatusLine()); //读取内容 byte[] responseBody = postMethod.getResponseBody(); //处理内容 String strResp = new String(responseBody, "GBK"); log.error(strResp); return strResp; } else { //读取内容 byte[] responseBody = postMethod.getResponseBody(); String strResp = new String(responseBody, "GBK"); log.info("服务器返回:" + strResp); System.out.println("服务器返回:" + strResp); //验签 if (this.verifySign(strResp)) { log.info("验签正确,处理服务器返回的报文"); } return strResp; } } catch (HttpException e) { //发生致命的异常,可能是协议不对或者返回的内容有问题 log.error("Please check your provided http address!", e); e.printStackTrace( ); } catch (IOException e) { //发生网络异常 log.error(e); } catch (Exception e) { log.error(null, e); } finally { //释放连接 postMethod.releaseConnection(); } return ""; } }