中国银行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请求发送也可以获取到正确内容
分享到:
相关推荐
B2C订单流程全解析 b2c订单管理流程 全面剖析
13 2.2.4 银行发送B2C支付结果通知 15 2.2.5 商户查询订单信息 19 2.2.6 商户发送B2C退款指令 23 2.2.7 批量退货及反馈文件格式 28 2.2.8 业务对账文件格式 30 2.2.9 清算对账文件格式 31 2.3 安全机制 33 2.3.1 ...
中国工商银行网上银行新B2C在线支付
工行B2C订单查询接口,文档说明,测试demo,测试流程说明
新接口中国工商银行网上银行B2C在线支付接口说明
中国工商银行网上银行新B2C在线支付接口说明V1.0.0.14(20110706)
华夏银行B2C支付网关企业客户客户端代理软件6.0sp2.rar
交通银行和北京银行B2C支付接口开发详细说明文档,有了他,轻松付
中国工商银行网上银行,C2C在线支付接口说明文档 V1.0.0.1
中国工商银行网上银行新B2C在线支付接口说明V1.0.0.17.doc
农业银行B2C支付_ASPNET版本,搞农行银商接口的,可以使用参考或者使用此方式.
学位论文-—电子商务中b2c订单管理优劣势探讨.doc
交通银行B2C网上支付介绍.pptx
电子商务中b2c订单管理优劣势探讨毕业设计(论文).doc
交通银行B2C网上支付API.JAVA安装包1.0.2
将压缩包加压到本地,直接点击derive.exe 弹出命令行窗口,工商银行b2c证书拆分工具 将.pfx文件拆分为公钥和私钥 使用方法
农业银行B2C接口JAVA版,想在网站集成银商接口支付的.可以用此方法.
B2C流程说明、B2C接口数据说明、安全API说明、开发步骤;每步都有详细说明