下面是查询使用的类
public class BocCommonQueryOrder { private String url = "https://ebspay.boc.cn/PGWPortal/CommonQueryOrder.do"; private MyX509TrustManager xtm = new MyX509TrustManager(); private MyHostnameVerifier hnv = new MyHostnameVerifier(); public BocCommonQueryOrder() { SSLContext sslContext = null; try { sslContext = SSLContext.getInstance("TLS"); //或SSL X509TrustManager[] xtmArray = new X509TrustManager[] {xtm}; sslContext.init(null, xtmArray, new java.security.SecureRandom()); } catch (GeneralSecurityException e) { e.printStackTrace(); } if (sslContext != null) { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); } HttpsURLConnection.setDefaultHostnameVerifier(hnv); } public BocQueryResult query(String merchantNo ,String orderNos,String signData) { HttpsURLConnection urlCon = null; try { urlCon = (HttpsURLConnection)(new URL(url)).openConnection(); urlCon.setDoOutput(true); urlCon.setRequestMethod("POST"); urlCon.setRequestProperty("Content-Length", "1024"); urlCon.setUseCaches(false); urlCon.setDoInput(true); urlCon.getOutputStream().write(("merchantNo="+merchantNo+"&orderNos="+orderNos+"&signData="+signData).getBytes("GBK")); urlCon.getOutputStream().flush(); urlCon.getOutputStream().close(); BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream())); StringBuffer returnXml = new StringBuffer(); String line; while ((line = in.readLine()) != null) { returnXml.append(line); } // 增加自己的代码 return new BocQueryResult(returnXml.toString()); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return null; } }
下面是结果返回时解析的类:
public class BocQueryResult { private String msgId; private String hdlSts; private String bdFlg; private String rtnCd; private Set<BocOrderTran> orderTrans; public Set<BocOrderTran> getOrderTrans() { return orderTrans; } public void setOrderTrans(Set<BocOrderTran> orderTrans) { this.orderTrans = orderTrans; } public String getMsgId() { return msgId; } public void setMsgId(String msgId) { this.msgId = msgId; } public String getHdlSts() { return hdlSts; } public void setHdlSts(String hdlSts) { this.hdlSts = hdlSts; } public String getBdFlg() { return bdFlg; } public void setBdFlg(String bdFlg) { this.bdFlg = bdFlg; } public String getRtnCd() { return rtnCd; } public void setRtnCd(String rtnCd) { this.rtnCd = rtnCd; } public BocQueryResult(String xmlString){ try { SAXReader reader = new SAXReader(); Document document = reader.read(new ByteArrayInputStream(xmlString.getBytes())); Element root = document.getRootElement(); Iterator<Element> rootIt = root.elementIterator(); while(rootIt.hasNext()){ Element rootElement = rootIt.next(); if("header".equals(rootElement.getName())){ Iterator<Element> headerIt = rootElement.elementIterator(); while(headerIt.hasNext()){ Element tmp = headerIt.next(); tmp.getName(); tmp.getText(); if("msgId".equals(tmp.getName())){ this.msgId = tmp.getText(); }else if("hdlSts".equals(tmp.getName())){ this.hdlSts = tmp.getText(); } else if("bdFlg".equals(tmp.getName())){ this.bdFlg = tmp.getText(); } else if("rtnCd".equals(tmp.getName())){ this.rtnCd = tmp.getText(); } } }else if("body".equals(rootElement.getName())){ Iterator<Element> bodyIt = rootElement.elementIterator(); while(bodyIt.hasNext()){ Element bodyElement = bodyIt.next(); if("orderTrans".equals(bodyElement.getName())){ BocOrderTran orderTran = new BocOrderTran(); Iterator<Element> orderIt = bodyElement.elementIterator(); while(orderIt.hasNext()){ Element orderElement = orderIt.next(); if("merchantNo".equals(orderElement.getName())){ orderTran.setMerchantNo(orderElement.getText()); }else if("orderNo".equals(orderElement.getName())){ orderTran.setOrderNo(orderElement.getText()); } else if("orderSeq".equals(orderElement.getName())){ orderTran.setOrderSeq(orderElement.getText()); } else if("orderStatus".equals(orderElement.getName())){ orderTran.setOrderStatus(orderElement.getText()); } else if("cardTyp".equals(orderElement.getName())){ orderTran.setCardType(orderElement.getText()); } else if("acctNo".equals(orderElement.getName())){ orderTran.setAcctNo(orderElement.getText()); } else if("holderName".equals(orderElement.getName())){ orderTran.setHolderName(orderElement.getText()); } else if("ibknum".equals(orderElement.getName())){ orderTran.setIbknum(orderElement.getText()); } else if("payTime".equals(orderElement.getName())){ orderTran.setPayTime(orderElement.getText()); } else if("payAmount".equals(orderElement.getName())){ orderTran.setPayAmount(orderElement.getText()); } else if("visitorIp".equals(orderElement.getName())){ orderTran.setVisitorIp(orderElement.getText()); } else if("visitorRefer".equals(orderElement.getName())){ orderTran.setVisitorRefer(orderElement.getText()); } } if(this.getOrderTrans()==null){ this.setOrderTrans(new HashSet<BocOrderTran>()); } this.getOrderTrans().add(orderTran); } } } } } catch (Exception e) { e.printStackTrace(); } System.out.println(this.getOrderTrans()); } } class BocOrderTran{ private String merchantNo; private String orderNo; private String orderSeq; private String orderStatus; private String cardType; private String acctNo; private String holderName; private String ibknum; private String payTime; private String payAmount; private String visitorIp; private String visitorRefer; public String getMerchantNo() { return merchantNo; } public void setMerchantNo(String merchantNo) { this.merchantNo = merchantNo; } public String getOrderNo() { return orderNo; } public void setOrderNo(String orderNo) { this.orderNo = orderNo; } public String getOrderSeq() { return orderSeq; } public void setOrderSeq(String orderSeq) { this.orderSeq = orderSeq; } public String getOrderStatus() { return orderStatus; } public void setOrderStatus(String orderStatus) { this.orderStatus = orderStatus; } public String getCardType() { return cardType; } public void setCardType(String cardType) { this.cardType = cardType; } public String getAcctNo() { return acctNo; } public void setAcctNo(String acctNo) { this.acctNo = acctNo; } public String getHolderName() { return holderName; } public void setHolderName(String holderName) { this.holderName = holderName; } public String getIbknum() { return ibknum; } public void setIbknum(String ibknum) { this.ibknum = ibknum; } public String getPayTime() { return payTime; } public void setPayTime(String payTime) { this.payTime = payTime; } public String getPayAmount() { return payAmount; } public void setPayAmount(String payAmount) { this.payAmount = payAmount; } public String getVisitorIp() { return visitorIp; } public void setVisitorIp(String visitorIp) { this.visitorIp = visitorIp; } public String getVisitorRefer() { return visitorRefer; } public void setVisitorRefer(String visitorRefer) { this.visitorRefer = visitorRefer; } public String toString(){ return this.getAcctNo()+"-"+this.getCardType()+"--"+this.getHolderName()+"--"+this.getIbknum()+"--"+this.getMerchantNo() +"--"+this.getOrderNo()+"--"+this.getOrderSeq()+"--"+this.getOrderStatus()+"--"+this.getPayAmount()+"--"+this.getPayTime()+ "--"+this.getVisitorIp()+"--"+this.getVisitorRefer()+"--"; } }
其中访问https请求的时候哟重写两个类:
public class MyHostnameVerifier implements HostnameVerifier { public boolean verify(String hostname, SSLSession session) { System.out.println("Warning: URL Host: " + hostname + " vs. " + session.getPeerHost()); return true; } }
public class MyX509TrustManager implements X509TrustManager { public void checkClientTrusted(X509Certificate[] chain, String authType) { } public void checkServerTrusted(X509Certificate[] chain, String authType) { System.out.println("cert: " + chain[0].toString() + ", authType: " + authType); } public X509Certificate[] getAcceptedIssuers() { return null; } }
更正一下,这里没有必要发送https请求,直接使用http请求发送也可以获取到正确内容