Reply: 14

SEPA Datei mit Hash-Wert verschlüsseln

Hallo Zusammen,
ich versuche gerade, den Hinweis 1776812 für den Hash-Wert umzusetzen und habe hier auch schon eine tolle Anleitung gefunden. Leider klappt bei uns die Implementierung des Funktionsbausteins FI_PAYMEDIUM_SAMPLE_41 nicht.
Wir haben ihn kopiert und im DMEE-Baum ist er als Fuba im HashValue eingetragen.
Außerdem in der OBPM3 als Exit 41 registriert.
Leider lässt sich der Baum nicht aktivieren.
Es kommt die Fehlermeldung:
"Knoten HashValue: Funktionsbaustein Z_FI_PAYMEDIUM_SAMPLE_41_EXIT hat falsche Schnittstelle
Meldungsnr. DMEE_ABA358
Diagnose
Sie haben dem Knoten HashValue den Exitbaustein Z_FI_PAYMEDIUM_SAMPLE_41_EXIT zugeordnet. Die Schnittstelle dieses Funktionsbaustein entspricht allerdings nicht den vorgegebenen Schnittstellen.
Vorgehen
Beachten Sie, daß ein Exitbaustein die Schnittstelle eines der folgenden Vorlagebausteine haben muß:
DMEE_EXIT_TEMPLATE_ABA
DMEE_EXIT_TEMPLATE_EXTEND_ABA"
Wenn ich, wie in anderen Antworten beschrieben, den FuBa einfach weg lassen, lässt sich der Baum trotzdem nicht aktivieren, da kommt die Meldung, dass der Funktionsbaustein ' ' nicht vorhanden ist.
Habt Ihr eine Lösung?
Danke im Voraus und Grüße
G.D.

You must be logged in to post a reply.

Login now

