Hilfe
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

Entwicklerzugang über Matlab

Tom P
Autor ★
5 Beiträge

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

11 ANTWORTEN

SMT_Jan-Ove
ehemaliger Mitarbeiter
4.279 Beiträge

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

Tom P
Autor ★
5 Beiträge

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


to.bias
Autor
2 Beiträge

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

 

Tom P
Autor ★
5 Beiträge

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

to.bias
Autor
2 Beiträge

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.

londraki
Autor ★
3 Beiträge

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

tilas
Autor ★
4 Beiträge

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

tilas
Autor ★
4 Beiträge

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

SMT_Jessica
ehemaliger Mitarbeiter
1.179 Beiträge

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