4.2.1 Rechnungsdaten vom Partner zum Produkt
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. Daten an eine Gegenstelle senden
Um Daten an eine Gegenstelle zu senden, muss der Endpunkt JobsCreate zur Erstellung eines Jobs in der CloudApi aufgerufen werden. Ein Job besteht zum Einen aus Metainformationen (Sequenznummer, hasheddata, salt, requesttype, licenseindicatorhash, deleteflag) und zum Anderen aus den eigentlichen Daten. Letztere müssen mit dem LicenseOwnerSecret verschlüsselt und Base64 codiert sein. Ein Beispiel findet sich in der Rubrik 5. Sicherheitsmechanismen wieder. Auf nicht-Produktivumgebungen gibt es zu Testzwecken die Möglichkeit Daten unverschlüsselt zu versenden indem der optionale HTTP Header x-hlre-data-encryption-type
mit dem Wert unencrypted übertragen wird. Wenn dieser HTTP Header nicht Teil der Anfrage ist, wird die Anfrage unter der Annahme verarbeitet das die enthaltenen Daten verschlüsselt sind. Der einzig erlaubte Wert für den x-hlre-data-encryption-type HTTP Header ist auf dem Produktivsystem encrypted.
POST JobsCreate
POST https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs HTTP/1.1
Host: api.realestatehub.haufe.io
Content-Type: application/json
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••
Content-Type: application/json
Accept: */*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 9373
x-hlre-data-encryption-type: encrypted
{
"sequencenumber": "1",
"hasheddata": "C5EEDDADA83CABADC88F2E54258418A068B1600525499B637B848CA769CF4E69DG3132",
"salt": "ChangeMeToTheRealSalt",
"requesttype": "RechnungsdatenRequest",
"licenseindicatorhash": "{LicenseIndicatorhash}",
"deleteflag": false,
"data": "yrZlZ2bJXbp1ougnkS4jlj5IIDbEmWGO8CWpOWoIdyMabNp0KH1E+5c+CAPz22GFOldcqGrVxWRM4Kt1LsPxz3lQDFTPyQiyaF97NGEVHn13Ux4slT6pb9l5cMIQZuiakrApVtLhWsMymiN/pluKillEfMwFqsSj1PiAl0wFOEO5R6Y0Gyn4GlLI7b+gntXsOwJcVmbq4/+eNQ+Qbd40bypAsErngYNDGrmthONDsyET/5QdJCzJsdKzRHL8GY1nwNIKdqD/SnUZCusN1xwkHkR1aQbLcUQ19vEWb8g/XM0XAUlPj5qbbb9WOEVgZ45pJYaxKdJcLc0Lwp5Bdb2hBYAdII+VFyqj0C77vn7wA6d2NKFl/xXyuTRimHQeS51kkCtOKc3NVRitm9CuT3mpglF6+bqgrgzTGa9H9AMcC6MaJMhcnBv8aIh5RVxl3geKZeugnPmvxr+uXorjYivFM506/xSMG6SuQwFr+tS1sK4YfC0SmVAqnizbwCaHOb6r3PgIohA0U9rsZ96frMi0Mpt/+ynCxMzlWtf/EpCqk69wQmAftUqc6NWH1vAt/9SpFF/Mn8GmXwq2Vix1EKaZRqlURhfvebc9Du4ReiYZzX5weLMIT62ViDPoYvz4NP3sviwTkjSdYZoYDVMzY3iOQjhSvRVqEzmo28SQHK2ZB86t2vYRihZMI7DbQNiZNy7fKdYRrskAF3psnwj+redO0mWDJVb4l1cjXA6w8KCsImyDbkQeux8VxyTG5s4Pek1ZrfYX+0U91N6+s8b1LQBeCBa32v2rpyox2L7ikKbFg6jZ+F5eXWT/wOdL7McN631/OVxozJ2hRcxzkAPD3IL1NKVzdK8BCG4DJiPm2TEacqlgK4Yl+3YwPw/GHeRcMReDlnWzmnrpdqL80sMJvLJ5sJLdZ3EHdjJLdc2nLXzHQmU1goANLZsXQsG+Q5H0d+PyiuDcQTuFUUlOfWpOhcV/pOHTPHOn1tc24da2GpLBRNoxGbIkF+dkjI8nxKWkuRloWHf1yimPa1iXzOi0P/d1PPAlWDNjzt8hw5tJ/MUm9Y96fvswL3Hs7xLvKfM8di6zMKpWR8qQu36QHRj2uw0e9i/zH81h76jSy1Agk83MdMD3NbM18Djg7ZTSNriypCsDYqGKP3yWKZjYzQAkpnndfOCC1l/Uyytj3wMhXADviZpq64pZGIADfYGhwTtQGBZiNfkDvPZB0KVZvA5avztKZUKFERb5vxSaJpeZGlJj+OTrBjwOUMGYJQwZZXae11KAQoK1P2wwiG9q+38mMdiQgzZb//S5UHs7KbmPGsn54Y6IGUCmRUgcQ6w4EJeA1HOtAHzjQvLUfOScI/4ZMRB6r/I37tE2kKEXvPNmQq6S+WeztXujYjMKgd+daqH9p57QRFJ+Z6daiD8ZkMpqGJEun/a+TyhBLhOqE2BBxGt0uay6n4uOfwGckwNgj8DyvMRmgCrdrKHpOl/VTRgeEdOa1c2geJZ6CFPICaSgXPST1Q9ygG5Juz2KGYCefw547igpyG0Htsb8WF4KnnJARxmDsUoa1RO0VwW6z5Bd0eRpJZ9qazt8RtUriD9pARg8ixsWaekJlPntDHd4c0qhjm+GIeql3VDBUr30rYobDmAv4XVcc7p4gjdBwyRNeuv144MfbExd8wFFoqi3TP2RVaGpePo332MAwPMcPF73T7/szzIJ49DHhDAlBYvwZrjIsH3sYtilIvNrZne0yjEZNfMAIUuTWnOZ1wXoOCLXqsagioK3KtEr6qS4BFQzGA3Xo+7aBk+NjyC0uzcabU2baWtXoKHtY8pJDMS3FIPi7RDhWh85W5E8iB1PINqyVo1jeYQtWvLm44MQDnFIZTRK9LFRQKqv9CHZxHJatqdktWmyc4QPhbnegwTNKdAjpXccbbPbiFk9pabpNmWeBxm4eA1OXVXud+TwJT2UsMdkr6UOpQblW5jiRYY1L6SZ8IrHnyhMXutl2GVc+C++8u2/TkEPQboF989uOjeDBidzsk3byw1mfoeBGIMMoJc0pBMSDD5hUKKeQLPfAD5PVdy1PBbhQEAlmF9LU8JbFk//cpwSzDgmj3LjW+al6Oe/p/5lNOljMPne3XpqJjrpRbI0b6H7ChTf0W0XHooTjzWRNWo+drs9zgjEsG7fS3Zjm6+KYGMxogjnzBh4y9MmSuK+MmNEm5b1DrZhCFCAbUzDNuLBArdm7qRW/qqk1fNKTLUq0e5uuXDGh6t/7U4zECklGOXGf5QyF3IOWmQR4jYEfLsBWSpWF0ReShr+XRJTYz8O0wkcsBok2PspYLtJTSzLIMpjiX7Dy1nVvMP8G0ZTKktfGGjAYf5h+Wq/M9oYlz0VdlQoSNe5Bf/jSNYxh1ugVyydpE/YqIO9x7V0yql7aa9OVHM313+Rhv3gtFYDdn7lvAw7VevcWsIhdQboqt2SkRscCaHU7Ss9u2AxveVSZgdmlDGw6jnoAbwFmCeH2JdYqeaoR9h0HDPAA7AyDaJ63GP8xdRws1Pe24QIXPghYVnGDBOAqC6jhQEgOvP3ai1T3L9aiWW7QN2Ygb9R8J5tTQQRxWAiVibSRDbPGOdf3uo2l3A3oq+4DHwOS1/ueTpyWJX0gmgWzXJofjyi1S2SMmauqsKvZbA+9bKhNu7aLcvd7PpNdz2ZbrRPlLRUZUXgsVrk+K2Ti2Jj8h8VAjXN11nx5RVVOOxowuNsLHoK5Tv11oSTpmDZ316qx0I4sx45RJLyOPLBj+SxvcPe4ZsNWVPMLPE+Nghg04gmJvCulOvaPn7ff8FL2Yh8FcO+PVt2mkmDebrVx/ID9y3U5CJmYUE0v5dT0tmK6p78l/z6KmWP1UQxAicRqr6alhyjTISiSRz9NqFdovJ20/xAUEVIf3pHszo60Lm/l3yQGuJ1OorNKDHIcjSY1gdoxr9L+4O9MMBFUgVFKGk7H3YqFd+nzlMBcn5z6EobDxFfOt5XkuEYDcI3qyEizfk6pSKyw4QuzKmJ/UJgZhuvDpmO1eG8Q8jK3JV4sOmbdViLZH9l2OyDbLSsSpA/YdEYKs62lWAdFQRNtTk1XByaIgv8Dw7HTB5B4G/YeGF3RNVwOpNzFVrGF3Dfwj80vmGhuP+5lkrPDjFE1tNtANwlpm+b4gcogc7aZg1TxBiHbu+Vto22kq2UuFOqcGkfZOpbFDTLxG/cII69gA9GnrNlJsFbVWeom+Bhr2xkMJXSw4m5Pz4F1+37bDvuHD0IAUgEutnJAdaZzqVfe8L9GkU/Q0YpPjaETySqgb8wY5nMXdBz+moIHsb4qmuYh0c61wofNqKvafHMbI+G0BKqbBYKfCGbCKX884aU/4LFnUqpP4gSyUzOoBcJDA1XcluptQUspwJoU55Aff7oafBpFIAjqyKDH3HwV97/KpzX40ahB00dOsqsTHrBy+kSWZO12X97fUhF1BhdgSPkCLYoj7uBMstMxMXevUp9wbWp9a0A5/YOQ26o62Wx5PgkvI2JtUtnir7Dyhd04uM82myndGl4HEUjRvj8HU1r3uKw1DMqnQ9Fx/EtC5ioLwyXS3eXZfvS3t9wmc9OqW824Zihrf3CVX2tljhKsAWo0fYUfxOJNvxKUccmX1BcvHM8UAUYCKhSBT9gIpBIuP8CaMTONLGFZGWNoJLQbIJLVDJNszHmzIRsqMS4RsNrXphdjBUqAf3/XqgnpAISgAGhbMv12bT3PkbYUoV8QcJTr7b1pv3RSY+T5/RAMPwlPCsfcEG/wsAIrd3PC5Y2/nuoT37WqFwiAIHInT9tEgZGTBdgR2ll4YdwFXzsVESi9XeN3trn3yv0yRFx86Tn4pBE9ZyGIh/l/t/Wg/kbQ7nul9xsxmaMDAqmYxySfm4KmMTEpSHGc/ami6ffYCRB9zbkN6HrG/8NoJA+mDatJbXfyA062c7OH7bDncedjLfv8Fkqiq2Vom2MF5LRvdDIzKbX2SkzoxzEC2r49jygaRyNUC0jmEFhHsq2m5IrGG/HRHWbNPQtV45h7ZgNKvYcMVuqsqDsEzK0zsD0lLTzi5ALnZPPMLqfR6qrVw4eO/6WElkeF6lksOU2FfHiq4yPKBqu3lumRRnbk1NMWA+vmI+Q3Mp4XeUQANFqFrJQ1FFwkJTazG1Bn48H3GMPjfCg6T6wIomXUVJgI6e7JOjtPWTWBIdKRvrKDRp1+AbCMRs6jFg13Cwst/zGMPX2w7QAzzgK+UzQ33SSGCewCHU0stIS465r9u5p334/7qjCzYX7LYBgZHKHxgnql/RUMu+ruD5pRWkxzP2ehwgaieuAQAylBfilayJVMbJnnzVaHVmq7Zb/hXA0f6jujhKb81SrFqGah/uRq+NPzOtmLi0U9UqbOhtvtAuJcPyysorYsRCjr7yC+YpAL4BMeKHa9/kzAzp9OWDjzP3/icHyFzUhlFXCXNVG1nXdRPEzWN4mZyg0gsTK2QGDuqtviW2IYlw6xQEQ0y2412dvnDk49QddH1/nEeOisLFQmBM1IWDRw7sEDhvS100T8wvI1JgPHjaXWK2bYdfCfctkm+NiY0zAKgBesb+vwu/wan2DFdzGLKTsACAiccbxGU5BpaZU7I+UM3kGbYLY9c0FvjrejrGzMW/WYyxWu5rdxSrj+i1PYeHtCEAi/h3ww4UC59tWyY5CyktSL3/vW7GC/52AcTiC4I/MYOjPH7d3ZFhYi6nmTKnebNfsB0vcmcW4sqx+wXYMgUFo365x7dDF8dR0RFQpA7WXO60hx3nulFX6WVdkDK0azovG7pa29A9TQQ0pPRzGQJW8pTEsFWZx+bE9Hkj8XWbYSHC6gXbZYLBpBznsrTFO3gHuYt5T0w0tutkZWHuhsXuJrX4CUX5qSZOvBFLsuwGzm3BRS6Fn/BOgUGck30rcpDGfZRl5wO/KONaWSWZuJXq+fOQ+k6qQuEt3DGSbavfc0PKJLrBgC1xPGC61h9Fe7Eqb9KH8vyWcXOYaCg+5utZwUYKv0sCaOi5tDJbQ+bN/mL08yvRCnCepq0G4doqnRXJxevvDd8RtdOZJ5iFR3EnyouqZyoGAeg+vbJIw0fTSqHr2hm2VnTuHSSlNxthiT9+EgGTnO59O7LTXKCvd+IP6c+RezHObYtX0zyVPjKM9Klrra69wqX50wt2lvCg+AiI0kersb413N2ChYaPJHoXMeBX+EJNJDNvB3BuxLK0zBR2irEsQ3JJIs2sSSi1Wi+sgCJ2PnUbIVmaYkltn0gZ/clxSzz3F/gfs/IrnLzM4t6uGsybzzKNPjf6Cu/GiqWgeXYgYOY74wiZ3CPTjOUp+gyEVJQEqOEIiN1GgWh+zwU4O3hM9ynOPi+g+WfcCXAuT+Tb55AY42OORLFRtgzeHDb0+JFiAjXswNvUUhyPzHE7lDa5POG3vt21koPh3HMLUMvGLKIRXvhJTlDhq+2Iwyy5UPYXPBSFqh/zT/lJjI9s17uFVLWqv448aag0nLL3Wb0JLNNY5gfwh+CofqGjSKK9BDnrxnZ8E4YHu1m3Nx6zJU5WcgdKp8Vnk3OKAVmDjEvUVQyjmIFPTXXB2yOOZjnZxT7vWppC8vzJNYC5La5AHt9vq27/ORQjq/otVJRt2qw8x0EVxzcpSQZ1SItz+goa47we724G+IlNkJUaM6dn1vuXcn1wm63mNoRJmOelJXk/doJf/xy0HKjIBUsMcLA7hrgU0//o4V76wCS4yIycdpKKSbgYeqcOpVjxJaLm6uQV9xUZBmodLbpkYAzuTbtpUZC7L/pJJdJ3oOJ7EMUL/vy/4tzVYEzWsQ97FZcnckJHxoSMehLGVtZwcfsu3kabXSrlFIb8vZqtdL/lAnTeaZvxluYlkmJg6gg5pdfV2Ky0u/fAEA0z4C1VG43R5XzBs1zha1NCPc92zKb5eLNAFqOuOFpfFDvL8593jN82wDUFupCfRypQtOKdIfsFlqWwFuxyJU9796uJmK8fPWatfVfyAsZJjlw+O3v57B0mAUPY7Do/ds4mJlQzcDT2Z8sC7WF/mZXvjSp9lZAipiwWKy8Zaqxlnl68jqugsiDEwyhDjH7FF5lXf69Pd3JG2UpjVwzwWx26qYCaBIjH80zhJsDJYy9qmwNLtEdjHtz7GEhRbpiW22fhP1xgua8YfXDZ2Run4GE1ohy8eve/yZ4NbmxoN+MaMTQMCIQ7WvqTukHegmefD7PLAWzcdliZSUQlcpwrdKq+MUxn28gi0L+xdllCFrj6J3OEHA2jDzUidx7W3e02reMNDI4C+xF7NjVcy7dE24/BxilwTqfELCgzwjA24GBsPJ4dJVeFIhCm3VyPaLhNhO5oRD8Asgb5+9m16kXqaS6ir7ico+ypiNScl8tySmMHVRjs5+6dzbLfmaRjVmi1Biv171TwTaBQLJvmkMOkhrduh2Az1OVxJ3TOmJFYooQItqYN9rvek1jDtc03YP6Jv+DuX4iiHHHhcVifKTD06PEb6dFKqi3skZ9no8N6OmpIWD1TCIkO/pSwT8ZLf7UYckXqytzW1H4dt3bOIDItKTpEcOucveMR4+GD3GdeKi8Kgt5qUf3C2llw6Kg1L3QqhL4efPQ4Ppd8k5FC1sg9ygBrMIHjipdtmjwlr/KgNnzDhl6+d1Vzs/vPoT0eCgG1H69KhG2PdifyAN5S96U6SO6WJWHtBe+fpfCi6DozEN9MOsMprwsQdumP/7bye/UNmk9sMvLRY4o80PBDMgPU9ECOgI4DAV6QS5VMekJmQVfxP1IBQzm3jm1i1lEAfidCuX4gFYhKy172jxbj3uBex43Lie0CzpOHVirmQ2pBe9M6biQ0qrxNXuRkq8l7PCxNNvpwiDK9abj2YI2raaGWAKZRUGmc0lQHbCM1dv0VdLHi0BE0RM/LLI/nTBDtqg08iOz2QUhQTexSGJTI0rKXofaUUI7RGTTvduG9JCUUm5ZCbFKSiEVfvmr9lbH6fXdfUinrCTQ9nrsXaBBKrT+3xmKl/dzirFi/KoEPkaYIKg7XZLq1QtCzXNl9z/FroA7vmYR9Qd4tk+KE4XRoo07FiIme7b1PV4D91kkysmjIv2bCvuaTn1/E8tujoWYcD4jsvqctvbdz9TD/CzTZEvlqmHxtcIfvFUx6Plj28oOS7DZ1AOaHh8M8P6aYrJDsiuPOGRrJ8ctxOfOYfrfAf+fIRnfrCKrOYaxqfvXlHXAfliIwB1wgE/TToxUc/+lfeNr57IFJBa3m40FRkP/fHsXkCjdhb/s7ikktFVMm5RjIUBQI6eFM5NndGYVl25SO3otJn1rlrd1vtzkKd57fyKws8QSO1TpP+0qutO0NeGyP97e53Aq+pE/6dAB8C94rkNh8+lKhzjlw2K05fc/6abkr66482y3K7PELQe3CkJnxladk7Ej3bb85riif9GvHSDjr7jw+8IPNCWvWbBuu0Ac+Q1xxU/BQdMFU6rHQlv8tcoc+C6X+19WciQEMdDTQQlELvN3w3EZgdQ7W6PiG3SnB3cT1EEuNyY0HUo5Ua3l9R7R1LruxdjeEMWE342YtFraJJikDKjuo0pSGbIfxU1VD2qqJrU2kST8R8TqDvvCOeOO693dDO/jyT3eVc+i74GADpdRoPtYVwnuf1fdTO9gJn67RmAXh9mRHHzUbWxO9i+c4qh+zQMwnY5KHQc4vai2pqRkYe3H+THu/judYeHSKFl2R+5OSllNwG1d6hFzlg0lrviGF4ILiu0Qv5X1n8YZFHClL/eY3+BwIDCcB9agx6WdgZG5hK3qaMJwEx+195yThl5Y0TWmzGbV8aK9P6nrmC2tFHoYwst3XxNsBVeb5c83ZWsL39ZV3h3FTGyyFqUMCVHDoQ4ODdQ1U09FDCrxHpLjbwOfTggimJChsBLoyeddTFcEyq++vKTUmkhWxEpMIzE5Uab0z55bkwp5HSHezmYTdBovaraw995M2sAoHnTAvoYG9TlYjRC6BQXWhcMw2tvBDI8Y8zKQXxtnKBEFm6DM+C9mD8R4daJnHxeGiKUmYPc/CCrOYVtdjyhP8TuhSw2AGFXLAZhiSnRYQWZL46swDUeGpRDHD34gWxM70+WDB7vLhRKr9qEBcAnYjdSgOdAw84T1gM2EG5rdgN74TSdBLYTz/b2jYloI+uB0lovTeyN8TCDLhgQqSQcxLO8NIJhVsDSJZWrF7FyzcYujwyWiDhELGUHIfJ5O9gDSR2dIn5IjcWx8dUJwbcU8BVPnrM/wD5uSOGneChz7ay570x9+SlgXyw5S37QM4YrP+bzNcqb7saS++X6sHqCFnMbEhWqLOTp9SiPvlGKmsTGyh2ItJCS39Uz16UIyr6o9qPkkQD8Kne5r3Rx2nm8AZ7yZlAJeIC86dGUT4Y2w0RybLHdGoCiQG0Tr3vDn8bhaSw7l6fa0yn0xeiMjaJ+7IoEqgI+HP3XE62WeE/ke/sHza6YYovtZkmsdV2jwsd4HnFuZU5jw/UZqyNzLktBXyQku2aRjhoUPEKBB/DhEj6WhWd7JM14f051OmgWhZeLjFT6+RCdNsOu7mv6MkyVatzeHqcu1VrDZ5TCx3apOAz458tWdWuAUWcAney15o9q1Wpgirm/qmfcfgDzcvjSTxCBUIOY1gMDpzCVLtdWAr3apBn6vk923dVIzovT84yAFSzfKt7npXaOTxIbkKd2Gz38qAE9urPPH8SisPy0ynY2Cghgv4iWC32vrOWrv3iZIzpP5u1/eF/joGeVykQzPCUmOm/sKhEXYQM9rgesW/wjUnKbBy8FtKgSD3NUQheJvgzZGc9jLBkvxDYDUXG8n68056/BtoUIuJI0pkylwtXNYM+FD5IFVm8k/xqsTzAlR8aHcqWT/mIz4p8Fo/LzCzxcY4x6QkpPq+V1MaagIxt+HgDMyDRhzTT8e6M675v6hTegtWa7ObfEh3c+eG+y81naWAvrmkYNoYbIXg=",
"EntitiesCount": {
"RechnungsEntity": 1,
"RechnungsstatusEntity": 1,
"PositionenEntity": 1
}
}
HTTP/1.1 202 Accepted
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 446
Content-Type: application/json; charset=utf-8
Expires: -1
X-Powered-By: ASP.NET
Date: Thu, 29 Oct 2020 11:15:23 GMT
{
"id": "{JobId}",
"requesttype": "RechnungsdatenRequest",
"state": {
"JobState": -1,
"JobStateAsString": "Queued",
"StateDateTime": "2020-10-29T11:15:20.8227164+00:00",
"PreviousJobState": null
},
"_links": {
"self": {
"href": "https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs"
},
"jobsResponses": {
"href": "https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs/{JobId}/responses"
}
}
}
2. 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. Das heißt falls Daten mit einem anderen Requesttypen oder einem anderen Kunden ausgetauscht werden sollen, müsste man einen neuen Token erstellen.
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.1
Host: api.realestatehub.haufe.io
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••
Content-Type: application/x-www-form-urlencoded
Accept: */*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 116
grant_type=client_credentials&scope={LicenseIndicatorHash}&requesttype=RechnungsdatenRequest
HTTP/1.1 201 Created
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 190
Content-Type: application/json; charset=utf-8
Expires: -1
X-Powered-By: ASP.NET
Date: Fri, 30 Oct 2020 07:41:29 GMT
{
"access_token": "03c949ca-36a0-4236-a564-1c897982ecf2",
"token_type": "Bearer",
"expires_in": 1800,
"scope": "{LicenseIndicatorHash}",
"requesttype": "RechnungsdatenRequest"
}
3. Abholen von Antworten zu selbst gesendeten Datenpaketen
Der Endpoint ResponsesGetItem erwartet, dass eine Job ID mit übergeben wird und liefert zu diesem Job Informationen, falls vorhanden.
Das ist im Allgemeinen hilfreich, wenn für selbst abgesetzte Jobs Antworten der Gegenstelle entgegengenommen werden sollen. Falls noch keine Antwort vorhanden ist, wird der Status des Jobs zurückgegeben. Außerdem wird ein Authentifizierungstoken im Header benötigt.
GET ResponsesGetItem
GET https:
//api.realestatehub.haufe.io/CloudApi/V1/api/jobs/{JobId}/responses HTTP/1.1
Host: api.realestatehub.haufe.io
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••
Authorization: Bearer e8461771-397c-48b4-b59f-cde2395cffea
Accept: */*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 701
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Expires: -1
Vary: Accept-Encoding
X-Powered-By: ASP.NET
Date: Fri, 30 Oct 2020 10:21:38 GMT
{
"id": null,
"jobid": "{JobId}",
"jobstate": {
"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
}
}
}
},
"licenseownerid": null,
"licensecounterpartid": null,
"response": "2QY+W5OSBtRYFP4wqQp/H9dlS0QCCdtk3ReDRacMEH3G/CQz8qiqJlrcGMNHFYlAGjTZNwAMkkdHg9pO4EgiAz9wM8cBUfY3IUtpZc4X28E=",
"responsecode": "TestCode-0001",
"IsResponseOk": true,
"responseSalt": "oiRICzl5Td5N+OFyoWrRHs86Mb7DVIpJLMqskpoImfQ=",
"_links": {
"self": {
"href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs//responses"
},
"confirmJobResponse": {
"href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs//responseconfirmations"
}
}
}
Eine zweite Ausprägung hierzu nämlich der Endpunkt ResponsesGetItems, ist das massenweise Abholen der Antworten. Dabei werden allerdings nur tatsächlich beantwortete Jobs zurückgegeben.
GET ResponsesGetItems
GET https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs/responses HTTP/1.1
Host: api.realestatehub.haufe.io
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••
Content-Type: application/json
Authorization: Bearer 33f0f4a1-77e5-4870-a05e-843c2f8db9c1
Accept: */*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 713
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Expires: -1
Vary: Accept-Encoding
X-Powered-By: ASP.NET
Date: Fri, 30 Oct 2020 13:02:29 GMT
{
"jobResponseList": [
{
"id": null,
"jobid": "{JobId-GUID}",
"jobstate": {
"JobState": 3,
"JobStateAsString": "Processed",
"StateDateTime": "2020-10-30T13:00:19.7211117+00:00",
"PreviousJobState": {
"JobState": 2,
"JobStateAsString": "Confirmed",
"StateDateTime": "2020-10-30T12:39:48.5040631+00:00",
"PreviousJobState": {
"JobState": 0,
"JobStateAsString": "New",
"StateDateTime": "2020-10-30T12:13:43.2320087+00:00",
"PreviousJobState": {
"JobState": -1,
"JobStateAsString": "Queued",
"StateDateTime": "2020-10-30T12:13:41.7075337+00:00",
"PreviousJobState": null
}
}
}
},
"licenseownerid": null,
"licensecounterpartid": null,
"response": "4GN+Bq48Kr2NYbOPVn6PblyAf8XaihMOki27PxagmSfShS8HAT34xhrNsKDbEBMoLaZl/QaZxdlqVAKsBzl0V0HK6Z/zJOGqeoHpXsa7120=",
"responsecode": "TestCode-0001",
"IsResponseOk": true,
"responseSalt": "50ITgPkauOVuHJsPG+9e9kb9p8rVDrn0GG3uuh5JQRI="
},
{
"id": null,
"jobid": "{JobId-GUID}",
"jobstate": {
"JobState": 3,
"JobStateAsString": "Processed",
"StateDateTime": "2020-10-30T13:00:19.7211117+00:00",
"PreviousJobState": {
"JobState": 2,
"JobStateAsString": "Confirmed",
"StateDateTime": "2020-10-30T12:39:48.5040631+00:00",
"PreviousJobState": {
"JobState": 0,
"JobStateAsString": "New",
"StateDateTime": "2020-10-30T12:13:43.2320087+00:00",
"PreviousJobState": {
"JobState": -1,
"JobStateAsString": "Queued",
"StateDateTime": "2020-10-30T12:13:41.7075337+00:00",
"PreviousJobState": null
}
}
}
},
"licenseownerid": null,
"licensecounterpartid": null,
"response": "4GN+Bq48Kr2NYbOPVn6PblyAf8XaihMOki27PxagmSfShS8HAT34xhrNsKDbEBMoLaZl/QaZxdlqVAKsBzl0V0HK6Z/zJOGqeoHpXsa7120=",
"responsecode": "TestCode-0001",
"IsResponseOk": true,
"responseSalt": "50ITgPkauOVuHJsPG+9e9kb9p8rVDrn0GG3uuh5JQRI="
},
.
.
.
.
],
"_links": {
"self": {
"href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/responses"
},
"confirmJobResponse": {
"href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/responseconfirmations"
}
}
}
4. Bestätigung von Responses
Nach der Abholung einer Response muss diese ebenfalls bestätigt werden, sodass die Cloud API davon ausgehen kann, dass der gesamte Job abgeschlossen ist. Dies geschieht über den Endpoint ResponseConfirmationCreate. Dazu muss eine JobId mitgegeben werden, welches eine GUID ist. Außerdem wird ein Authentifizierungstoken im Header benötigt.
POST ResponseConfirmationCreate
POST https:
//api.realestatehub.haufe.io/CloudApi/V1/api/jobs/{JobId}/responseconfirmations HTTP/1.1
Host: api.realestatehub.haufe.io
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••
Authorization: Bearer f3da17f0-9c21-4ea9-8b01-b6452f7f98c9
Accept: */*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length:
0
HTTP/1.1 201 Created
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 254
Content-Type: application/json; charset=utf-8
Expires: -1
X-Powered-By: ASP.NET
Date: Fri, 30 Oct 2020 10:27:03 GMT
{
"id": "{JobId}",
"confirmationId": "{ConfirmationId}",
"_links": {
"self": {
"href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/{JobId}/responseconfirmations"
}
}
}
Über den folgenden Endpoint ResponseConfirmationsCreate können auch mehrere Responses per JSON payload bestätigt werden.
POST ResponseConfirmationsCreate
POST https://api.realestatehub.haufe.io/CloudApi/V1/api/jobs/responseconfirmations HTTP/1.1
Host: api.realestatehub.haufe.io
Ocp-Apim-Subscription-Key: ••••••••••••••••••••••••••••••••
Content-Type: application/json
Authorization: Bearer e98db7a5-7b78-4c25-9140-9920946894af
Accept: */*
Cache-Control: no-cache
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 46
[
"{JobId-GUID}",
"{JobId-GUID}",
"{JobId-GUID}",
"{JobId-GUID}",
"{JobId-GUID}",
"{JobId-GUID}",
. ,
. ,
. ,
. ,
"{JobId-GUID}"
]
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 360
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Expires: -1
Vary: Accept-Encoding
X-Powered-By: ASP.NET
Date: Fri, 30 Oct 2020 12:39:48 GMT
{
"JobResponseConfirmationResults": [
{
"JobId": "{JobId-GUID}",
"ResultMessage": "Response for job {JobId-GUID} confirmed.",
"IsResultOk": true
},
{
"JobId": "{JobId-GUID}",
"ResultMessage": "Response for job {JobId-GUID} confirmed.",
"IsResultOk": true
},
{
"JobId": "{JobId-GUID}",
"ResultMessage": "Response for job {JobId-GUID} confirmed.",
"IsResultOk": true
},
{
"JobId": "{JobId-GUID}",
"ResultMessage": "Response for job {JobId-GUID} confirmed.",
"IsResultOk": true
},
{
.
},
{
.
},
{
.
},
{
"JobId": "{JobId-GUID}",
"ResultMessage": "Response for job {JobId-GUID} confirmed.",
"IsResultOk": true
}
],
"_links": {
"self": {
"href": "https://testhlreapimanagement.azure-api.net/CloudApi/V1/api/jobs/responseconfirmations"
}
}
}