.NET-SDK
Empfänger implementieren
Ein empfangendes System mit .NET-SDK entwickeln
Empfangende Systeme erhalten Einreichungen von Antragsteller:innen über FIT-Connect. Der Empfang von Einreichungen ist hier im Detail beschrieben. Wenn Sie das .NET-SDK nutzen, dann können Sie sich auf den Aufruf der Schnittstelle zum SDK konzentrieren, weil das SDK viele Details intern automatisch umsetzt.
Voraussetzung für empfangende Systeme
- Credentials: Um einen Antrag zu empfangen, benötigen Empfänger (Subscriber) eine ClientId und ein ClientSecret. Hier ist beschrieben, wie Sie diese Credentials erhalten.
- Schlüssel zum Entschlüsseln und Signieren: Empfangende Systeme benötigen ein Zertifikat der Verwaltungs-PKI. Dazu finden Sie hier eine Beschreibung.
Aus diesem Zertifikat generieren Sie dann JSON Web Keys (JWKs) für den Zugriff auf FIT-Connect.
Eine Beschreibung dazu ist auch hier.
Die JWKs benötigen Sie beim Aufruf der Methode
GetSubscriberClient(...)
der KlasseClientFactory
des .NET-SDKs, siehe folgendes Beispiel.
Beispiel für einen Empfänger (Subscriber)
Das folgende Beispiel zeigt, wie Sie das .NET-SDK nutzen, um Einreichung (Submissions) vom Zustellpunkt zu laden.
1. Schritt: Subscriber erstellen
Sie erstellen einen Subscriber mit der Methode GetSubscriberClient(...)
der SDK-Klasse ClientFactory
:
string clientId = "YOUR CLIENT ID";
string clientSecret = "YOUR CLIENT SECRET";
var subscriber = ClientFactory.GetSubscriberClient(
FitConnectEnvironment.Test,
clientId,
clientSecret,
privateKeyDecryption,
privateKeySigning,
logger);
Parameter der Methode ClientFactory.GetSubscriberClient()
- FitConnectEnvironment
Das Beispiel oben verwendet die UmgebungTest
der FIT-Connect-Infrastruktur. Deshalb wird der MethodeClientFactory.GetSubscriberClient(...)
das FeldFitConnectEnvironment.Test
des .NET-SDKs übergeben. - ClientId, ClientSecret
Das Beispiel enthält Platzhalter für die Werte inclientId
undclientSecret
. Hier ist beschrieben, wie Sie eine ClientId und ein ClientSecret erhalten. - PrivateKeyDecryption
Dieser Parameter erhält den JSON Web Key (JWK) für den privaten Schlüssel zum Entschlüsseln (im Beispiel ist kein Wert angegeben). Hier ist beschrieben, wie Sie aus einem Zertifikat die erforderlichen Schlüssel zum Entschlüsseln und Signieren im Format JWK erzeugen. - PrivateKeySigning
Dieser Parameter erhält den JWK des privaten Schlüssels zum Signieren (im Beispiel ist kein Wert eingetragen). Hier ist beschrieben, wie Sie aus einem Zertifikat die erforderlichen Schlüssel zum Entschlüsseln und Signieren im Format JWK erzeugen. - Logger
Der Parameterlogger
ist optional. Wird ein Logger übergeben, dann muss er das InterfaceMicrosoft.Extensions.Logging.ILogger
implementieren.
2. Schritt: Abholbereite Einreichungen erfragen
Stehen Einreichungen zur Abholung bereit?
Wenn Sie das Polling-Verfahren nutzen, dann rufen Sie jetzt am Subscriber die Methode GetAvailableSubmissionsAsync()
auf,
um zu erfahren, ob der Zustelldienst abholbereite Einreichungen zur Abholung bereithält:
var submissionsForPickup = await subscriber.GetAvailableSubmissionsAsync();
Falls Sie nicht das Polling-Verfahren nutzen, sondern einen Callback-Endpunkt, dann informiert Sie der Zustellpunkt, sobald eine abholbereite Einreichung vorliegt, indem er den Callback-Endpunkt aufruft. Damit entfällt für Sie dieser Schritt.
3. Schritt: Abrufen und Auswerten von Einreichungen
Rufen Sie am Subscriber die Methode RequestSubmissionAsync(...)
auf
für jede Einreichung in der Liste submissionsForPickup
(siehe Schritt 2):
foreach (var submissionForPickup in submissionsForPickup) {
var receivedSubmission = await subscriber.RequestSubmissionAsync(submissionForPickup.SubmissionId);
var attachments = await receivedSubmission.GetAttachmentsAsync();
var data = receivedSubmission.GetData(); // Abruf der Daten
var mimeType = receivedSubmission.GetDataMimeType(); // Abrufen des MimeTypes der Daten
// Additional custom checks
var ok = AdditionalCustomChecksOutsideSDK(receivedSubmission, attachments, data);
if (ok){
// Submission accept
await receivedSubmission.AcceptSubmissionAsync();
} else {
// or submission reject
await receivedSubmission.RejectSubmissionAsync();
}
}
Um die Anhänge zu einer Einreichung zu erhalten, ruft das Beispiel oben die Methode receivedSubmission.GetAttachmentsAsync()
auf.
Die Methode receivedSubmission.GetData()
gibt die Daten der Einreichung als String zurück.
Mit der Methode receivedSubmission.AcceptSubmissionAsync()
setzt das Beispiel den Status der Einreichung
im Zustelldienst auf accepted
, wenn zusätzliche Tests, die über die internen Tests des SDKs hinausgehen, keine Fehler gefunden haben.
Zusammenfassung
Der folgende Quellcode zeigt nochmals im Zusammenhang, wie Sie Einreichungen abrufen und verarbeiten können.
Die einzelnen Schritte sind:
- Subscriber erstellen
- Abholbereite Einreichungen erfragen
- Abrufen und Auswerten von Einreichungen
var subscriber = ClientFactory.GetSubscriberClient(
FitConnectEnvironment.Test,
clientId,
clientSecret,
privateKeyDecryption,
privateKeySigning,
publicKeyEncryption,
publicKeySignatureVerification,
logger);
var submissionsForPickup = await subscriber.GetAvailableSubmissionsAsync();
// Alle verfügbaren Submissions laden
foreach (var submissionForPickup in submissionsForPickup) {
var receivedSubmission = await subscriber.RequestSubmissionAsync(submissionForPickup.SubmissionId);
// Laden der Anhänge
var attachments = await receivedSubmission.GetAttachmentsAsync();
// Ausgabe der Fachdaten auf der Konsole
logger.LogInformation("Fachdaten: {Data}", receivedSubmission.GetData());
// Submission akzeptieren und abschließen
await receivedSubmission.AcceptSubmissionAsync();
}
Bidirektionale Kommunikation
FIT-Connect ermöglicht einen Dialog zwischen Sender und Empfänger,
sodass Sender und Empfänger direkt Übermittlungen miteinander austauschen können.
Dieser Dialog wird Bidirektionale Kommunikation (BiDiKo) genannt.
Die Seite Sender beschreibt die bidirektionale Kommunikation und definiert wichtige Begriffe, wie Replys (Antworten des Empfängers auf Einreichungen von einem Sender).
Empfänger sendet Antwort über FIT-Connect
FIT-Connect ermöglicht einem Empfänger, eine Antwort (Reply) zu einer Einreichung an den Sender zurückzusenden. Der Sender kann auf die Antwort reagieren, indem er eine neue Einreichung an den Empfänger über FIT-Connect sendet.
Auf eine Submission antworten
Sie senden eine Antwort zu einer Einreichung (Submission) zurück,
indem Sie ein SendableReply
von dieser ReceivedSubmission
erzeugen (siehe folgendes Beispiel).
Alle Daten der erhaltenen Submission werden übernommen.
Die Fachdaten und Attachments können im Reply jedoch neu gesetzt werden.
Anschließend senden Sie die Antwort (Reply) mit der Methode Subscriber.SendReplyAsync(...)
an den Sender über FIT-Connect zurück:
var receivedSubmission = Subscriber.RequestSubmissionAsync(_submission.SubmissionId).Result;
var replySubmission = SendableReply.From(receivedSubmission)
.SetJsonData("{ \"replyData\" : \"Bitte Anhang xy nachreichen\"}", new Uri("https://schema.fitko.de/fim/s00000114_1.1.schema.json"))
.AddAttachment(Attachment.FromPath("Test.pdf", "application/pdf", description: "Attachment #1", fileName: "Test.pdf"))
.Build();
var sentReply = Subscriber.SendReplyAsync(replySubmission).Result;
Das Zurücksenden einer Antwort über FIT-Connect ist nur dann möglich, wenn für die Submission, auf die geantwortet werden soll, FIT-Connect als Rückkanal gesetzt ist.
Um sicherzustellen das der neueste Verschlüsselungsschlüssel eines Case abgerufen wird, sollten zunächst alle Submissions eines Case geladen werden und nach dem submittedtAt
Zeitstempel der ReceivedSubmisssion
sortiert werden.
Status einer Antwort abrufen
Sie erfragen den Status einer gesendeten Antwort (sentReply
),
indem Sie die Methode getReplyStatus
der Klasse SubscriberClient
aufrufen:
var status = Sender.GetStatusForReplyAsync(_submission).Result;
status.SubmissionState.Should().Be(EventType.Submit);
Methoden der Klassen ClientFactory
und Subscriber
Das folgende Flussdiagramm zeigt die Schritte, die erforderlich sind, um vom Zustelldienst eine Einreichung zu laden.
Die Einreichung wird in einem Objekt des Typs IReceivedSubmission
.
ClientFactory.GetSubscriberClient(...)
Die Beschreibung zu dieser Methode finden Sie hier.
GetAvailableSubmissionsAsync()
Liefert eine Liste der verfügbaren Submissions zurück.
RequestSubmissionAsync(submissionId)
Hiermit wird die Submission abgerufen und im Subscriber gespeichert.
Der Rückgabewert der Methode ist IReceivedSubmission
.
Methoden der Klasse Submission
Das folgende Flussdiagramm zeigt die Schritte, die erforderlich sind, um eine Einreichung mit ihren Anhängen aus einem Objekt des Typs IReceivedSubmission
zu lesen.
GetData()
Liefert die Fachdaten als String zurück.
GetAttachmentsAsync()
Gibt eine Liste mit den Attachments der Submission zurück. Die Attachments können so geprüft werden.
AcceptSubmissionAsync()
Akzeptiert die Submission und löscht die Submission, die auf dem Server (im Zustelldienst von FIT-Connect) gespeichert ist.
RejectSubmissionAsync()
Weist die Submission zurück.
Methoden des Interfaces IReceivedSubmission
GetDataMimeType()
Gibt den MimeType der Daten zurück.
GetData()
Liefert die Daten der Einreichung.
Fachausdrücke erklärt
Sie finden hier eine Übersicht über wichtige Fachausdrücke mit Erklärungen.