diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt index 7a3da079..4228ec86 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/MessageBuilder.kt @@ -1,6 +1,5 @@ package net.dankito.fints.messages -import net.dankito.fints.messages.datenelemente.implementierte.Nachrichtennummer import net.dankito.fints.messages.datenelemente.implementierte.tan.TanProcess import net.dankito.fints.messages.nachrichten.Nachricht import net.dankito.fints.messages.segmente.ISegmentNumberGenerator @@ -9,6 +8,7 @@ import net.dankito.fints.messages.segmente.SegmentNumberGenerator import net.dankito.fints.messages.segmente.implementierte.* import net.dankito.fints.model.BankData import net.dankito.fints.model.CustomerData +import net.dankito.fints.model.DialogData import net.dankito.fints.model.ProductData import net.dankito.fints.util.FinTsUtils @@ -43,7 +43,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg val customer = CustomerData.Anonymous - return createMessage(false, false, bank, customer, listOf( + return createMessage(false, false, bank, customer, DialogData.DialogInitDialogData, listOf( IdentifikationsSegment(generator.resetSegmentNumber(1), bank, customer), Verarbeitungsvorbereitung(generator.getNextSegmentNumber(), bank, customer, product) )) @@ -51,7 +51,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg open fun createDialogInitMessage(bank: BankData, customer: CustomerData, product: ProductData): String { - return createMessage(true, true, bank, customer, listOf( + return createMessage(true, true, bank, customer, DialogData.DialogInitDialogData, listOf( IdentifikationsSegment(generator.resetSegmentNumber(2), bank, customer), Verarbeitungsvorbereitung(generator.getNextSegmentNumber(), bank, customer, product), ZweiSchrittTanEinreichung(generator.getNextSegmentNumber(), TanProcess.TanProcess4, "HKIDN") @@ -60,7 +60,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg open fun createMessage(signMessage: Boolean, encryptMessage: Boolean, bank: BankData, customer: CustomerData, - payloadSegments: List): String { + dialogData: DialogData, payloadSegments: List): String { var payload = payloadSegments val date = utils.formatDateTodayAsInt() @@ -77,11 +77,10 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg val formattedPayload = formatPayload(payload) val messageSize = formattedPayload.length + MessageHeaderLength + MessageClosingLength + AddedSeparatorsLength - val messageNumber = Nachrichtennummer.FirstMessageNumber - val header = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, messageSize, "0", messageNumber) + val header = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, messageSize, dialogData) - val closing = Nachrichtenabschluss(generator.getNextSegmentNumber(), messageNumber) + val closing = Nachrichtenabschluss(generator.getNextSegmentNumber(), dialogData) return listOf(header.format(), formattedPayload, closing.format()) .joinToString(Nachricht.SegmentSeparator, postfix = Nachricht.SegmentSeparator) diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelemente/implementierte/DialogId.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelemente/implementierte/DialogId.kt index 5d3b8efc..a9e82817 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelemente/implementierte/DialogId.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/datenelemente/implementierte/DialogId.kt @@ -4,4 +4,12 @@ import net.dankito.fints.messages.Existenzstatus import net.dankito.fints.messages.datenelemente.abgeleiteteformate.Identifikation +/** + * Die Dialog-ID dient der eindeutigen Zuordnung einer Nachricht zu einem FinTS-Dialog. + * Die erste Kundennachricht (Dialoginitialisierung) enthält als Dialog-ID den Wert 0. + * In der ersten Antwortnachricht wird vom Kreditinstitut eine Dialog-ID vorgegeben, + * die für alle nachfolgenden Nachrichten dieses Dialogs einzustellen ist. Es ist + * Aufgabe des Kreditinstituts, dafür zu sorgen, dass diese Dialog-ID + * dialogübergreifend und systemweit eindeutig ist. + */ open class DialogId(dialogId: String) : Identifikation(dialogId, Existenzstatus.Mandatory) \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenabschluss.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenabschluss.kt index cde738be..6e7cf805 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenabschluss.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenabschluss.kt @@ -4,6 +4,7 @@ import net.dankito.fints.messages.Existenzstatus import net.dankito.fints.messages.datenelemente.implementierte.Nachrichtennummer import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf import net.dankito.fints.messages.segmente.Segment +import net.dankito.fints.model.DialogData /** @@ -11,8 +12,9 @@ import net.dankito.fints.messages.segmente.Segment */ open class Nachrichtenabschluss( segmentNumber: Int, - messageNumber: Int + dialogData: DialogData + ) : Segment(listOf( Segmentkopf("HNHBS", 1, segmentNumber), - Nachrichtennummer(messageNumber) + Nachrichtennummer(dialogData.messageNumber) ), Existenzstatus.Mandatory) \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenkopf.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenkopf.kt index d7ffbc44..77be85de 100644 --- a/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenkopf.kt +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/messages/segmente/implementierte/Nachrichtenkopf.kt @@ -4,18 +4,18 @@ import net.dankito.fints.messages.Existenzstatus import net.dankito.fints.messages.datenelemente.implementierte.* import net.dankito.fints.messages.datenelementgruppen.implementierte.Segmentkopf import net.dankito.fints.messages.segmente.Segment +import net.dankito.fints.model.DialogData open class Nachrichtenkopf( segmentNumber: Int, messageSize: Int, - dialogId: String, - messageNumber: Int + dialogData: DialogData ) : Segment(listOf( Segmentkopf("HNHBK", 3, segmentNumber), Nachrichtengroesse(messageSize), HbciVersionDatenelement(HbciVersion.FinTs_3_0_0), - DialogId(dialogId), - Nachrichtennummer(messageNumber) + DialogId(dialogData.dialogId), + Nachrichtennummer(dialogData.messageNumber) ), Existenzstatus.Mandatory) \ No newline at end of file diff --git a/fints4javaLib/src/main/kotlin/net/dankito/fints/model/DialogData.kt b/fints4javaLib/src/main/kotlin/net/dankito/fints/model/DialogData.kt new file mode 100644 index 00000000..62f15986 --- /dev/null +++ b/fints4javaLib/src/main/kotlin/net/dankito/fints/model/DialogData.kt @@ -0,0 +1,13 @@ +package net.dankito.fints.model + + +open class DialogData( + var dialogId: String = "0", + var messageNumber: Int = 1 +) { + + companion object { + val DialogInitDialogData = DialogData("0", 1) + } + +} \ No newline at end of file