Neues Thema starten

REAL API

 Hallo zusammen,


ich würde gerne  Tickets direkt über die Real API abrufen, scheitere aber noch an der HM-Signature, bzw. wie ich den UNIX timestamp so einbinde, dass der Request auch zu einem Ergebnis führt.


Hat hier jemand einen Tipp?


Beschrieben ist es hier: https://www.real.de/api/v1/?page=rest-api


Danke für eure Hilfe vorab und Grüße

Enrico


Hallo Enrico,


ich habe mal ein Beispiel erstellt wie das mit der HM Signatur funktionieren könnte.


<#assign method = "POST">
<#assign uri = "https://www.real.de/api/v1/units/">
<#assign body = "">
<#assign timestamp = 1411055926>
<#assign gesamt>${method}${"\n"}${uri}${"\n"}${body}${"\n"}${timestamp}</#assign>
${gesamt}
<#assign secret ="a7d0cb1da1ddbc86c96ee5fedd341b7d8ebfbb2f5c83cfe0909f4e57f05dd403">
${hmacSHA256(gesamt, secret, "hex")!}
75312eabe66e4b9e74552a5e8959456d69cfa52a7cae9049093aede4bcdf71e7

Viele Grüße

Stefan Helme

Hallo Stefan,


danke schonmal hierfür. Kannst du mir auch sagen, wie ich die Aktuelle Zeit als Unix-Zeit in rein bekomme. Irgendwas klappt hier bei der Umwandlung nicht.


Danke und Grüße

Enrico

Hallo Enrico,


den aktuellen UNIX Timestamp bekommst du über folgenden Ausdruck: 


<#assign unix = (.now?long / 1000)?split(".")[0]>



Viele Grüße

Stefan Helme 

Ich nochmal,


Wenn ich mir das ganze nun in einen TextHtmlWriter packe, wie sage ich hier, dass ich das Ergebnis von Timestamp und die Signature als "output" darstelle. Denn ich muss die Ergebnisse dann ja im ApiCall step in klartext in den Header schreiben. Im Moment bekomme ich als Feedback immer nur:


(Unauthorized), Inhalt Antwort: {"message":"API Client is not set"}


VG

Enrico


Hallo Enrico,


soweit ich dich richtig verstehe willst du mehrere Werte aus dem HTMLTextWriter rausbekommen.

Du könntest in der Theorie entweder die Werte Kommasepariert rauschreiben und das ganze als CSV nochmal einlesen. Du hast dann die Möglichkeit auf die Werte zuzugreifen.
Alternativ schreibst du alles in ein JSON und und parset das dann im Header wieder. Das würde zum Beispiel so aussehen: 

  

<#assign method = "POST">
<#assign uri = "https://www.real.de/api/v1/units/">
<#assign body = "">
<#assign timestamp = 1411055926>
<#assign gesamt>${method}${"\n"}${uri}${"\n"}${body}${"\n"}${timestamp}</#assign>
<#assign secret ="a7d0cb1da1ddbc86c96ee5fedd341b7d8ebfbb2f5c83cfe0909f4e57f05dd403">
<#assign signature = hmacSHA256(gesamt, secret, "hex")!>
{
"timestamp": "${timestamp}",
"signature" : "${signature}"
}

 

Im zweiten Schritt gehst du dann hin und und parsest das ganze im Header 

wie folgt 

  

<#assign output = htmlWriterOutput?eval> <#-- hier musst du den htmlWriterStep verlinken -->
HM-Signature=${output.signature}
HM-Timestamp=${output.timestamp}

 Wenn du das ganze aber Zeilenbasiert machen musst und du für jeden Call die Signatur neu berechnen musst, würde es sich anbieten die Signatur immer im Spreadsheetmapper zu berechnen.


Ich habe das ganze jetzt natürlich nicht ausprobiert, weil ich keinen Zugriff auf die REAL API habe, deswegen müsstest du das ein wenig rumprobieren bis es klappt.

In der Theorie sollte aber das generieren der Signatur (wie im ersten Post beschrieben) funktionieren, denn die vorgegebenen Testwerte aus der Doku stimmen mit dem hier generierten Ergebnis überein.


Viele Grüße

Stefan 

Hi Stefan,


