IT干货网

PI-海外银企直联方案

luoye 2022年03月09日 SAP 294 0

海外银企直联方案采用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任务 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!