海外銀企直聯方案采用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()); } }
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任務