中国银行B2C订单查询

中国银行B2C订单查询,首先需要使用发送https请求,请求返回的xml需要解析,其实不难,但是也花了我一些时间去调试,下面贴出自己的代码,仅供大家参考:
下面是查询使用的类
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请求发送也可以获取到正确内容

猜你喜欢

转载自zhengshuo.iteye.com/blog/1881175
今日推荐