4.2.2 Rechnungsdaten vom Produkt zum Partner
Details über die einzelnen Endpunkte können über das Developer Portal in der Swagger/OpenAPI Dokumentation nachgelesen werden.
Für alle folgenden Prozesse wird vorausgesetzt, dass eine Lizenz zur Übertragung der jeweiligen Daten existiert und diese von beiden Parteien bereits erfolgreich aktiviert wurde. (Siehe 5. Sicherheitsmechanismen unter Punkt a. Lizenzaktivierung)
1. Erstellung des Authentifizierungstokens
Um Daten aus der Cloud API empfangen zu können, ist es notwendig, zuvor ein Authentifizierungstoken zu übertragen, dass über den Endpunkt TokenCreate angefragt werden kann. Dafür müssen der grant_type (= „client_credentials“), requesttype (der zu übertragende Requesttype) und der scope (= LicenseIndicatorHash) im Body in URL-Encoded Form mit Content-Type: application/x-www-form-urlencoded übertragen werden.
Das Token ist grundsätzlich 30 Minuten gültig (sollte also ggf. für mehrere Requests wiederverwendet werden) und bezieht sich auf einen Requesttype (hier RechnungsdatenRequest) und dem jeweiligen Kunden mit dem man Daten austauschen möchte.
Der Auth-Token wird dann für weitere Requests im Header „Authentication: Bearer <token>“ genutzt.
POST TokenCreate
POST https://api.realestatehub.haufe.io/CloudApi/V1/api/oauth2/token HTTP/1.1Host: api.realestatehub.haufe.ioOcp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••Content-Type: application/x-www-form-urlencodedAccept: */*Cache-Control: no-cacheAccept-Encoding: gzip, deflate, brConnection: keep-aliveContent-Length: 116grant_type=client_credentials&scope={LicenseIndicatorHash}&requesttype=RechnungsdatenRequestHTTP/1.1 201 CreatedCache-Control: no-cachePragma: no-cacheContent-Length: 190Content-Type: application/json; charset=utf-8Expires: -1X-Powered-By: ASP.NETDate: Fri, 30 Oct 2020 07:41:29 GMT{ "access_token": "8a4267cb-d76e-4fd8-971a-9a1b2ebe448e", "token_type": "Bearer", "expires_in": 1800, "scope": "{LicenseIndicatorHash}", "requesttype": "RechnungsdatenRequest"}
2. Daten von einer Gegenstelle empfangen
Für den Empfang eines Datenpakets ist der Endpunkt JobsGetItems vorgesehen.
Die Response kann hierbei mehrere Jobs auf einmal beinhalten und dementsprechend groß sein.
Für den Aufruf des Endpunktes wird ein Authentifizierungstoken im Header benötigt.
GET JobsGetItems
GET https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs HTTP/1.1Host: api.realestatehub.haufe.ioOcp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••Authorization: Bearer 8a4267cb-d76e-4fd8-971a-9a1b2ebe448eAccept: */*Cache-Control: no-cacheAccept-Encoding: gzip, deflate, brConnection: keep-aliveHTTP/1.1 200 OKCache-Control: no-cachePragma: no-cacheContent-Length: 20827Content-Type: application/json; charset=utf-8Content-Encoding: gzipExpires: -1Vary: Accept-EncodingX-Powered-By: ASP.NETDate: Fri, 30 Oct 2020 09:24:42 GMT{ "total_count": 1, "_links": { "self": { "href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs" } }, "_embedded": { "jobs": [ { "sequencenumber": "1", "salt": "54zO/2bCBRXCi84yKe4WeYm3rbYp7Gb/3JjZvaXyxXM=", "licenseownerid": "37", "licensecounterpartid": "39", "deleteflag": false, "state": { "JobState": 0, "JobStateAsString": "New", "StateDateTime": "2020-10-30T09:25:14.82179+00:00", "PreviousJobState": { "JobState": -1, "JobStateAsString": "Queued", "StateDateTime": "2020-10-30T09:24:42.4295984+00:00", "PreviousJobState": null } }, "responseSalt": null, "data": "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", "hasheddata": "C5EEDDADA83CABADC88F2E54258418A068B1600525499B637B848CA769CF4E69DG312", "response": null, "responsecode": null, "IsResponseOk": true, "Entities": null, "EntitiesCount": { "RechnungsEntity": 1, "RechnungsstatusEntity": 1, "PositionenEntity": 1 }, "LicenseIndicatorHashSender": "{LicenseIndicatorHash}", "LicenseIndicatorHashReceiver": null, "AttachmentReference": "", "id": "{JobId}", "requesttype": "RechnungsdatenRequest", "_links": { "self": { "href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/{JobId}/responses" }, "confirm": { "href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/{JobId}/confirmations" } } } ] }}
3. Datenempfang bestätigen
Bevor die abgeholten Daten verarbeitet werden, muss der Datenempfang in der Cloud API bestätigt werden, dies geschieht mit dem Endpunkt ConfirmationCreate. Das soll verhindern, dass ggf. zwei Instanzen derselben Gegenstelle die Daten gleichzeitig bearbeiten. Dazu muss eine JobId in der URL mitgegeben werden, welches eine GUID ist. Außerdem wird ein Authentifizierungstoken im Header benötigt.
POST ConfirmationCreate
POST https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs/{JobId}/confirmations HTTP/1.1Host: api.realestatehub.haufe.ioOcp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••Authorization: Bearer 8a4267cb-d76e-4fd8-971a-9a1b2ebe448eAccept: */*Cache-Control: no-cacheAccept-Encoding: gzip, deflate, brConnection: keep-aliveContent-Length: 0HTTP/1.1 201 CreatedCache-Control: no-cachePragma: no-cacheContent-Length: 379Content-Type: application/json; charset=utf-8Expires: -1X-Powered-By: ASP.NETDate: Fri, 30 Oct 2020 10:37:08 GMT{ "id": "{JobId-GUID}", "confirmationId": "{ConfirmationId-GUID}", "_links": { "self": { "href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/{JobId}/confirmations" }, "respond": { "href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/{JobId}/responses" } }}Das Bestätigen mehrerer Jobs kann mit dem Endpunkt ConfirmationsCreate durchgeführt werden. Hier entfällt außerdem die einzelne JobId in der URL:
POST ConfirmationsCreate
POST https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs/responseconfirmations HTTP/1.1Host: api.realestatehub.haufe.ioOcp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••Content-Type: application/jsonAuthorization: Bearer e98db7a5-7b78-4c25-9140-9920946894afAccept: */*Cache-Control: no-cacheAccept-Encoding: gzip, deflate, brConnection: keep-aliveContent-Length: 46[ "{JobId-GUID}", "{JobId-GUID}", "{JobId-GUID}", "{JobId-GUID}", "{JobId-GUID}", "{JobId-GUID}", . , . , . , . , "{JobId-GUID}"]HTTP/1.1 200 OKCache-Control: no-cachePragma: no-cacheContent-Length: 360Content-Type: application/json; charset=utf-8Content-Encoding: gzipExpires: -1Vary: Accept-EncodingX-Powered-By: ASP.NETDate: Fri, 30 Oct 2020 12:39:48 GMT{ "responseCollection": [ { "id": "{JobID-GUID}", "confirmationId": "{ConfirmationId-GUID}", "remark": "Job {JobID-GUID} confirmed." }, { "id": "{JobID-GUID}", "confirmationId": "{ConfirmationId-GUID}", "remark": "Job {JobID-GUID} confirmed." }, { "id": "{JobID-GUID}", "confirmationId": "{ConfirmationId-GUID}", "remark": "Job {JobID-GUID} confirmed." }, { . }, { . }, { . }, { "id": "{JobID-GUID}", "confirmationId": "{ConfirmationId-GUID}", "remark": "Job {JobID-GUID} confirmed." } ], "_links": { "self": { "href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/confirmations" }, "respond": { "href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/responses" } }}
4. Beantwortung von Requests
Nach der Verarbeitung von Daten aus der Cloud API muss der Empfänger den Request beantworten, sodass der Absender die Information erhält, dass die Daten verarbeitet wurden. Dies geschieht über den Endpunkt ResponsesCreate. Dazu muss eine JobId mitgegeben werden, welches eine GUID ist. Außerdem wird ein Authentifizierungstoken im Header benötigt.
POST ResponsesCreate
POST https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs/{JobId}/responses HTTP/1.1Host: api.realestatehub.haufe.ioContent-Type: application/jsonOcp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••Content-Type: application/jsonAuthorization: Bearer d94fb9c4-8cb5-4e8c-bdd6-51fba2ceed44Accept: */*Cache-Control: no-cacheAccept-Encoding: gzip, deflate, brConnection: keep-aliveContent-Length: 342{ "Response":"{Verschlüsselte Antwort}", "Responsecode":"TestCode-0001", "IsResponseOk": true, "ConfirmationToken": { "id": "{JobId-GUID}", "confirmationId": "{ConfirmationId-GUID, welches man vom Endpunkt ConfirmationCreate bekommt}" }, "ResponseSalt":"ChangeMeToTheRealSalt"}HTTP/1.1 201 CreatedCache-Control: no-cachePragma: no-cacheContent-Length: 698Content-Type: application/json; charset=utf-8Expires: -1X-Powered-By: ASP.NETDate: Fri, 30 Oct 2020 10:11:12 GMT{ "id": "{JobId-GUID}", "requesttype": "RechnungsdatenRequest", "state": { "JobState": 3, "JobStateAsString": "Processed", "StateDateTime": "2020-10-30T10:11:12.3078021+00:00", "PreviousJobState": { "JobState": 2, "JobStateAsString": "Confirmed", "StateDateTime": "2020-10-30T10:05:55.6473117+00:00", "PreviousJobState": { "JobState": 0, "JobStateAsString": "New", "StateDateTime": "2020-10-30T07:33:28.439343+00:00", "PreviousJobState": { "JobState": -1, "JobStateAsString": "Queued", "StateDateTime": "2020-10-30T07:33:27.1042678+00:00", "PreviousJobState": null } } } }, "_links": { "self": { "href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/{JobId-GUID}/responses" } }}