am 14.12.2020 16:01
Hallo,
hat vielleicht schon mal jemand den Entwicklerzugang über die Rest API Schnittstelle von MATLAB (webread-Funktion) erfolgreich in Betrieb genommen und ist bereit seine Erfahrungen zu teilen?
Abschnitt 2.1 und 2.2 der API-Doku konnte ich nach einigen Iterationen erfolgreich umsetzen. Aktuell hänge ich bei 2.3 fest und bekomme immer die Fehlermeldung 415. Postman ist installiert und klappt alles einwandfrei. Scheint also an meiner Übersetzung der Anleitung bzw. Postman-Skripte in MATLAB-Skripte zu liegen.
Beste Grüße
Tom P
Gelöst! Gzum hilfreichen Beitrag.
am 14.12.2020 17:11
Hallo @Tom P,
ein Tipp von uns ist, die Requests in der Postman Console (zu öffnen in Postman über View -> Show Postman Console) Stück für Stück mit der Implementierung im jeweiligen Programm zu vergleichen. Der HTTP-Statuscode 415 bedeutet „Unsupported Media Type“. Der Request aus 2.1 hat als Content-Type: application/x-www-form-urlencoded. Im Unterschied dazu hat der Request aus 2.3 ein Request Body mit JSON, und im Header wird Content-Type: „application/json“ mitgeschickt.
Beste Grüße
Jan-Ove
am 14.12.2020 22:48
Hallo SMT_Jan-Ove,
vielen Dank für den Super-Tipp mit der Console. Ich werde mich mal weiter vorarbeiten und Feedback geben, wenn ich durch bin oder neue Fragen habe.
Beste Grüße
Tom P
am 05.04.2021 14:01
Hi Tom,
mich würde interessieren, ob du mit der Matlab Verknpüfung mittlerweile Erfolg hattest. Ich probiere mich da aktuell auch dran, aber weiß mangels API-Erfahrung gar nicht, wie ich anfangen soll.
Viele Grüße
am 06.04.2021 16:01
Hi to.bias,
leider bin ich nicht weitergekommen. Die Schritte 2.1 und 2.2 aus der Doku klappen scheinbar reibungslos. Bei 2.3 bekomme ich aber eine Fehlermeldung. Ich vermute, da stimmt etwas mit den Datentypen nicht.
Als Starthilfe kann ich gerne mein Matlab-Skript zur Verfügung stellen:
api_url = 'https://api.comdirect.de';
%
client_id = 'hier client_id einsetzen';
client_secret = 'hier client secret einsetzen';
zugangsnummer = 'hier comdirect Zugangsnummer einsetzen';
pin = 'hier comdirect pin einsetzen';
sessionId = 'cb017d48-db9f-2830-cad0-17b400ef8623'; % kann nach meinem Verständnis ein beliebiger string sein
% 2.1 Erzeuge Authentifikationstoken
url = [api_url '/oauth/token'];
header = {'ContentType' 'application/x-www-form-urlencoded';'Accept' 'application/json'}; % header
options = weboptions('RequestMethod','POST','HeaderFields',header);
data = webread(url,options,'client_id',client_id,'client_secret',client_secret,'grant_type','password','username',zugangsnummer,'password',pin);
access_token = data.access_token;
refresh_token = data.refresh_token;
token_type = data.token_type;
disp('Authentifikationstoken erzeugt ...');
pause(2);
% 2.2 Rufe Sessionstatus ab
url = [api_url '/api/session/clients/user/v1/sessions'];
requestId = char(datetime('now','TimeZone','local','Format','HHmmssSSS'));
clientRequestId = struct('clientRequestId',struct('sessionId',sessionId,'requestId',requestId));
clientRequestId_json = jsonencode(clientRequestId);
header = {'Accept' 'application/json';'Authorization' strcat(['Bearer',' ',access_token]);'x-http-request-info' clientRequestId_json;'ContentType' 'application/json'}; % header
options = weboptions('RequestMethod','GET','HeaderFields',header);
data= webread(url,options);
sessionUUID = data.identifier;
disp('Sessionstatus abgerufen ...');
pause(2);
% 2.3 Anlage Validierung einer Session-TAN
url = [api_url '/api/session/clients/user/v1/sessions/' sessionUUID '/validate']
requestId = char(datetime('now','TimeZone','local','Format','HHmmssSSS'));
clientRequestId = struct('clientRequestId',struct('sessionId',sessionId,'requestId',requestId));
clientRequestId_json = jsonencode(clientRequestId);
header = {'Accept' 'application/json';'Authorization' strcat(['Bearer',' ',access_token]);'x-http-request-info' clientRequestId_json;'ContentType' 'application/json'}; % header
options = weboptions('RequestMethod','POST','HeaderFields',header)
body = struct('identifier',sessionUUID,'sessionTanActive',true,'activated2FA',true)
body_json = jsonencode(body)
data = webwrite(url,options, body_json)
disp('Session-TAN angelegt / validiert ...');Das Postman-Tool würde ich dir zum Beginn unbedingt empfehlen. Ist kostenfrei und lässt sich relativ einfach installieren und bedienen. Damit konnte ich die Zugriffsfunktionen erfolgreich durchlaufen. Lieder ist mir nur der Übertrag nach Matlab noch nicht gelungen.
Da ich nach wie vor an dem Thema sehr interessiert bin, würde ich mich über jegliche Tipps freuen.
Beste Grüße
am 07.04.2021 08:11
Vielen Dank erstmal! Wird ein bisschen dauern, bis ich mich da eingefuchst habe (falls ich es überhaupt hinbekomme)--aber falls ich nennenswerte Fortschritte mache, geb ich Bescheid.
18.06.2021 16:25 - bearbeitet 18.06.2021 16:29
Hi Tom P,
zunächst einmal vielen Dank, dass du den Matlab-Code bereitgestellt hast. Der hat mir sehr geholfen, um den API-Aufruf in Matlab nach zu bauen. Gerne möchte ich hier nun auch etwas zurückgeben:
Zu Code 2.1:
Funktioniert einwandfrei.
Zu Code 2.2:
Der Teil funktionierte bei leider nicht auf Anhieb. Es lag daran, dass in der header-Definition an der Stelle (s.u.) 2 Blanks, statt 1 Blank zwischen den Hochkommas enthalten waren:
['Bearer',' ',access_token]
Nachdem ich 1 Blank eingefügt hatte, funktionierte auch dieser Aufruf.
Zu Code 2.3:
Der funktioniert auch, wenn du den header nicht erneut aufbaust, sondern genau den gleichen header verwendest, wie er bereits in Code 2.2. aufgebaut ist.
Ich hoffe, ich konnte damit ein Stückchen weiterhelfen?
Selbstverständlich arbeite ich gerade an Code 2.4 und scheitere leider noch. Ich weiß nicht, wie ich an die Response des headers nach einem webwrite-Aufruf in Matlab komme, welcher aus Code 2.3 benötigt und als Input des headers in Code 2.4 benötigt wird.
Falls jemand hier einen Tipp hat, würde ich mich sehr freuen.
Viele Grüße
am 26.02.2022 19:08
Hi Tom,
erstens besten Dank für den Beispiel! Hat mir sehr geholfen.
Zusätzlich zu dem Fehler dass londraki gesehen hat, hast du in 2.2 und 2.3 den 'Content-Type' im Header falsch geschrieben. Bei dir steht
'ContentType'
richtig ist
'Content-Type'
Seltsamerweise funktioniert 2.2 auch mit inkorrekten Schreibweise. 2.3 nicht.
Gruß,
Victor
27.02.2022 16:26 - bearbeitet 27.02.2022 16:34
Hi,
ich denke man soll hier mit den low level Befehle arbeiten. Etwa so:
method = matlab.net.http.RequestMethod.POST;
header = [...
matlab.net.http.field.AcceptField('application/json'),...
matlab.net.http.field.AuthorizationField('Authorization', ['Bearer ',session.accessToken]),...
matlab.net.http.HeaderField('x-http-request-info', ???),...
matlab.net.http.field.ContentTypeField('application/json')...
];
data = struct('identifier', session.UUID, ...
'sessionTanActive', true,...
'grant_type', true);
query = matlab.net.QueryParameter(data);
body = matlab.net.http.MessageBody(query);
request = matlab.net.http.RequestMessage(method,header,body);
uri = matlab.net.URI([session.apiPrefix 'session/clients/user/v1/sessions/' session.UUID '/validate']);
response = send(request,uri)response soll den header beinhalten. Ich kriege leider den x-http-request-info Headerfeld nicht hin. Egal was ich da eingebe - kriege 'Bad request' zurück mit einem 'Der Header 'x-http-request-info' ist fehlerhaft.' Fehler.
Hat jemand eine Idee? Würde mich recht freuen...
Schöne Grüße
am 28.02.2022 13:32
Hallo @tilas,
ich habe mal nachgefragt. Leider können die Kollegen nicht generell Hilfen zu den verschiedenen Programmiersprachen oder Entwicklungstools geben.
Mit matlab kennen sie sich bedauerlicherweise nicht so aus.
Eventuell wirst du bei Postman fündig. Postman kann für verschiedene Programmiersprachen und Tools Beispiel-Requests generieren.
Viele Grüße
Jessica