中国银行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请求发送也可以获取到正确内容
分享到:
相关推荐
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 ...
中国工商银行(ICBC)的网上银行B2C在线支付服务,为电子商务平台提供了便捷的支付解决方案。这一服务旨在简化消费者在商户网站上的支付过程,确保交易的安全性和效率。 **处理流程概览**: 1. **顾客下单**:顾客...
中国工商银行的网上银行B2C在线支付接口是一个用于商家(Business-to-Consumer)与消费者间安全交易的技术规范,主要用于电子商务场景。此接口旨在提供一种高效、安全的方式,使得消费者能够直接通过工行网银系统...
中国工商银行的网上银行新B2C在线支付接口是商家与工商银行进行电子商务交易的重要技术组成部分,主要服务于企业对消费者(Business to Consumer)的交易场景。这个接口允许商家在自己的网站上集成工行的支付功能,...
中国工商银行的网上银行B2C在线支付接口是一个用于商家(Business-to-Consumer)与消费者间进行电子商务交易的关键组件。此接口允许商家在其网站上集成工行的支付功能,方便客户直接通过工行账户进行购物支付。以下...
- 商户根据工行的B2C订单数据规范,生成订单数据并使用工行提供的API和商户证书对数据签名,构建一个表单提交给客户。 - 客户确认支付,表单提交到工行的接收Servlet。 - 工行系统验证订单和商户信息,若无误则...
6. **订单处理**:当顾客选择中国银行支付并成功付款后,ECShop会接收到银行返回的支付状态通知,自动更新订单状态,商家可以根据此信息进行后续的订单处理,如发货等。 此插件的推出,不仅方便了中国银行的持卡...
此接口允许商家集成中国农业银行的网上支付服务,以便消费者可以直接通过农行的网银系统进行在线交易。下面将详细介绍这个接口的功能和相关知识点。 1. **支付请求**: 在B2C支付流程中,首先由商家系统发起支付...
同时,对比银联在线支付(0.56%)和B2C电子支付(0.3%),中国银行的手续费仍然具有竞争力。 四、支付领域概念模型: 这一部分涉及支付流程中的关键元素,包括用户、商户、银行、支付网关等实体,以及它们之间的...
这些接口允许商家系统(ECShop)与银行系统进行通信,完成订单支付、退款、查询交易状态等操作。 2. **支付流程**:用户在ECShop上选购商品并提交订单后,会被引导到工商银行的支付页面进行支付。用户输入支付信息...
10. **合规性**:B2C财付通App必须遵循相关的法律法规,如中国的《非银行支付机构网络支付业务管理办法》等,确保其业务的合法性。 从文件名称列表“B2C”来看,这可能涉及到B2C业务的具体实现或案例,可能包括App...
* 订单查询和管理。 六、实训环境 本文档提供了一个实训环境,读者可以通过实践来掌握B2C电子商务网站的前台功能和后台管理功能。实训环境包括: * 徳意通电子商务实验室; * 网上交易之B2C模块前台购物功能。 ...
工商银行(ICBC)作为中国最大的商业银行之一,其B2C接口服务是为商家提供的一种电子支付解决方案,允许消费者在其平台上安全、便捷地进行购物支付。本文将详细探讨工行B2C对接的问题及解决方案。 首先,工行B2C...
1.1.3 B2C订单交易状态查询的API接口 请求数据格式和返回数据格式与B2B类似,但可能针对消费者交易特性有所调整,如添加消费者的支付方式、消费记录等信息。 1.1.4 C2C订单交易状态查询的API接口 C2C接口则更侧重...
B2C电子商务网站的前台功能至关重要,包括商品搜索、会员注册、个人资料管理、购物车和订单查询等功能。购物流程通常包括:会员注册、商品搜索、商品选购、购物车结算和商家配送。会员注册时,用户需填写用户名和...
例如,出色网是中国早期的B2C电商代表,通过提供图书、音乐CD和影视VCD等商品,吸引了大量用户并实现了盈利。 2. **物流配送**:为了实现商品从商家到消费者的交付,物流配送是不可或缺的一环。企业需要与物流公司...
1.2.3.3 B2C电子商务网站的前台功能包括商品搜索、会员注册、个人信息管理、购物车和订单查询等。消费者一般需要先注册成为会员,然后搜索商品,将商品添加到购物车,进入结算中心完成支付,最后等待商家发货。 ...