海外银企直联方案采用PI中间件,业务系统与银行前置机采用SFTP适配器对文件进行加解密传输处理。

1.业务场景

A.SAP运行F110或是EPIC通过审批后生成收付款文件,文件存储在SAP-SFTP指定路径。

B.中间件PI定时抽取SAP-SFTP收付款文件,并通过PGP加密将文件推送到银行SFTP指定路径,同时反馈状态至SAP系统。

C.银行SFTP接收到文件,通过基本信息校验并生成接收状态文件,存储在银行SFTP指定路径,PI定时抽取该路径文件并解密后分发给SAP-SFTP以及SAP-Proxy。

D.银行处理完成后将收付款结果文件存储在银行SFTP指定路径下,PI定时抽取该路径文件并解密后分发给SAP-SFTP以及SAP-Proxy。

E.银行对账单文件存储在银行SFTP指定路径下,PI定时抽取该路径文件并解密后分发给SAP-SFTP以及SAP-Proxy。

2.PI部分配置

A.SAP运行EPIC直接推送数据到PI

 文件不落地,SAP直接推送BASE64数据流到PI,PI接收到数据通过JAVA解析BASE64并改写Mapping Message,加密后将文件推送银行SFTP。

 Mapping Message:

 导入commons_io_220文件包

 

 设置文件名:

 Attributes and Methods 文件转换:

public void transform(TransformationInput input, TransformationOutput output) throws StreamTransformationException {
    String lv_xmlStr;
    String lv_newHead;
    String lv_opstr;

    try{
            MappingTrace lo_mt = getTrace();
            lo_mt.addInfo("Transformation Starting"); 
            
            InputStream lo_inputStream = input.getInputPayload().getInputStream();
            lv_xmlStr = IOUtils.toString(lo_inputStream);
            lo_mt.addInfo("originalXMLString:"+lv_xmlStr);

            //get file name
            DynamicConfiguration lo_conf = input.getDynamicConfiguration();
            DynamicConfigurationKey lv_key = DynamicConfigurationKey.create("http:/"+"/sap.com/xi/XI/System","FileName");
            lo_conf.put(lv_key,"11111223.xml");
            
/**           lv_xmlStr = 
    "<IMP_STRING>" +
        "<![CDATA[" +
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
    "<n0:mt_in001_notice  xmlns:n0=\"urn:iso:std:iso:20022:tech:xsd:pain.001.001.03\">" + 
    "<p_fsnam>lv_value</p_fsnam>" + 
    "<msgid>lv_msgid</msgid>" + 
    "<status>SEND</status>" + 
    "</n0:mt_in001_notice>" +
    "]]>" +
    "</IMP_STRING>";
*/

            //get node: IMP_STRING
          int lv_beg;
          int lv_end;
          lv_beg = lv_xmlStr.indexOf("<IMP_STRING>");
          lv_beg += 12;
          String lv_temp;
          lv_temp = Integer.toString(lv_beg);
          lo_mt.addInfo(lv_temp);
          lv_end = lv_xmlStr.indexOf("</IMP_STRING>");
          lv_temp = Integer.toString(lv_end);
          lo_mt.addInfo(lv_temp);
          String lv_cdata;
          lv_cdata = "";
          lv_cdata = lv_xmlStr.substring(lv_beg,lv_end);

            //Transform base64 to String
            byte[] decodeBytes = java.util.Base64.getDecoder().decode(lv_cdata.getBytes());
            lv_cdata = new String(decodeBytes,java.nio.charset.Charset.forName("UTF-8"));

            lv_opstr = lv_cdata;
          lv_opstr = lv_opstr.replace("<![CDATA[",""); 
            lv_opstr = lv_opstr.replace("]]>",""); 

          lo_mt.addInfo("afterXMLString:"+lv_opstr);

          OutputStream lo_os = output.getOutputPayload().getOutputStream();
          lo_os.write(lv_opstr.getBytes());
          lo_os.flush();    
          lo_os.close();

    }catch(Exception e){
          getTrace().addWarning(e.getMessage());
    }

}
View Code

 

B.SAP通过SFTP发送文件到PI

 文件落地,PI定时抽取文件通过加密发送到银行SFTP。

 SFTP-Sender:

 

 

 

 SFTP-Receiver:

 

 

 

 C.SFTP文件加密解密方式

Communication Channel加密PI发出文件:

 Communication Channel解密PI接收文件:

D.PI广播式发送文件

 

 

 SAP Proxy:

 

3.PI通道监控及日志

  Configuration and Monitoring Home

 适配器引擎状态

消息监控器

 

 4.PI邮件推送

 Integration Builder创建Alert规则

 

 

 

 

 

 邮件服务信息配置 NWA - Configuration - Infrastructure - Java system properties

 

 定义Alert触发Job:NWA - Operations - Jobs - Java scheduler -  Tasks

选择Add增加Job任务 

 

 

posted on 2020-12-22 09:28  ricoo  阅读(1713)  评论(0编辑  收藏  举报