SwiftPWFilter

SwiftPWFilter是利用prowide的开源项目WIFE框架去实现的对Swift报文的解析于组装,目前使用的是该项目的开源版本,开项目还提供企业级版本。

1.配置规则

  1. 目前filter提供SWIFT解析(in),SWIFT组装(out)两种功能;

  2. 解析的时候利用etag去解析,值形式为:SEQUENCE:TAG或TAG ,如A:20,就是获取的序列A下的20域,需要特殊说明的是,如果是TAG的形式,如果本身TAG是循环的,返回的即是字符串数组,否则是字符串;如果是SEQUENCE:TAG的形式,SEQUENCE是循环的,返回的即是二维数组,否则是一维数组,以上说明后期使用的时候需要特别注意;

  3. 解析的时候会把部分报文公共参数放入到上下文object对象中以Map的形势,包括application id、logical terminal、sequence number、service id、session number、message priority、message type、receiver、sender、message direction;

  4. 组装的时候利用etag标记TAG,value作为TAG对应的值处理,需要说明这时候的TAG不同于解析时候的etag,他不包括SEQUENCE。同时需要说明的是目前组装之后的报文缺少校验,不能保证报文的正确性;

  5. 组装报文的时候还需要利用etag放入部分报文的功能参数,参数名为:application_id、logical_terminal、sequence_number、service_id、session_number、message_priority、message_type、receiver、sender; 组装报文目前只能默认组装“I”类型的incoming报文;

2.示例

<transaction id="t">
            <step id="1">
                <filter type="out" ref="SwiftPWFilter">
                    <!--BLOCK1 -->
                    <field etag="application_id" value="F" description="F/A/L应用程序表示" />
                    <field etag="service_id" value="01" description="01/02/03/04/...应用程序协议单元标示" />
                    <field etag="sender" value="PSBCCNBJAXXX" description="发报行" />
                    <field etag="session_number" value="0001" description="序号1" />
                    <field etag="sequence_number" value="000001" description="序号2" />
                    <!--BLOCK2 -->
                    <field etag="message_type" value="103" description="序号2" />
                    <!-- SWIFT后面O为发报行 I为收报行 -->
                    <field etag="receiver" value="RCBCCNBJAXXX" description="收报行" />
                    <field etag="message_priority" value="U2020" description="电报紧急状态1位/" />
                    <field etag="message_priority" value="U2020" description="电报紧急状态1位/" />
                    <!--BLOCK4 -->
                    <field etag="20" value="FX197038-144539" description="20栏位" />
                    <field etag="22A" value="NEWT" description="22A栏位" />
                </filter>
                <log value="${this}"/>
            </step>
        </transaction>

在cfg/etc/commons.xml中注册filter

<filters>
   <filter class="SwiftPWFilter" id="SwiftPWFilter" />
</filters>

控制台打印结果如下

image-20221019134233204

组报结果

[${this}]={1:F01PSBCCNBJAXXX0001000001}{2:I103RCBCCNBJXXXXU2020}{4:
:20:FX197038-144539
:22A:NEWT
-}

3.SWIFT报文类型及格式

3.1SWIFT电文类型

  1. 用户报文,用于SWIFT会员用户之间相互发送和接收的报文,也是SWIFT报文最核心和最复杂的内容,MT1XX——MT9XX类报文都属于用户报文。

  2. 系统报文(System Message),用户SWIFT系统反馈信息给SWIFT用户的报文,如MT008 系统请求取消、MT009系统请求退出、MT081用户当日浏览记录、MT094广播信息等,涉及报文编号为MT0XX。

  3. 系统报文(Service Message),用于反馈特定系统信息的电文,包括2!n格式电文,如02 登录请求电文,03 选择命令,05 取消命令,06 退出命令等,涉及报文编号有02、03、05、06、21、22、23、24、25、26、42、43。

  4. 错误码(Error Code),用于反馈特定的错误类型,格式为2!n或者3!C,例如000表示电文没有正文,01表示因电文过期导致的退出/取消确认错误,A01表示因应用程序接口阻塞导致的中止应用程序接口错误。

3.2SWIFT电文结构

  1. 报头Header Block

    报头为发报行(Sender)、收报行(Receiver)和报文输入编号(Message Input Number)信息。

  2. 正文Text Block

    正文为电文主体部分,包括域标签和内容,域标签由分界符(:)、域编号(nn)、格式选项([a])、分界符(:)构成,内容为发送给收报行的信息。

  3. 报尾Tail Block

    报尾为报文密押信息(MAC)和校验信息(CHK)。

3.3SWIFT CODE格式

SWIFT CODE实际上在SWIFT里称为BIC(Bank Identifier Code),银行识别码。其格式如下:

Bank Code+Country Code+Location Code+Branch Code

4!a + 2!a + 2!c +[3!c]

如中国农业银行总行ABOCCNBJXXX

中国农业银行纽约分行ABOCUS33

中国农业银行广东省分行ABOCCNBJ190

注:[3!C]为XXX表示该金融机构总部

3.4SWIFT字符表示方式

前文中经常会提到4!a、[3!C]等表示方式,SWIFT中对于字符表示的规定如下:

n----------------表示一位数字

a----------------表示一位字母

c----------------表示一位数字或者字母

x----------------表示一个字符 (SWIFT允许的任意字符,数字、字母大小写、换行、回车、空格等)

d----------------表示数字或者“,”(SWIFT里数字的表示中“,”代表小数点)

2n----------------表示最多两位数字

2!n----------------表示必须两位数字

4*35X----------------表示填入内容最多四行,每行最多35个字符

[/34X]----------------表示“/”后最多跟34个字符,“[]”表示可选项

3.5SWIFT BIC是否启用

金融机构无论是否接入SWIFT网络都可以申请登记BIC。如果该金融机构的电子 系统已经接入SWIFT网络,则已经启用了SWIFT BIC,没有启用的BIC第八位为数字1,如CHBAHKH1。未启用的BIC Code不能用于收报行和发报行,但是可用于正文标识金融机构。

3.6SWIFT Message Type是否为密押电文

SWIFT电文的安全性来源之一就是银行之间会互相建立密押关系,而涉及加押的电文为MT1XX、MT2XX、MT(4-8)XX类电文,MT3XX、MT9XX类电文不加押。

results matching ""

    No results matching ""