首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SWIFT ACK消息解析

SWIFT ACK消息解析
EN

Stack Overflow用户
提问于 2016-01-15 11:49:54
回答 2查看 13.4K关注 0票数 3

我正在通过基于java的应用程序生成SWIFT消息MT 110和MT 103。为了与终端客户进行协调和共享,我们需要将从SWIFT终端接收的Ack Nak消息映射回MT 110和MT 103事务。要做到这一点,我需要解析每个ACK文件并找出

20:发件人参考ABC1380Q02418

451:0 (ACK)

451:1 (NAK)然后405字段。

我尝试过使用Prowide (妻子)开源SWIFT Java库来实现这一点,但是我无法解析ACK。通过库,我能够解析MT 110和MT 103消息,但不能解析ACK或NAK消息。需要帮助您了解如何通过Prowide (WIFE)开源SWIFT Java库解析SWIFT文件。

下面粘贴了示例ACK消息:

23/12/15-11:50:14 BulBoardCTFACK 0192-000001 1

-例如类型和传输

向SWIFT (ACK)发送原件的通知(传输)

网络交付状态: Network

优先/交付:正常

消息输入参考: 1150 151223 ABCINBADEL2567311531

快速输入: FIN 103单客户Credt传输

发件人: ABCDINBBDEL TTTT银行有限公司(XXXXX分行) YYYYYYYYY

接收人: ANZBAU3MXXX澳大利亚和新西兰银行集团有限公司墨尔本AU

20:发件人参考ABC1380Q02418

23B:银行营运守则

32A: Val /Curr/Interbnk Settld日期:2015年12月23日货币:澳元(澳元)金额:#8000,0#

33B:货币/指示金额货币:澳元(澳元)金额:#8000,0#

50K:订购客户名称和地址/M4132378 ABC DEF 76 AX,模特镇分机,XXXXXXXX

53A:发件人通讯员- FI BIC /1111111 00001 ABCDEFBBDEL ABC

57D:在Inst -Name & Addr //Addr 063144共同财富银行澳大利亚SWIFT代码CTBAAU2S帐户

59:受益客户名称& Addr /555555 ABCDEF YYYYYYYYY

70:汇款信息维护

71A:控罪详情

71 F:寄件人收费货币:澳元(澳元)金额:#0,0#

{CHK:41B1AA23FEDF}

PKI签名:MAC-等效

类别:网络报告

创建时间: 23/12/15 11:50:03

应用: SWIFT接口

操作员:系统

文本

{1:F21ABCDEFBBADEL2567311531}{4:{177:1512231150}{451:0}}

EN

回答 2

Stack Overflow用户

发布于 2016-12-27 16:25:29

发布的示例是扩展打印输出,而不是SWIFT FIN格式的消息。但是,在最后一行中,称为"Text“,您有FIN系统消息,这是Prowide岩心可解析的。

代码语言:javascript
运行
复制
{1:F21ABCDEFBBADEL2567311531}{4:{177:1512231150}{451:0}}

系统消息中的字段451指示消息是加到(0)还是nacked (1)。在nacked时,字段405将包含错误代码。例如:{405:T 33002}

最常见的结构是带有ACK/NAK的系统消息,后面是原始消息的完整副本:

代码语言:javascript
运行
复制
{1:F21LITEBEBBAXXX0066000079}{4:{177:1104180901}{451:0}}{1:F01LITEBEBBAXXX0066000079}{2:I999LITEBEBBXXXXN}{4:
:20:TESTREF1
:79:This is text line 1
-}{5:{CHK:7602B010CF31}{TNG:}}

第一步是确定接收到的消息是否是和ACK/NAK。一旦消息被解析为SwiftMessage,就可以使用此方法来验证它是普通的FIN用户对用户消息,还是带有ACK/NAK的系统消息。

代码语言:javascript
运行
复制
SwiftMessage.isSystemMessage()
SwiftMessage.isAck()
SwiftMessage.isNack()

第二步是将ACK/NAK信息与原始消息的标识分开。此示例使用最常见的格式,即ACK/NAK消息,后面是原始消息的完整副本(例如,SAA AFT或SA使用的格式)。要同时解析ACK/NAK和原始副本:

代码语言:javascript
运行
复制
Swiftparser parser = new SwiftParser();
SwiftMessage ack = parser.parse(msg);
SwiftMessage original = parser.parse(ack.getUnparsedTexts().getAsFINString());

最后,要将已加/nacked消息与其原始消息匹配,必须对候选消息进行查询(通常搜索同一天的消息和相同的消息类型)。库中不包含查找候选信息,因为它涉及搜索应用程序数据库或从文件系统目录读取发送的消息。尽管在候选人内部可以这样完成匹配:

代码语言:javascript
运行
复制
AckMessageComparator comparator = new AckMessageComparator();
    for (SwiftMessage candidate : candidates) {
        if (comparator.compare(original, candidate) == 0) {
            //candidate is the message acked/nacked
        }
    }

根据确认通知源的不同,消息的结构可能有所不同。例如,原始消息的完整副本可能会丢失。但是,必须有其他类型的对原始acked/nacked消息的引用,例如MUR (消息用户引用),如下所示:

代码语言:javascript
运行
复制
{1:F21LITEBEBBAXXX0066000079}{4:{177:1104180901}{451:0}{108:FOO16101900001}}

因此,要匹配原始消息,而不是使用完整的消息副本和AckMessageComparator,必须找到具有相同MUR的消息:

代码语言:javascript
运行
复制
for (SwiftMessage candidate : candidates) {
        if (StringUtils.equals(ack.getMUR(), candidate.getMUR())) {
             candidate is the message acked/nacked
        }
    }

如果ACK/NAK中没有原始消息副本或MUR,则可能存在UUID (唯一标识符),并且可以匹配从UUID字段(如接收地址、消息类型和引用)中剥离候选人。

ACK/NAK必须以某种方式提供信息,以正确匹配被确认的原始消息。

票数 3
EN

Stack Overflow用户

发布于 2019-05-29 17:40:42

ACK/NAK通知被标识为服务id 21。

您可以使用Prowide中的ServiceMessage21类来解析Acks和Nacks

https://www.javadoc.io/doc/com.prowidesoftware/pw-swift-core/SRU2018-7.10.4

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34810441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档