中国银行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请求发送也可以获取到正确内容
分享到:
相关推荐
孙允中临证实践录.pdf
Rqalpha-myquant-learning对开源项目Rqalpha的改造,在应用上面更适合个人的应用。学习量化策略,对量化策略进行开发调试。2018-05-25程序更新集成大鱼金融提供的分钟线回测Mod,用来提供Jaqs分钟线数据源,测试程序通过。目前的改造情况1.增加ats.main.py,来驱动起回测,使程序可以使用pycharm进行开发调试2.增加批量回测功能3.在AlgoTradeConfig中进行配置回测的策略和所需要的参数信息,参数信息通过excel文件进行配置4.在ats.main.py中设置参数为batch,运行回测,会将输出的.csv文件放在cvsResult目录下,将回测的图片保存在picResult目录下。5.读取回测的.csv文件,提取账户信息,可以将不同参数回测的结果输出在同一张图片上,更加清晰的看清同一个策略,不同参数所带来的变化。6.从广发信号站点获取历史交易信号(站点已停止,此处无法继续)7.增加通用函数的封装,现阶段增加了对TA_LIB的调用封装(未完整完成)8.增加了对增量资金定投的情况的模拟,用
航班背景随着国内民航的不断发展,航空出行已经成为人们比较普遍的出行方式,但是航班延误却成为旅客们比较头疼的问题。台风,雾霾或飞机故障等因素都有可能导致大面积航班延误的情况。大面积延误给旅客出行带来很多不便,如何在计划起飞前2小时预测航班延误情况,让出行旅客更好的规划出行方式,成为一个重大课题。要求提前2小时(航班计划起飞时间前2小时),预测航班是否会延误3小时以上(给出延误3小时以上的概率)
comsol变压器绝缘油中流注放电仿真,使用PDE模块建立MIT飘逸扩散模型。 模型到手即用,提供MIT鼻祖lunwen中文版,及相关学习笔记资料。 流注放电,绝缘油,油纸绝缘。
基于STM8单片机的编程实例,可供参考学习使用,希望对你有所帮助
云南大数据交通太阳的云南大数据交通
comsol激光打孔(不通)水平集两相流仿真模型,涉及温度场流场水平集, 模型为复现模型,仅供学习,可自己更材料功率等参数 爽快确认模型无误并收送变形几何三维打孔模型或水平集抛光模型。
哈工深 自适应滤波课堂笔记
Django框架实现学生信息管理系统 总体概括 注册流程 首先进行输入用户名(邮箱)、密码以及验证码,输入完之后点击注册按钮。如果输入的不正确,提示错误信息。 如果一切信息填写正确无误,调用STMP模块发送激活邮件,用户必须要点击接收到邮箱链接,进行邮件激活后才方可登陆。 即使注册成功,没有激活的用户也不能登陆,用户以get的方式直接重定向到注册页面。 注册登录: 用户能在系统中进行登陆注册和忘记密码进行找回的功能。 个人中心:修改头像,修改密码,修改邮箱,可以看到我的信息。 日志记录: 记录后台人员的操作,方便发现BUG和查看各项调用进行时间。 导航栏:学生信息中有基本信息、年级及成绩信息的模块,能够排序筛选等功能。 多选操作: 可以选择多条记录进行删除操作,还可以在课程列表页可以对不同课程进行排序。 数据页码: 可以设置各项数据在每一页中显示的数量多少,进行翻页功能。 模块列表页: 能够有过滤器功能,在范围内进行查看数据。还能将数据导出为csv,x
车辆主动悬架防侧翻控制 利用Simulink和Carsim进行联合仿真,搭建主动悬架以及防倾杆模型,在不同转角工况下进行仿真试验,设置滑模等控制器计算维持车辆侧倾稳定性所需的力矩,将力矩分配到各个悬架实现控制效果。 控制效果良好,保证运行成功。 项目报告撰写请单独。
计算机系毕业设计
资源描述: HTML5实现好看的MT外卖订餐网站源码,好看的酷炫的MT外卖订餐网站源码,酷炫的MT外卖订餐网站源码模板,HTML酷炫的MT外卖订餐网站源码,内置酷炫的动画,界面干净整洁,页面主题,全方位介绍内容,可以拆分多个想要的页面,可以扩展自己想要的,注释完整,代码规范,各种风格都有,代码上手简单,代码独立,可以直接运行使用。也可直接预览效果。 资源使用: 点击 index.html 直接查看效果
MDPI下的sensors模板,.docx格式
新医林改错《内经·素问》分册.pdf
命令行查看基金、个股数据,使用天天基金和新浪财经的数据接口,欢迎大家fork基金2.0命令行查看基金、个股数据,使用天天基金和新浪财经的数据接口,欢迎大家fork环境准备运行环境Python3 所需的软件包requests prettytable colorama基金自选修改my_jijin.txt文本文件,每行都是一个您关注的基金代码启动方式python3 main.py
NiuCloud-Admin-SAAS 是一款快速开发SaaS通用管理系统后台框架, 前端采用最新的技术栈Vite+TypeScript+Vue3+ElementPlus最流行技术架构,后台结合PHP8、Java SDK、Python等主流后端语言搭建是一款快速可以开发企业级应用的软件系统。
脉振方波高频注入代码+增强型滑膜esmo代码,永磁同步电机高频注入程序 资料为C代码一份,大厂代码,可运行,经典流传; 配套一篇代码对应的说明文档,详细算法说明; 脉振方波注入方法相对于脉振正弦信号注入的形式,信号处理的过程少了一些滤波器 ,计算更简单,并且由于信号频段较高,可以实现更高的动态响应能力。 增强滑膜控制;
逆变器下垂控制,微电网逆变器孤岛下垂控制,波形输出完美
multisim学习电路基础视频共42讲(个人觉得超赞)5G提取方式是百度网盘分享地址
基于 Vue 数据可视化组件(类似阿里DataV,大屏数据展示)编辑器。基于 Vue 数据可视化组件(类似阿里DataV,大屏数据展示)编辑器。项目初始化npm install启动开发环境npm run dev项目打包上线npm run buildLints和fixes文件npm run lint