日结算 java_建设银行支付接口,按日期查询已结算订单xml接口解析(JAVA版) | 学步园...
建行的查询接口不如招行那么全面,建行没有提供按单订单号查询,而且如果你查询的日期没有一笔成功的订单会直接返回一个html告诉你没有信息,并且如果你跨天查询,订单很多很多,他也会返回一个html告诉你订单太多了,无法显示,所以鲁炬这里选择的是,每次只查一天的数据,如果是时间段就用程序分割成一天一天的去查,下面是选择用xml格式查询的解析核心代码。
private List queryOrderInfoByCcb(String orderDate) {
List list = new ArrayList();
String baseUrl = "https://ibsbjstar.ccb.com.cn/app/ccbMain?";
String MERCHANTID = this.getBankCono();
String BRANCHID = this.getBankBranchid();
String POSID = this.getBankPosId();
String ORDERDATE = orderDate;
String BEGORDERTIME = "00:00:00";
String ENDORDERTIME = "23:59:59";
String BEGORDERID = this.getBankPwd();
String ENDORDERID = "9999999999";
String QUPWD = "******";
String TXCODE = "410405";
String SEL_TYPE = "3";
String OPERATOR = "001";
String bankURL = "";
String result = "";
String param = "MERCHANTID=" + MERCHANTID + "&BRANCHID=" + BRANCHID + "&POSID=" + POSID + "&ORDERDATE=" + ORDERDATE
+ "&BEGORDERTIME=" + BEGORDERTIME + "&ENDORDERTIME=" + ENDORDERTIME + "&BEGORDERID=" + BEGORDERID
+ "&ENDORDERID=" + ENDORDERID + "&QUPWD=" + QUPWD + "&TXCODE=" + TXCODE + "&SEL_TYPE=" + SEL_TYPE
+ "&OPERATOR=" + OPERATOR + "&bankURL=" + bankURL + "&result=" + result + "&MAC=";
String tmp = "MERCHANTID=" + MERCHANTID + "&BRANCHID=" + BRANCHID + "&POSID=" + POSID + "&ORDERDATE=" + ORDERDATE
+ "&BEGORDERTIME=" + BEGORDERTIME + "&ENDORDERTIME=" + ENDORDERTIME + "&BEGORDERID=" + BEGORDERID
+ "&ENDORDERID=" + ENDORDERID + "&QUPWD=&TXCODE=" + TXCODE + "&SEL_TYPE=" + SEL_TYPE + "&OPERATOR=" + OPERATOR;
String strMD5 = ByteUtil.byteToChar(MD5Ccb.encode(tmp.getBytes()));
String xml = null;
try {
String url = baseUrl + param + strMD5;
log.debug("发送建行查询http请求:"+url);
xml = HttpClientUtil.getHtml(url);
} catch(IOException e) {
String msg = "建行对账文件获取HTTP访问失败,异常信息:" + e.getMessage();
log.error(msg);
throw new RuntimeException(msg);
}
if(xml.contains("您所在查询的IP地址有误")){
String msg = "查询日期:"+orderDate+"-建行对账系统提示信息:您所在查询的IP地址被限制访问,请联系建行将服务器地址加入到访问列表中后再进行对账操作。";
log.error(msg);
throw new RuntimeException(msg);
}
//根据查询条件未找到记录或记录太多
if(xml.contains("根据查询条件未找到记录或记录太多")){
String msg = "查询日期:"+orderDate+"-建行对账系统提示信息:根据查询条件未找到记录或记录太多,请修改查询日期。";
log.error(msg);
return list;
//throw new RuntimeException(msg);
}
xml = xml.trim();
log.debug("建行对账文件HTTP获取成功:xml长度:" + xml.length());
StringReader stringReader = new StringReader(xml);
Document doc = null;
try {
doc = new SAXReader().read(stringReader);
} catch(DocumentException e) {
String msg = "建行对账文件XML解析失败,异常信息:" + e.getMessage();
log.error(msg);
log.error("xml内容:"+xml);
throw new RuntimeException(msg);
}
Element element = doc.getRootElement();
List orders = element.elements();
for(Element el : orders) {
List orderContexts = el.elements();
double money = 0;//金额
String orderNum = null;//订单号
String orderStatus = null;//订单状态
for(Element orderEl : orderContexts) {
//log.debug(orderEl.getName() + " - " + orderEl.getText());
if("ORDERID".equals(orderEl.getName())) {
orderNum = orderEl.getText();
}
if("AMOUNT".equals(orderEl.getName())) {
money = Double.valueOf(orderEl.getText());
}
if("STATUS".equals(orderEl.getName()) && "成功".equals(orderEl.getText())) {
orderStatus = "0";
}
}
if(money != 0 && !StringUtils.isBlank(orderNum) && !StringUtils.isBlank(orderStatus)) {
OrderInfo orderInfo = new OrderInfo();
orderInfo.setTradeDate(orderDate);
orderInfo.setDealDate(orderDate);
orderInfo.setMoney(money);
orderInfo.setOrderNum(orderNum);
orderInfo.setOrderStatus(orderStatus);
list.add(orderInfo);
}
}
log.debug("解析建行对账文件成功:订单明细条数:" + list.size());
/*for(OrderInfo orderInfo : list) {
log.debug("解析建行对账文件成功:订单明细:" + orderInfo.toString());
}*/
log.debug("建行对账文件XML解析完毕!");
return list;
}
对HttpClient的封装,HttpClientUtil看这里
http://blog.csdn.net/luju5/article/details/8555106
日结算 java_建设银行支付接口,按日期查询已结算订单xml接口解析(JAVA版) | 学步园...相关推荐
- php xml 接口调用,php的SimpleXML方法读写XML接口文件实例解析
在php5中读写xml文档是非常方便的,可以直接使用php的SimpleXML方法来快速解析与生成xml格式的文件,下面举例说明: 创建一个SimpleXML对象有三种方法: 1.使用new关键字创建 ...
- 饮料供货java_动态规划(3):饮料供货动态规划(3):饮料供货 | 学步园...
题目 题目来自<编程之美>:在微软亚洲研究院上班,大家早上来的第一件事是干啥呢?查看邮件?No,是去水房拿饮料:酸奶,豆浆,绿茶.王老吉.咖啡.可口可乐--(当然,还是有很多同事把拿饮料当 ...
- 实现分派问题的回溯算法java_工作分配问题 Java 回溯 | 学步园
问题描述: 设有n件工作分配给n个人.为第i个人分配工作j所需的费用为c[i][j] .试设计一个 310 2 32 3 43 4 5 import java.util.Scanner; public ...
- jdb java_利用JDB附加调试JAVA程序 | 学步园
之前有介绍用Eclipse远程调试JAVA程序,见Eclipse远程调试JAVA程序,但现场JAVA程序出现异常,又不能在现场真实环境装Eclipse来调试,所幸有JDB这个工具.此工具的常规用法不介 ...
- 拼多多开放平台订单详情接口解析
API接口订单接口是指用于实现订单相关操作的程序接口.通过这个接口,用户可以实现创建.修改.查询和取消订单等功能. 常见的API接口订单接口包括: 创建订单接口,用于实现用户下单操作. 修改订单接口, ...
- 旺店通·企业奇门对接打通金蝶云星空查询销售出库单接口与销售出库新增接口
接入系统:旺店通·企业奇门 慧策最先以旺店通ERP切入商家核心管理痛点--订单管理,之后围绕电商经营管理中的核心管理诉求,先后布局流量获取.会员管理.仓库管理等其他重要经营模块.慧策的产品线从旺店通E ...
- 旺店通·企业奇门对接打通用友BIP查询销售出库单接口与销售订单单个保存接口
旺店通·企业奇门对接打通用友BIP查询销售出库单接口与销售订单单个保存接口 源系统:旺店通·企业奇门 慧策(原旺店通)是一家技术驱动型智能零售服务商,基于云计算PaaS.SaaS模式,以一体化智能零售 ...
- 【javaWeb微服务架构项目——乐优商城day15】——会调用订单系统接口,实现订单结算功能,实现微信支付功能
0.学习目标 会调用订单系统接口 实现订单结算功能 实现微信支付功能 源码笔记及资料: 链接:https://pan.baidu.com/s/1_opfL63P1pzH3rzLnbFiNw 提取码:v ...
- 微信对账单 java_微信支付对账,你是如何处理的?
支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致 ...
最新文章
- FTPClient.storeFile返回false的原因
- 基于外卖评论的舆情风控
- 计算机计算各科及格率,某两个班数学考试成绩如下,要求计算分析指标,用..._投资分析考试_帮考网...
- jquery基本操作
- 【最全最详细】publiccms其他常用代码片段(内容、站点)
- mysql挂载数据卷_docker卷挂载技术
- 提前俯瞰应用变现行业前景,抢占未来先机
- matlab hadamard(哈达玛变换)变换
- H - Going in Cycle!! (UVA - 11090)
- Py之lime:lime库的简介、安装、使用方法之详细攻略
- python中求差的函数_python3函数取差是什么?如何写代码?
- C#中如何隐藏滚动条(ScrollBar)同时又具备自动滚动的功能
- 如何看待2022届秋招嵌入式开发岗位薪资大涨?
- PC端和移动端微信加入群聊测试用例设计点
- 网络计划--时间参数的计算和优化
- 必看!最全面的IDC数据中心讲解
- Oracle11gR2 并行执行存储过程
- 肠道微生物是药物或食品生物利用度的有效调节者
- xnawindowsphCocos2d-x for XNA游戏引擎全面支持WP7
- Rect定义的参数含义