支付寶與微信對帳文件解析

一,對帳文件解析

  1)在支付中會涉及到對帳問題,那麼對帳文件解析就是個較爲棘手的事情,那今天就來看下常見的對帳文件格式與解析;數據庫

二,常見對帳文件格式

  1)支付寶與微信的對帳文件都是.csv格式,這樣的對帳文件能夠使用exceld打開,也能夠使用文本編輯器打開,微信

       其餘類型對帳文件大可能是XML文件,下面來看下是什麼樣子的文件編輯器

    支付寶文件spa

    1.樣式excel

    

    2.exceld打開樣式code

    3.編輯器打開樣式xml

  微信文件

    1.文本打開樣式對象

    

  

  XML文件

    1.XML類型文件是咱們經常遇到的類型,解析方式要根據內容狀況來進行blog

三,解析

  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();
        }
    }
相關文章
相關標籤/搜索