14 Answers

  • EC1055
    EC1055
    Hallo gd01,
    der 41er-Baustein wird nicht im Formatbaum sondern in den kundenspezifischen Zahlungsträgerformaten hinterlegt (Transaktion OBPM3, Zeitpunktbausteine).
    Der Knoten "HashValue" im Formatbaum hat bei euch vermutlich "Exit-Baustein" als Mapping-Verfahren. Das sollte korrigiert werden auf "Eigene Abbildungsknot.".
    Viele Grüße
    EC1055
  • User #13174
    User #13174 (Author)
    Hallo EC1055,
    stimmt, habe es als Exit-Baustein gemappt. So stand es zumindest in der Anleitung
    Den Eintrag in der OBPM3 hab ich gemacht.
    Wenn ich auf Eigene Abbild.knoten umstelle, brauche ich aber eine Abbildung drunter. Die Frage ist dann, als was definiere ich diese im Mapping?
    Viele Grüße
    G.D.
  • EC1055
    EC1055
    Hallo gd01,
    im Hinweis 1776812 heißt es "Definieren Sie den Hashinhalt bereits vorläufig in TA DMEE mit Länge 64 und einem Dummy-Wert '12345..' und ersetzen Sie den Wert dann komplett mit dem Hashwert.".
    Dazu haben wir unterhalb des Knotens "HashValue" eine Konstante "FakeValue" definiert, die den 64 Zeichen langen Dummy-Wert enthält. Dieses Vorgehen entspricht dem im Anhang des Hinweises aufgeführten Beispiel (siehe sepa_wrapper.zip).
    Im weiteren Verlauf wird dieser Dummy-Wert dann durch den echten Hashwert ersetzt.
    Viele Grüße
    EC1055
  • User #13174
    User #13174 (Author)
    Hallo EC1055,
    danke für die Antwort, werden wir so probieren.
    Viele Grüße
    G.D.
  • Dr.LooT
    Dr.LooT
    Hallo EC1055,
    du scheinst ja schon viel Erfahrung mit der Erstellung des Hashwertes zu haben.
    Wir wollen diesen bei uns auch integrieren, haben aber das große Problem, dass wir immer einen anderen HASH Wert als die Banken erhalten.
    Könntest du mir vielleicht einen Tipp geben, von wo bis wo du die Zahllauf Datei liest um den Hashwert zu ermitteln?
    Viele Grüße
    Dr.LooT
  • User #16878
    User #16878
    Hallo Dr.LooT,
    eigentlich ist alles im Hinweis 1776812 beschrieben.
    Beim Hashwert ist immer darauf zu achten, ob er nur auf dem Begleitzettel ausgegeben werden soll (innere Kontrolle) oder ob er als Teil der DTA-Datei an die Bank übermittelt werden soll (externe Kontrolle).
    Bei letzterem Verfahren ist das Problem, dass über die komplette DTA-Datei ein Hashwert ermittelt wird, der anschließend zwecks Übermittlung in die DTA-Datei geschrieben werden müsste. Damit würde dann aber logischerweise die Datei verändert und der Hashwert passt nicht mehr.
    Aus diesem Grund muss die DTA-Datei wie im Hinweis beschrieben in eine Hülle eingebettet werden. Der Hashwert wird dann über die DTA-Datei ermittelt und ebenfalls in die Hülle geschrieben.
    Ansonsten ist eigentlich nur darauf zu achten, dass die Bank den gleichen Verschlüsselungs-Algorithmus (z.B. SHA1) wie der FuBa verwendet.
    Viel Erfolg
    beroe
  • EC1055
    EC1055
    Hallo Dr.LooT,
    kann mich beroe nur anschließen: Der Hinweis 1776812 (inzwischen in Version 32) beschreibt sehr gut, was zu tun ist.
    Eventuelle Probleme / mögliche Fehlerquellen werden in Hinweis 1936271 besprochen. Dort wird auch auf einen Hashwert-Converter verwiesen, mit dem man die errechneten Werte überprüfen kann.
    Viele Grüße
    EC1055
  • linkit
    linkit
    Hallo EC1055,
    Noch mal eine kurze Frage zu der Antwort von EC1055 vom 15.06.15 11:36.
    Ich habe HashValue und FakeValue angelegt und beim aktivieren kommt die Meldung "Für Knoten HashValue ist keine Abbildung (Atom) angelegt".
    Ich kann leider keinen Fehler finden, auch wenn ich mir den wrapper anschaue.
    Über eine kurze Nachhilfe wäre ich sehr dankbar.
    Grüße!
    Linkit
  • User #16878
    User #16878
    Hallo linkit,
    schau mal in den DMEE-Baum rein. Bei mir schaut das so aus: s. Anlage.
    Wir nutzen das nicht produktiv, aber ich meine, so hat das funktioniert.
    Viele Grüße
    beroe
  • linkit
    linkit
    Super, vielen Dank beroe, ich habe den Fehler gefunden.
    Aber wie wird jetzt der Hash Wert erzeugt?
    In der XML Datei kommt jetzt die Konstante aus FakeValue an.
    Ich habe den Fuba zum Zeitpunkt 41 eingetragen.
    Grüße
    Linkit
  • User #16878
    User #16878
    Hast du nur den (leeren) FuBa eingetragen oder ist er auch ausprogrammiert? Dann sollte eigentlich alles funktionieren.
  • linkit
    linkit
    Nein, der Fuba ist entsprechend des Hinweises 17... ausprogrammiert.
    Ich werde das ganze noch mal durch den Debugger jagen.
    Danke!
  • User #16878
    User #16878
    Viel Erfolg!
    Bei uns sieht das Coding in etwa wie folgt aus, falls du das vergleichen möchtest...
    * Hinweis 1776812 - Zusätzliche Hülle der SEPA-Datei mit Hash-Wert
    "t_file_output nach t_file_output_h kopieren. Diese enthält später die Zahlungsdatei
    LOOP AT t_file_output INTO ls_file_output_h.
    APPEND ls_file_output_h TO lt_file_output_h.
    ENDLOOP.
    "Umwandlung der Zahlungsdatei in einen String für den Aufruf an einen Funktionsbaustein zur Ermittlung des Hash-Werts
    LOOP AT lt_file_output_h INTO ls_file_output_h.
    IF ls_file_output_h-length > 0.
    CONCATENATE ld_str
    ls_file_output_h-line(ls_file_output_h-length)
    INTO ld_str RESPECTING BLANKS.
    ENDIF.
    ENDLOOP.
    "Herausschneiden der Hülle, so dass nur die Zahlungsdatei bleibt.
    ld_str_file_only = ld_str.
    "In ld_str ist die komplette Datei enthalten, also muss zunächst die Hülle entfernt werden.
    "Suche nach dem Beginn der Zahlungsdatei
    FIND FIRST OCCURRENCE OF ' IN ld_str
    MATCH OFFSET l_count.
    "Suche nach dem Ende der Zahlungsdatei
    FIND FIRST OCCURRENCE OF ''
    IN ld_str
    MATCH OFFSET l_rest.
    l_rest = l_rest + 11. "Position Ende der Zahlungsdatei
    l_ganz = l_rest - l_count. "Länge der Zahlungsdatei
    ld_str_file_only = ld_str+l_count(l_ganz). "komplette Zahlungsdatei
    "Berechnung des Hashwertes der Zahlungsdatei
    l_algorithm = 'SHA-256'.
    l_document = ld_str_file_only.
    cl_abap_message_digest=>calculate_hash_for_char(
    EXPORTING
    if_algorithm = l_algorithm
    if_data = l_document
    "if_length = 0
    IMPORTING
    ef_hashstring = l_hashstring
    ).
    "Vorbelegten Hashstring in der Hülle durch berechneten Hashstring ersetzen.
    FIELD-SYMBOLS TYPE fpm_file.
    READ TABLE t_file_output INDEX 2 ASSIGNING .
    IF sy-subrc = 0.
    REPLACE '123456789012345678901234567890' &
    '1234567890123456789012345678901234'
    IN -line
    WITH l_hashstring.
    ENDIF.
  • linkit
    linkit
    Hallo,
    tausend Dank ich habe den Fehler gefunden. Es funktioniert.
    Linkit