日结算 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_微信支付对账,你是如何处理的?
支付对账,即检查第三方支付与数据库中账单是否一一对应,涉及到微信对账单的处理,成功时,微信账单接口返回数据以文本表格的方式返回,第一行为表头,后面各行为对应的字段内容,字段内容跟查询订单或退款结果一致 ...
最新文章
- 批量修改在索引中增加字段
- 第三次上课 PPT 课后测试
- 机器学习-集成学习-提升树-Xgboost
- mysql采用 级触发_Mysql高级之触发器(trigger)
- jzoj3382-七夕祭【贪心,中位数】
- 元素属性的添加删除(原生js)
- DOS状态下可以安装Win XP
- 数据库连接配置 app.config web.config
- 工程计算软件_同望BIM工程量计算软件—土石方
- 使用Anaconda安装tensorflow
- 一键解决“请卸载所有32位office程序,然后重试安装64位office”
- java使用odbc连接数据库连接_Java使用ODBC连接数据库
- mp4的box信息——avcC,mdat
- webview出现图片加载异常 Mixed Content: The page at 'https
- 贾扬清、李沐、陈天奇:如何看待国内开源现状?
- javascript 异步_javascript异步操作使您的网站充满活力
- QQ空间十亿级视频播放技术优化揭密
- Spring Data JPA分页查询
- 博客营销的价值与注意事项
- mysql对网站seo的作用_友情链接对于网站SEO的作用有哪些
热门文章
- 3dmax 制作牙膏
- 三片式直角应变花主应力及其夹角计算
- 英语口语8000句(7)
- linux_命令行助手:(manpages supplement)/获取linux命令用法示例的若干辅助命令行工具(cheat/tldr/eg/manly)
- 如何恢复android误删的文件夹,手机里的文件删了怎么恢复?这里有最全面的恢复方法...
- 2021-06-08 matlab 笔记
- Lenovo x230i 突然没有声音了
- HDC2021技术分论坛:OpenHarmony驱动框架解读和开发实践
- 面试官:1 到 1000 之间有多少个 7?
- 1、树莓派的VNC文件传输