Page 2 of 5 FirstFirst 1 2 3 4 ... LastLast
Results 16 to 30 of 69

Thread: Exact online Oauth met Indy tidhttp

  1. #16
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40
    Ik doe het als volgt:
    ik stuur eerst een idhttp.get commando met clientid en zo naar start.exactonline en krijg dan een response in de vorm van een html pagina.
    Die html pagina lees ik in een twebbrowser in, met het commando
    (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(res ponsestream)) , waarna ik een inlogpagina krijg. Daar vul ik mijn userid en wachtwoord in en vervolgens krijg ik de bovenvermelde tekst te zien (auth?client_id={xxxxxx}&clientsecret={xxxxxxxxxxx } &redirect_uri=http://localhost:80&response_type=code&force_login=0) Die tekst krijg ik overigens ook te zien als ik een onjuist wachtwoord invul, zie ik net.
    Ik doe iets verkeerd, maar ik kan er niet de vinger op leggen

  2. #17
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40
    Dit scherm krijg ik te zien:
    Click image for larger version. 

Name:	inlogexact.jpg 
Views:	266 
Size:	11.6 KB 
ID:	7052

  3. #18
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40
    Hoe kan ik via de response die ik met get krijg komen op de inlog pagina van Exact?

  4. #19
    Had je mijn vorige post (de laatste op de vorige pagina) nog gelezen?

    Daar stond in dat je de redirect_uri en client_id moet encoden.

    Overigens zie ik ook dat er staat "Even geduld a.u.b." en een niet zichtbaar plaatje.
    Dus ik denk dat het automatisch doorsturen naar die localhost dan ook niet werkt.

    Kijk eerst maar even of het na het encoden van die url beter gaat.

  5. #20
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40
    Dat heb ik geprobeerd, maar dan krijg ik weer een autorization error.
    Als ik in plaats van een http.get commando de url naar de twebbrowser stuur krijg ik wel een code! Daarmee kan ik dan verder met de communicatie met Exact, toch?

  6. #21
    Je kunt die https://start.exactonline.nl/api/oauth2/auth URL absoluut niet aanspreken met http.get commando want het moet handmatige autorisatie krijgen. Dus dat moet altijd met een browser. Je kunt inderdaad zelf een TWebBrowser daarvoor gebruiken maar ik vondt het raar dat er dan die "Even geduld a.u.b." in jouw beeldscherm blijft staan (met een niet bestaand plaatje). Dat doet mij vermoeden dat er iets mis gaat in TWebBrowser.

    Kun je eens het volgende proberen. Start je programma met die THTTPServer en ga dan via een extern browser scherm (Crhome of Internet Explorer) naar die URL:

    Code:
    https://start.exactonline.nl/api/oauth2/auth?client_id=%7Bxxxxx-xxxx-xxxx%7D&clientsecret=xxxxxxx&redirect_uri=https%3A//localhost%3A80&response_type=code&force_login=0
    (Als je clientsecret ook { en } heeft moet je die ook vervangen door %7B en %7D.)

    Krijg je dan wel een scherm met een logo (i.p.v. niet bestaand plaatje) ??
    Als je dan inlogt krijg je dan uiteindelijk een blanco scherm of iets anders?.

    Je zou dus een blanco scherm moeten krijgen en in je programma een Showmessage() met die code=.

    (in mijn vorige post was ik vergeten de : te vervangen van de :80. In bovenstaand doe ik dat nu wel)

    Je kunt ook eens &force_login=1 proberen.

  7. #22
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40
    Dan krijg ik (in chrome) een invalid autorization request. Doe ik het daarentegen zonder encoding dan kom ik bij het inlogscherm van Exact. Vul ik dan de inloggevens in, dan geeft mijn idhttpserver een code.

  8. #23
    Quote Originally Posted by jthesing View Post
    Vul ik dan de inloggevens in, dan geeft mijn idhttpserver een code.
    Ok, dat werkt dus. Dan is de encoding dus toch niet nodig.

    Wat werkt nu dan nog niet??
    Met die (authorization-)code kun je een access_token en refresh_token ophalen via http.get.

  9. #24
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40
    Ja, volgens mij kan ik verder zo. Heel erg bedankt voor je hulp! Ik heb er veel van geleerd, top!

  10. #25
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40

    Helaas, nu lukt het niet met de token...

    Quote Originally Posted by jthesing View Post
    Ja, volgens mij kan ik verder zo. Heel erg bedankt voor je hulp! Ik heb er veel van geleerd, top!
    Helaas...Kun je me nog vertellen hoe ik de token verkrijg?
    Mijn eerste vraag is: de code wordt verstuurd inclusief een carriage return/linefeed (#13#10). Moet ik die eraf halen?

    Ik heb 2 methodes geprobeerd:
    1 via get (zoals je suggereerde). De url is dan
    https://start.exactonline.nl/api/oauth2/token?code=X5D1!...(ingekort).....&redirect_uri=ht tp://localhost:80&grant_type=authorization_code&client_ id={mijnid}&clientsecret={secret}
    Dan krijg ik een 400 bad request

    2 via post, zoals het in de Exact help staat. Gaat als volgt:
    stringlist params wordt gevuld met :
    code=X5D.... (de ontvangen code)
    redirect_uri=http://localhost:80
    grant_type=authorization_code
    client_id={eb3987e5-9a26-4793-afb1-0cfafd5db5ce}' (mijn client id)
    clientsecret={mijn secret}
    en vervolgens via http.post('https://start.exactonline.nl/api/oauth2/token',params) verstuurd.
    Dan krijg ik een 401 unautorized of een 500 internal server error.

    Wat doe ik verkeerd?
    Last edited by jthesing; 09-Jul-15 at 00:09.

  11. #26
    Ja... maar er staat wel:
    Post data should be x-www-form-urlencoded
    Dus als je een POST doet moet je die parameters wel encoden (alleen wat er achter de = staat).

    Ook vind ik het raar dat je weer die redirect_uri op moet geven want ik dacht niet dat ze de access_token via die url teruggeven maar gewoon direct in de response (maar ik kan me vergissen).

  12. #27
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40
    Quote Originally Posted by rvk View Post
    Ja... maar er staat wel:

    Dus als je een POST doet moet je die parameters wel encoden (alleen wat er achter de = staat).

    Ook vind ik het raar dat je weer die redirect_uri op moet geven want ik dacht niet dat ze de access_token via die url teruggeven maar gewoon direct in de response (maar ik kan me vergissen).
    Bedankt voor je reactie. Ik probeer van alles, maar niet werkt.
    Dit is de inhoud van de stringlist.

    grant_type=authorization_code
    client_id=eb3987e5-9a26-4793-afb1-0cfafd5db5ce
    client_secret=DE........R6
    redirect_uri=http%3a%2f%2flocalhost%3a80
    code=X5D1!IAAAAL1utKcLUsSGYdqE9Hb04t6KYqZOsJkDcCK5 xVtIXQFh8QAAAAEg89oxkJw_RsMoc1GPevMDKcmzdHopgkQ9KE w-WbZsOQyE_kIBjWYQZrFBqK-RJgHjaCBlfXfKMfI9PB8y3ixpxo7VI6gSvEI9YkphdKOVw0DFg aI4XDsPzObSlU63MWeYGyan9HvP-v7nd-_Hi17RTSox57qq8pQKoOP9D0r82iRsFFw9hPXif9MhiiEgYXxH nYDKttudJVQxXa8hsQofKOUDmMfx0SBObCmqCnnjHMnlexnROY bq5_YeVrpYlH33_7e-FgkA8VKDJBBNkom1bEwoli39q4ab7_1lOpzGNs88yCJyyJ6hDW g7kAJHS4A

    Ik heb geprobeerd om de stringdelimiter op #13 te zetten, maar dat maakt niets uit, ik blijf een 400 bad request houden. Ook heb ik de forceencodeparams in de idhttp commponent opties aan en uit gezet, blijf een 400 fout houden.

    Ik heb ook een antwoord van de helpdesk van Exact die me een werkende post als voorbeeld hebben gegeven. Dat ziet er zo uit:

    POST https://start.exactonline.nl/api/oauth2/token HTTP/1.1
    Accept-Encoding: gzip,deflate
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 541
    Host: start.exactonline.nl
    Connection: Keep-Alive

    grant_type=authorization_code&client_id=38as2b58-345f-433b-976b-3c69f6b0250b&client_secret=ibASDH78SN8&code=ydFq%2 1IAAAADZ3-P3cXrV_TQwPhEcc_kqHoqsO2QlzdFPXxL9daQgT8QAAAAGfaw2 Wsz7TxelCpmkZUfzchsRAs-v8JNvHE0kBFdsJLFUcOB1vZ4P4LBxjLIjv95remC9-BfhSxuwnPYi29rQckMjkcawQbb0zzI59WHei6o8V7Z8zPe6j74 ___NKeznmZLYt7eT9azWjBx0SmPfwxRScG4iaAeDH6tSJ9HDpq k5HQRipPzu-fp2t5adLOLh7229iGjwlOvl6V4eTgCXH-ar9a_weSATOsp9Aw_B7cwsJ6Z516Aylqa9ubjSQOC3z-_M3IKiIelj07eN2SafWMurQaG3v2TSK5A51eiwURr430_UBQar btbSwtD1WbBNs&redirect_uri=http%3A%2F%2Flocalhost% 2Fredirect.php

    De client_secret en client_id staan niet tussen haken, dus dat zou ik ook niet moeten doen. Maakt overigens niet uit, met of zonder haken blijf ik een bad request houden. En die redirect uri lijkt me ook niet nodig, maar in hun voorbeeld zit die er wel bij.
    Een de toevoeging HTTP/1.1 zorgt ervoor dat de server niet gevonden wordt, dus die moet eraf.
    Blijft een puzzel...

  13. #28
    Kun je eens een stukkie code posten waarmee je deze parameters in indy vult.

    Ik kan eens testen om te zien wat er raw naar de server verstuurd wordt en dit vergelijken met wat Exact op geeft.

    Haal je overigens elke keer weer opnieuw die autorization-code op? Want ik denk dat je die gelijk moet gebruiken. Je kunt die denk ik niet gebruiken van bijvoorbeeld een uur geleden. De volgorde moet vrij snel achter elkaar.

    Dus:
    https://start.exactonline.nl/api/oauth2/auth? tonen in een TWebBrowser en de code afvangen via je TIdHTTPServer component.
    direct daarna een post doen naar
    https://start.exactonline.nl/api/oauth2/token? met die code en uit de response de access_token en refresh_token halen.

    Je hebt dan 10 minuten om de access_token te gebruiken.
    Daarna moet je met je refresh_token via een post naar
    https://start.exactonline.nl/api/oauth2/token?
    een nieuwe access_token ophalen. LET OP. Je krijgt dan ook weer een nieuwe refresh_token die je weer voor de volgende keer moet gebruiken. De oude vervalt waarschijnlijk.

    De laatste refresh_token blijft natuurlijk wel veel langer "geldig".

  14. #29
    Member
    Join Date
    May 2001
    Location
    Hoofddorp
    Posts
    40
    komt ie:

    function UrlUTF(stInput : widestring) : string;
    const
    hex : array[0..255] of string = (
    '%00', '%01', '%02', '%03', '%04', '%05', '%06', '%07',
    '%08', '%09', '%0a', '%0b', '%0c', '%0d', '%0e', '%0f',
    '%10', '%11', '%12', '%13', '%14', '%15', '%16', '%17',
    '%18', '%19', '%1a', '%1b', '%1c', '%1d', '%1e', '%1f',
    '%20', '%21', '%22', '%23', '%24', '%25', '%26', '%27',
    '%28', '%29', '%2a', '%2b', '%2c', '%2d', '%2e', '%2f',
    '%30', '%31', '%32', '%33', '%34', '%35', '%36', '%37',
    '%38', '%39', '%3a', '%3b', '%3c', '%3d', '%3e', '%3f',
    '%40', '%41', '%42', '%43', '%44', '%45', '%46', '%47',
    '%48', '%49', '%4a', '%4b', '%4c', '%4d', '%4e', '%4f',
    '%50', '%51', '%52', '%53', '%54', '%55', '%56', '%57',
    '%58', '%59', '%5a', '%5b', '%5c', '%5d', '%5e', '%5f',
    '%60', '%61', '%62', '%63', '%64', '%65', '%66', '%67',
    '%68', '%69', '%6a', '%6b', '%6c', '%6d', '%6e', '%6f',
    '%70', '%71', '%72', '%73', '%74', '%75', '%76', '%77',
    '%78', '%79', '%7a', '%7b', '%7c', '%7d', '%7e', '%7f',
    '%80', '%81', '%82', '%83', '%84', '%85', '%86', '%87',
    '%88', '%89', '%8a', '%8b', '%8c', '%8d', '%8e', '%8f',
    '%90', '%91', '%92', '%93', '%94', '%95', '%96', '%97',
    '%98', '%99', '%9a', '%9b', '%9c', '%9d', '%9e', '%9f',
    '%a0', '%a1', '%a2', '%a3', '%a4', '%a5', '%a6', '%a7',
    '%a8', '%a9', '%aa', '%ab', '%ac', '%ad', '%ae', '%af',
    '%b0', '%b1', '%b2', '%b3', '%b4', '%b5', '%b6', '%b7',
    '%b8', '%b9', '%ba', '%bb', '%bc', '%bd', '%be', '%bf',
    '%c0', '%c1', '%c2', '%c3', '%c4', '%c5', '%c6', '%c7',
    '%c8', '%c9', '%ca', '%cb', '%cc', '%cd', '%ce', '%cf',
    '%d0', '%d1', '%d2', '%d3', '%d4', '%d5', '%d6', '%d7',
    '%d8', '%d9', '%da', '%db', '%dc', '%dd', '%de', '%df',
    '%e0', '%e1', '%e2', '%e3', '%e4', '%e5', '%e6', '%e7',
    '%e8', '%e9', '%ea', '%eb', '%ec', '%ed', '%ee', '%ef',
    '%f0', '%f1', '%f2', '%f3', '%f4', '%f5', '%f6', '%f7',
    '%f8', '%f9', '%fa', '%fb', '%fc', '%fd', '%fe', '%ff');
    var
    iLen,iIndex : integer;
    stEncoded : string;
    ch : widechar;
    begin
    iLen := Length(stInput);
    stEncoded := '';
    for iIndex := 1 to iLen do
    begin
    ch := stInput[iIndex];
    if (ch >= 'A') and (ch <= 'Z') then
    stEncoded := stEncoded + ch
    else if (ch >= 'a') and (ch <= 'z') then
    stEncoded := stEncoded + ch
    else if (ch >= '0') and (ch <= '9') then
    stEncoded := stEncoded + ch
    else if (ch = ' ') then
    stEncoded := stEncoded + '+'
    else if ((ch = '-') or (ch = '_') or (ch = '.') or (ch = '!') or (ch = '*')
    or (ch = '~') or (ch = '\') or (ch = '(') or (ch = ')')) then
    stEncoded := stEncoded + ch
    else if (Ord(ch) <= $07F) then
    stEncoded := stEncoded + hex[Ord(ch)]
    else if (Ord(ch) <= $7FF) then
    begin
    stEncoded := stEncoded + hex[$c0 or (Ord(ch) shr 6)];
    stEncoded := stEncoded + hex[$80 or (Ord(ch) and $3F)];
    end
    else
    begin
    stEncoded := stEncoded + hex[$e0 or (Ord(ch) shr 12)];
    stEncoded := stEncoded + hex[$80 or ((Ord(ch) shr 6) and ($3F))];
    stEncoded := stEncoded + hex[$80 or ((Ord(ch)) and ($3F))];
    end;
    end;
    result := (stEncoded);
    end;

    function tform1.dopost(url:string):string;
    var
    s:string;
    begin
    { exact='https://start.exactonline.nl/api/oauth2/';}
    s:=TIdURI.URLEncode(exact+url);
    result:=idhttp1.post(s,params);
    end;


    procedure TForm1.gettokenClick(Sender: TObject);

    begin
    params.clear;{params is een stringlist}
    Params.Add('grant_type='+urlutf('authorization_cod e'));
    Params.Add('client_id='+urlutf('eb3987e5-9a26-4793-afb1-0cfafd5db5ce'));
    Params.Add('client_secret='+urlutf('DEhMY9G6HsR6') ); {is test app, dus maakt niet uit dat deze bekend wordt}
    Params.Add('redirect_uri='+urlutf('http://localhost:80'));
    Params.Add('code='+urlutf(code));{heb ik opgehaald via httpserver}
    showmessage(dopost('token'));

    end;

  15. #30
    Ik neem aan dat dit niet is wat er echt in je code staat?
    urlutf('authorization_cod e'));

    Want dan staat er dus "authorization_cod e" met een spatie tussen.

    Kun je je code in je post eens wijzigen (of opnieuw posten) tussen [ code ] tags?
    (of met gebruik van de HIGHTLIGHT (HL) knop.)

    En waarom gebruik je eigenlijk een "eigen" functie UrlUTF om te encode en niet gewoon ook die TIdURI.URLEncode?

    Delphi Code:
    1. Params.clear; { params is een stringlist }
    2. Params.Add('grant_type=' + TIdURI.URLEncode('authorization_code'));
    3. Params.Add('client_id=' + TIdURI.URLEncode('eb3987e5-9a26-4793-afb1-0cfafd5db5ce'));
    4. Params.Add('client_secret=' + TIdURI.URLEncode('DEhMY9G6HsR6')); { is test app, dus maakt niet uit dat deze bekend wordt }
    5. Params.Add('redirect_uri=' + TIdURI.URLEncode('http://localhost:80'));
    6. Params.Add('code=' + TIdURI.URLEncode(code)); { heb ik opgehaald via httpserver }
    7. Showmessage(dopost('token'));

    Ooo, wacht... Ik zie dat die URLEncode een protocol nodig heeft.
    (is er geen andere encode in indy?)

    Er is een ParamsEncode (ik weet alleen niet hoe je die moet gebruiken).

Page 2 of 5 FirstFirst 1 2 3 4 ... LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •