Anbindung iZettle via OAut 2.0.

Guten Abend, ich hoffe, dass mir jemand bei dieser Frage helfen kann:

Ich versuche eine Verbindung zur iZettle API herzustellen (https://github.com/iZettle/api-documentation).

Ich habe mich der Sache so genähert, dass ich erst eine HTTP-Verbindung zum dem Host 'https://oauth.izettle.net' herstelle. Dort scheitere ich aber bereits. Ich habe drei einen Entwickleraccount bei iZettle angelegt und erhalten dort 'Client ID' und 'Client Secret' für die generelle Anbindung. Das hat nun noch nichts mit der konkreten Datenquelle zu tun - da ich mich hier ohne Bezug auf die Datenquelle angemeldet habe. Siehe Screenshot:


image


Zudem habe ich von dem Anbieter der Datenquelle nun zudem 'Client ID' und 'API Key' erhalten.

Ich habe konkret zwei Fragen:

1.) In der Dokumentation habe ich gelesen, dass ich erst eine Verbindung zu https://oauth.izettle.com aufbauen muss und danach zu https://products.izettle.com - wie baue ich das am besten auf?

2.) Ich bin mit den vier Angaben (2*'Client ID', 'Client Secret' und 'API Key') überfordert. Kann mir jemand sagen wie ich diese richtig sortiere/anwende.

Vielen Dank für jeden Tipp, damit komme bestimmt weiter.

Gruß, Patrick.

Hallo Patrick,


Der Interessante Part in der Doku fängt hier an: https://github.com/iZettle/api-documentation/blob/master/authorization.adoc#request-an-access-token


Fürs rumprobieren würde ich einen API Client verwenden, wie zum Beispiel Postman. Den benutze ich immer. https://www.postman.com/downloads/


Wie bereits von dir erwähnt, musst du, bevor du die eigentlich API konsumieren kannst, dir zunächst einen Token abholen. Das machst du hier "https://oauth.izettle.com/token".

In der Doku dazu, dass du folgenden Request machen sollst:

curl -s -d \
'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&client_id=c55de605-48b6-42ef-b69e-cd9d14ded15a&assertion=eyJraWQiOiIwIiwidHlwIjoiS....' \
-H 'Content-Type: application/x-www-form-urlencoded' \
'https://oauth.izettle.com/token'

Hierbei handelt es sich um curl syntax.

Daraus kann man folgende Informationen rausholen

Der Endpunkt (URL) lautet https://oauth.izettle.com/token

-d : Die Request Methode ist "POST"

(Body)Content-Type: application/x-www-form-urlencoded' -> Die benötigten Werte werden als URL Parameter übergeben.

Hierbei werden explizit drei Parameter erwartet:

grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer (Immer)

client_id=Deine Client ID

assertion=Dein API Key


Ich habe jetzt natürlich keinen eigenen Zugang aber der Request im Postman sollte dann so aussehen:

image


Wenn du das dann auf Synesty übertragen willst, dann sollte der APICall Step diese Url haben:
https://oauth.izettle.com/token?grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&client_id=Deine Client ID&assertion=Dein API Key


Sollte alles funktioniert haben, solltest du einen Bearer Token von der API zurück bekommen, den du dann für die andere URL benutzen kannst.


Viele Grüße

Stefan

Hallo Stefan,


danke für deine schnelle Rückmeldung. Ich habe das in Postman und in Synesty genau so eingestellt. In Postman klappt es (danke für den Tipp mit Postman), in Synesty klappt es nicht.


Fehlermeldung ist 'Step: Connect to iZettle [APICall, step position 1] HTTP Status: 415 (Unsupported Media Type), Inhalt Antwort: {"code":415,"message":"HTTP 415 Unsupported Media Type"}'

Hier die Kopie des ApiCalls. Host ist https://oauth.izettle.com/ - was mache ich falsch?


Danke nochmals, Gruß, Patrick.


{
"executorflowuniqename" : "",
"description" : "",
"condition" : "",
"rank" : 10,
"active" : true,
"permaId" : 1,
"stepprovider" : "APICall@com.asolida.delivor.plugin.steps.httpurldownloadimpl",
"stepproviderversion" : "1.0",
"stepProperty" : [ {
"datatype" : "ACCOUNT",
"contextkey" : null,
"value" : "API Import iZettle POS",
"key" : "account",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "application/x-www-form-urlencoded",
"key" : "bodyContentType",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "10",
"key" : "callLimit",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "errorStatusCodes",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "fileParameterName",
"type" : "IN"
}, {
"datatype" : "FILE",
"contextkey" : null,
"value" : "",
"key" : "fileToUpload",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "headerContentType",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "token?grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&client_id=cf18c041-9...&assertion=eyJraWQiOiIw...",
"key" : "host",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "POST",
"key" : "method",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "parsingTemplate",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "password",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "rateLimitPerSecond",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "requestBody",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "requestHeaders",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "xml",
"key" : "responseFormat",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "sourcefileCharset",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "false",
"key" : "sslCertificates",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "60",
"key" : "timeoutInSeconds",
"type" : "IN"
}, {
"datatype" : "STRING",
"contextkey" : null,
"value" : "",
"key" : "username",
"type" : "IN"
} ],
"steptype" : "DEFAULT",
"uiColor" : null,
"name" : "Connect to iZettle"
}

Hallo Patrick,


Ich habe mich wohl bei URL vertan. Die Parameter kannst du doch nur im Body übertragen

Das würde dann so wie folgt aussehen:

image


Bitte denk dran unten im Step den Body Content Type auf "application/x-www-form-urlencoded" zu setzen.


Viele Grüße

Stefan