• 支付宝与微信对账文件解析


    一,对账文件解析

      1)在支付中会涉及到对账问题,那么对账文件解析就是个较为棘手的事情,那今天就来看下常见的对账文件格式与解析;

    二,常见对账文件格式

      1)支付宝与微信的对账文件都是.csv格式,这样的对账文件可以使用exceld打开,也可以使用文本编辑器打开,

           其他类型对账文件大多是XML文件,下面来看下是什么样子的文件

        支付宝文件

        1.样式

        

        2.exceld打开样式

        3.编辑器打开样式

      微信文件

        1.文本打开样式

        

      

      XML文件

        1.XML类型文件是我们常常遇到的类型,解析方式要根据内容情况来进行

    三,解析

      1)根据不同的内容设置不同的解析方法

      2)微信csv文件解析示例(支付宝同理)

    //读取文件
            File file = new File("F:/test/wexin.csv");
            //解决中文乱码
            InputStreamReader isr=null;
            BufferedReader buff =null;
            try {
                isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
                 buff = new BufferedReader(isr);
                String line=null;
                //数据容器
                List<WwXin> wxinlist=new ArrayList<WwXin>();
                WwXin wXin =null;
                while ((line=buff.readLine())!=null) {
                    //去除`
                    String replace = line.replace("`", "");
                    String[] split = replace.split(",");
                    //去除后两行,第一行也是不需要存到数据库的,在后续操作中去掉第一条数据
                    if(split.length==24) {
                        //符合要求
                        wXin=new WwXin();
                        wXin.setTime(split[0]);
                        wXin.setId(split[1]);
                        wXin.setShh(split[2]);
                        wXin.setZshh(split[3]);
                        wXin.setSbh(split[4]);
                        wXin.setWxddh(split[5]);
                        wXin.setShddh(split[6]);
                        wXin.setYhbs(split[7]);
                        wXin.setJylx(split[8]);
                        wXin.setJyzt(split[9]);
                        wXin.setFkyh(split[10]);
                        wXin.setHbzl(split[11]);
                        wXin.setZje(split[12]);
                        wXin.setDjjlj(split[13]);
                        wXin.setWxtkdh(split[14]);
                        wXin.setHztkdh(split[15]);
                        wXin.setTkje(split[16]);
                        wXin.setLjje(split[17]);
                        wXin.setTklx(split[18]);
                        wXin.setTkzt(split[19]);
                        wXin.setSbmc(split[20]);
                        wXin.setShsjb(split[21]);
                        wXin.setSxf(split[22]);
                        wXin.setFl(split[23]);
                        //添加
                        wxinlist.add(wXin);
                    }
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(isr!=null) {
                        isr.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if(buff!=null) {
                        buff.close();    
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

      3)XMl文件解析(要根据具体格式具体解析)

    List<AccountQueryAccountLogVO> list = new ArrayList<AccountQueryAccountLogVO>();
            try {
                //创建SAXReader对象读取proudct4.xml文件
                SAXReader reader = new SAXReader();
                //从本地读取文件,读取xml
                File file = new File("F:/test/2017-12-26.xml");
                Document document = reader.read(file);
                //读取根节点
                Element rootElement = document.getRootElement();
                //获取全部节点
                Iterator<Element> it1 = rootElement.elementIterator();
                //遍历子节点
                while(it1.hasNext()){//判断是否有下一个子元素
                    //子节点
                    Element productEle = it1.next();
                    Iterator<Element> it2 = productEle.elementIterator();
                    //遍历product标签的子元素
                    while(it2.hasNext()){
                        //获取每个子元素
                        Element eles = it2.next();
                        Iterator<Element> it3 = eles.elementIterator();
                        while(it3.hasNext()){
                            //获取每个子元素
                            Element next = it3.next();
                            Iterator<Element> it4 = next.elementIterator();
                            AccountQueryAccountLogVO accountQueryAccountLogVO =null;
                            while (it4.hasNext()) {
                                Element next2 = it4.next();
                                Iterator<Element> it5 = next2.elementIterator();
                                accountQueryAccountLogVO= new AccountQueryAccountLogVO();
                                while (it5.hasNext()) {
                                    Element next3 = it5.next();
                                    String name = next3.getName();
                                    switch (name) {
                                    case "balance":
                                        String data = (String)next3.getData();
                                        accountQueryAccountLogVO.setBalance(data);
                                        break;
                                    case "buyer_account":
                                        String buyerAccount = (String)next3.getData();
                                        accountQueryAccountLogVO.setBuyerAccount(buyerAccount);
                                        break;
                                    case "currency":
                                        String currency = (String)next3.getData();
                                        accountQueryAccountLogVO.setCurrency(currency);
                                        break;
                                    case "deposit_bank_no":
                                        String depositBankNo = (String)next3.getData();
                                        accountQueryAccountLogVO.setDepositBankNo(depositBankNo);
                                        break;
                                    case "goods_title":
                                        String goodsTitle = (String)next3.getData();
                                        accountQueryAccountLogVO.setGoodsTitle(goodsTitle);
                                        break;
                                    case "income":
                                        String income = (String)next3.getData();
                                        accountQueryAccountLogVO.setIncome(income);
                                        break;
                                    case "iw_account_log_id":
                                        String iwAccountLogId = (String)next3.getData();
                                        accountQueryAccountLogVO.setIwAccountLogId(iwAccountLogId);
                                        break;
                                        
                                    case "merchant_out_order_no":
                                        String merchantOutOrderNo = (String)next3.getData();
                                        accountQueryAccountLogVO.setMerchantOutOrderNo(merchantOutOrderNo);
                                        break;
                                    case "outcome":
                                        String outcome = (String)next3.getData();
                                        accountQueryAccountLogVO.setOutcome(outcome);
                                        break;
                                    case "partner_id":
                                        String partnerId = (String)next3.getData();
                                        accountQueryAccountLogVO.setPartnerId(partnerId);
                                        break;
                                    case "rate":
                                        String rate = (String)next3.getData();
                                        accountQueryAccountLogVO.setRate(rate);
                                        break;
                                    case "seller_account":
                                        String sellerAccount = (String)next3.getData();
                                        accountQueryAccountLogVO.setSellerAccount(sellerAccount);
                                        break;
                                    case "seller_fullname":
                                        String seller = (String)next3.getData();
                                        accountQueryAccountLogVO.setSellerAccount(seller);
                                        break;
                                    case "service_fee":
                                        String serviceFee = (String)next3.getData();
                                        accountQueryAccountLogVO.setServiceFee(serviceFee);
                                        break;
                                    case "sign_product_name":
                                        String signProductName = (String)next3.getData();
                                        accountQueryAccountLogVO.setSignProductName(signProductName);
                                        break;
                                    case "sub_trans_code_msg":
                                        String subTransCodeMsg = (String)next3.getData();
                                        accountQueryAccountLogVO.setSubTransCodeMsg(subTransCodeMsg);
                                        break;
                                    case "total_fee":
                                        String totalFee = (String)next3.getData();
                                        accountQueryAccountLogVO.setTotalFee(totalFee);
                                        break;
                                    case "trade_no":
                                        String tradeNo = (String)next3.getData();
                                        accountQueryAccountLogVO.setTradeNo(tradeNo);
                                        break;
                                    case "trade_refund_amount":
                                        String tradeRefundAmount = (String)next3.getData();
                                        accountQueryAccountLogVO.setTradeRefundAmount(tradeRefundAmount);
                                        break;
                                    case "trans_code_msg":
                                        String transCodeMsg = (String)next3.getData();
                                        accountQueryAccountLogVO.setTransCodeMsg(transCodeMsg);;
                                        break;
                                    case "trans_date":
                                        String transDate = (String)next3.getData();
                                        accountQueryAccountLogVO.setTransDate(transDate);
                                        break;
                                    default:
                                        break;
                                    }
                                }
                                list.add(accountQueryAccountLogVO);
                            }
                        }
                        
                    }
                }
            } catch (DocumentException e) {
                e.printStackTrace();
            }
        }
  • 相关阅读:
    Football Foundation (FOFO) TOJ 2556
    JAVA- String类练习
    JAVA- 清除数组重复元素
    Mysql远程登陆错误:ERROR 2003
    Linux学习之路(五)压缩命令
    Linux学习之路(四)帮助命令
    如何识别真Microsoft服务与非Microsoft服务来定位病毒自己的服务
    如何用命令行删除EasyBCD开机选择项?
    JAVA- 成员变量与局部变量的区别
    JAVA- 内部类
  • 原文地址:https://www.cnblogs.com/hi-feng/p/8124641.html
Copyright © 2020-2023  润新知