zoukankan      html  css  js  c++  java
  • 关于对接农业银行支付的问题

    农业银行对接会给一个银企通平台的安装程序,然后找一台window系统的服务器安装作为前置机。

    附录:银企通的配置(本地服务器配置银行会提供给,默认TCP协议,HTTP协议虽然有选项但是不支持,默认占用前置机的15999端口,ERP模式下可以自己修改)

    然后对接支付的主要问题就是给前置机的IP地址的15999端口发送要求格式的报文就行了,端口会根据报文中的交易码自动判断当前属于什么交易。

    报文就不贴了,对接的时候跟银行技术人员多沟通下,问问他们报文的一些注意事项。

    //报文拼接可以选择dom4j
     Element root = DocumentHelper.createElement("ap"); //根节点
        root.addElement("CCTransCode").addText("CFRT02");//交易代码
        root.addElement("ProductID").addText("ICC");//产品标志
        root.addElement("ChannelType").addText("ERP");//渠道标志  
    return root.asXML();
    
     /**
       * 请求数据:加密标识(1加密,0不加密) + 请求xml数据的长度(默认7位,不够补空格) + 请求的xml
      public static String genRequestData(String s) throws Exception {
        return "0" + String.format("%1$-6s", s.getBytes("gbk").length) + s;
      }
    
     //报文发送时前面会有一个 2-6位的加密标志作为报文头,这个和银行确认下是否加密,要以gbk编码发送给前置机,从网上找的材料意思是前置机是gbk编码的,utf8加密应该会报错
    
     /**
       * TCP报文发送
       * @param url
       * @param port
       * @param data
       * @return
       * @throws Exception
       */
      public static String socketSendAndReceive(String url, int port, String data) throws Exception {
        System.out.println("请求数据:" + data);
        Socket socket = new Socket(url, port);
        OutputStream bw = socket.getOutputStream();
        bw.write(data.getBytes("gbk"));
        bw.flush();
        InputStream ips = socket.getInputStream();
        StringBuffer sb = new StringBuffer();
        int len = 0;
        byte[] buf = new byte[1024];
        while ((len = ips.read(buf)) != -1) {
          sb.append(new String(buf, 0, len, "gbk"));
        }
        bw.close();
        ips.close();
        socket.close();
        return sb.toString();
      }
    
      /**
       * 把XML无脑解析为MAP
       *
       * @param msg
       * @author jieYW
       * @date 2018/5/29
       * @return com.mind.pay.abc.ap.ApXmlBuilder
       */
      public static Map<String,Object> parseXml(String msg)throws Exception { 
          Map<String,Object> resultMap=new HashMap<>();
          msg=msg.substring(msg.indexOf("<"));
          InputStream inputStream = new ByteArrayInputStream(msg.getBytes("UTF-8"));
          SAXReader reader = new SAXReader();
          Document document = reader.read(inputStream);
          Element root = document.getRootElement();
          List<Element> elementList = root.elements();
          // 遍历所有子节点
          resultMap=getAllElements(elementList,resultMap);
          // 释放资源
          inputStream.close();
          inputStream = null;
          return resultMap;
      }
     
      private static Map<String, Object> getAllElements(List<Element> childElements,Map<String,Object> mapEle) {
        for (Element ele : childElements) {
            mapEle.put(ele.getName(), ele.getText());
            if(ele.elements().size()>0){
                mapEle = getAllElements(ele.elements(), mapEle);
            }
        }
        return mapEle;
    }
    

      

      

      

      

  • 相关阅读:
    _ 下划线 Underscores __init__
    Page not found (404) 不被Django的exception中间件捕捉 中间件
    从装修儿童房时的门锁说起
    欧拉定理 费马小定理的推广
    线性运算 非线性运算
    Optimistic concurrency control 死锁 悲观锁 乐观锁 自旋锁
    Avoiding Full Table Scans
    批量的单向的ssh 认证
    批量的单向的ssh 认证
    Corrupted MAC on input at /usr/local/perl/lib/site_perl/5.22.1/x86_64-linux/Net/SSH/Perl/Packet.pm l
  • 原文地址:https://www.cnblogs.com/leirenyuan/p/11307731.html
Copyright © 2011-2022 走看看