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