heute stehe ich mir irgendwie selber auf den Füßen.


Im JSON ist es denke ich die beste Variante, allerdings funktioniert das Parsen im Header noch nicht. Er scheint ein Problem mit der Verlinkung zu Writer zu haben.


Wenn ich mir die Vorschau anzeigen lasse vom Writer zeigt er mir

TEMPLATE_OUTPUT_STRING@TextHTMLWriter_17


Wenn ich das aber einbaue sagt er mir er hat einen String Fehler. Muss ich das in die Zeile mit assign output irgendwie anders einbauen als es in der Vorschau Ausgabe steht?

Dankeund Grüße
Enrico

Hallo Enrico,


könntest du mir bitte ein paar Screenshots zukommen lassen? Besonders von der Fehlermeldung wäre gut.

Bei mir sieht das so aus: 

image


image

image

image



Viele Grüße

Stefan 

Hallo Stefan,


ich habe den Fehler gefunden, hatte noch < zuviel drin, daher ging es nicht.

Nun will ich den Header so in den Apicall bauen. Muss ich dafür noch eine KEY,Value Varable setzen oder sollte der Abruf im Header so funktionieren?:


image

Die Zugangsdaten von der Real Api sollten eigentlich als Test funktionieren, allerdings habe ich weiterhin:

HTTP Status: 401 (Unauthorized), Inhalt Antwort: {"message":"API Client is not set"}


Grüße

Enrico

Hallo Enrico, 


ich bin mir nicht sicher ob das einen Unterschied macht, aber soweit ich weiß sind die Anführungszeichen um die Key-Value Paare nicht notwendig.

Weiterhin sehe ich noch, dass dein Accept Key klein geschrieben ist. Ich nehme an der muss groß sein. 

Das sieht dann so aus: 

image


Danach bekomme ich zwar immer noch einen "Wrong Client Key set", ich nehme hier aber mal an, dass das tatsächlich daran liegt, dass der in der Doku vorgegebene Client Key nicht valide ist. Heißt du musst das dann mit deinem eigenen Client/Secret Testen.

Ich bekomme immerhin selbige Fehlermeldung wenn ich das über das Testmodul von Real probiere: 

image



Viele Grüße

Stefan

Hi Stefan,


ich habe die beiden Keys nun durch gültige ersetzt, allerdings immernoch der selbe Fehler.

Wenn du mir sagst wo, dann gebe ich dir die Keys per Nachricht durch, eventuell kannst du noch etwas testen.


VG

Enrico

Nochmal ich,


bin etwas weiter, nun erhalte ich:


Step: APICall [APICall, step position 3] HTTP Status: 400 (Bad Request), Inhalt Antwort: {"message":"Request signature is corrupted. Expected: \"8b74............................................................\", given: \"017b9456cc568bc0779ae64dda24d364d57bb7b7fb711d5b0f18dc1dff88d4df\""...



Hallo Enrico,


Das sieht stark danach aus als ob irgendwas beim generieren der Signatur schief läuft. 

Könntest du mir mal bitte sagen gegen welche Route du den Call machst und mir den Inhalt deines HTMLWriter Steps zurück gibst. Bitte beachte, dass deine Methode (POST oder GET) mit dem Cal, den du machst, übereinstimmt. Ich würde das einfachheitshalber zunächst mit einem GET Call probieren. 


Deine Keys möchte ich an dieser Stelle aus rechtlichen Gründen nicht haben.

Tut mir Leid, dass ich da nicht besser helfen kann.


Viele Grüße

Stefan 

Hallo Stefan,


es hat funktioniert, du bist Klasse, danke!

Nun müsste ich nur wissen, wie ich es schaffe, mehr als 19 Einträge abzufragen.


Ich packe die Daten in ein Spreadsheet damit ich Sie mir dann anschließend im Mapper bearbeiten kann. Jedoch bekomme ich immer nur die aktuellsten 19 Zeilen zurück.


Was aknn da der Grund sein?


VG

Enrico

Hallo Enrico,


soweit ich weiß arbeitet die REAL API mit Pagination. 
Dazu gibt es hier mehr Informationen: https://www.real.de/api/v1/?page=rest-api#collection-pagination


Viele Grüße

Stefan

Anmelden um einen Kommentar zu veröffentlichen