Page 2 of 2
Re: consumo de API REST con HMG
Posted: Sun Mar 21, 2021 7:36 pm
by nekbmm
I do not know if it will work because I do not have authorization data, I have no way to check.
I found the Swagger UIhttps://rcrf.trezor.gov.rs/swagger/index.html and what surprised me is that there is a different json structure for the "/ api / invoice / register" function than that given in
https://crf.trezor.gov.rs/docs/user/int ... ceregister
I think these are different versions of the API.
Thank you for your reply. I tried your example and hb_HGetDef() returns empty creationTime, accessToken and refreshToken even though they are
shown in response(attachment).
How can I access these data?
Re: consumo de API REST con HMG
Posted: Sun Mar 21, 2021 9:27 pm
by edk
nekbmm wrote: ↑Sun Mar 21, 2021 7:36 pm
How can I access these data?
Oh, I was expecting a different response (that's how it is, if I don't know Serbian

)
The AccesToken is included in the "payload" key. First, the value of the "payload" key should be read, we should receive another Hash, and from this Hash we read the "accessToken" key.
Check out this code snippet:
Code: Select all
//login
cApiFunction := "/api/login"
//prepare json
hAtributi := { => }
hAtributi ["login"] := "foo"
hAtributi ["password"] := "bar"
strfile (hb_jsonEncode( hAtributi , .F. ), 'login_json.txt')
cResp := SendRestApi( cUrl + cApiFunction, hb_jsonEncode( hAtributi , .F. ), oRestApi )
IF cResp = "!ERROR!"
MsgStop (cResp)
oRestApi := Nil
Quit
ENDIF
IF oRestApi:Status <> 200
MsgStop ( "HTTP status: " + hb_NToS(oRestApi:status) + " " +oRestApi:statusText + CRLF + CRLF + "Response: " + cResp )
ENDIF
hResp := hb_jsonDecode( cResp )
hStatus := hb_HGetDef( hResp , "status", { => } )
msginfo ("Message :" + hb_HGetDef( hStatus , "message", "" ) + CRLF + "Code :" + hb_ValToStr ( hb_HGetDef( hStatus , "code", "" ) ) )
hPayload := hb_HGetDef( hResp , "payload", { => } )
cCreationTime := hb_HGetDef( hPayload , "creationTime", "" )
cAccessToken := hb_HGetDef( hPayload , "accessToken", "" )
cRefreshToken := hb_HGetDef( hPayload , "refreshToken", "" )
msginfo ( "creationTime: " + cCreationTime + CRLF + ;
"accessToken: " + cAccessToken + CRLF + ;
"refreshToken: " + cRefreshToken )
IF Empty ( cAccessToken )
MsgStop ("No accessToken, no authorization !!!")
ENDIF
I am not sure about the authorization yet, according to the description, the accessToken should be sent in the header "Authorization" as
Bearer <accessToken>, while in Swagger it is sent without the word "
Bearer". If the authorization does not work, try changing to:
Code: Select all
oRestApi:setRequestHeader ("Authorization", cAuth)
Re: consumo de API REST con HMG
Posted: Mon Mar 22, 2021 7:05 am
by nekbmm
Thanks edk, it's working now !
Re: consumo de API REST con HMG
Posted: Tue Mar 23, 2021 2:19 am
by edufloriv
Edk it works !! - Thanks a lot mi friend if you visit Perú some day, I will be your guide.
Here is the response:

- respuesta-nubefact.png (56.59 KiB) Viewed 4255 times
Works perfectly !!
Best regards !!
------------------------------------------------------------------------------------------------------------
Edk muchas gracias, funciona. Si visitas algún dia Perú yo seré tu guia, tenlo por seguro.
Esta es la respuesta de la Api-Rest:

- respuesta-nubefact.png (56.59 KiB) Viewed 4255 times
Trabaja perfecto !!
Saludos y un abrazo.
Re: consumo de API REST con HMG
Posted: Tue Mar 23, 2021 10:04 am
by edk
edufloriv wrote: ↑Tue Mar 23, 2021 2:19 am
Si visitas algún dia Perú yo seré tu guia, tenlo por seguro.
Gracias, mi tocayo.
Re: consumo de API REST con HMG
Posted: Tue Sep 21, 2021 2:54 pm
by jparada
Hi,
I am trying to work with Monday API and I'm guiding myself in the example code, it doesn't generate an error, but I don't get any response, I know that the token and query are correct because I have tested them in the Monday live playground and I get the expected results, this is an example of how they perform the request with the VBA language
Code: Select all
Public Pass As Variant
Sub monday()
Dim monday As New MSXML2.ServerXMLHTTP60
Dim response As Variant
Dim status As Variant
Dim query As String
query = " { ""query"" : ""{boards(ids: xxxxx){views{name}}}""} "
With monday
.Open "POST", myurl , False
.SetRequestHeader "Content-Type", "application/json"
.SetRequestHeader "Accept", "application/json"
.SetRequestHeader "Authorization", mytoken
.Send query
response = .ResponseText
status = .status & " | " & .StatusText
MsgBox response
MsgBox status
End With
and this is the code that I am trying
Code: Select all
Function main
Local cUrl := "https://api.monday.com/v2"
Local nTimeOut := 20 // seconds
Local oRestApi
Local cReturn, cResponse
Local cAuth := "TOKEN"
oRestApi := Win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
oRestApi:setTimeouts(nTimeout * 1000 /* nResolve */ , nTimeout * 1000 /* nConnect*/ , nTimeout * 1000 /* nSend */, nTimeout * 1000 /* nReceive */ )
If Empty( oRestApi )
? "Error al inicializar..."
Return NIL
Endif
query = ' { ""query"" : ""{boards(ids: 1673472238){name views{name}}}""} '
BEGIN SEQUENCE WITH { |o| Break(o) }
oRestApi:Open( "POST", cUrl, .F. )
oRestApi:setRequestHeader( "Content-Type", "application/json" )
oRestApi:setRequestHeader( "Accept", "application/json" )
oRestApi:setRequestHeader( "Authorization", cAuth )
oRestApi:Send( query )
? cReturn := hb_jsonDecode( oRestApi:ResponseText() )
? hb_jsonDecode( oRestApi:ResponseBody() )
RECOVER USING oErr
cReturn := "Error!" + hb_eol() + If ( ValType( oErr ) = 'O', oErr:Description, oErr )
END SEQUENCE
oRestApi := NIL
Return
what's wrong with my test?
I appreciate any help
Regards,
Javier
Re: consumo de API REST con HMG
Posted: Wed Sep 22, 2021 2:57 am
by jparada
Hi,
I advanced just a little more just adding
Code: Select all
oRestApi:Send( hb_jsonEncode ( query ) )
I get a 200 code in the request, but I don't get the correct result
doing a test by command line with curl the query should be escaped something like this:
Code: Select all
"{\"query\":\"{ boards (ids: 1673472238){name views{name}}}\"}"
how can i send something like that with harbour, this doesn't work either:
Code: Select all
query := '{"query": "{boards (ids: 1673472238){name views{name}}}"}'
Any idea?
Regards,
Javier
Re: consumo de API REST con HMG
Posted: Wed Sep 22, 2021 2:24 pm
by martingz
Maybe this
#xcommand TEXT TO VAR <var> => #pragma __stream|<var>:=%s
TEXT TO VAR cQuery
"{\"query\":\"{ boards (ids: 1673472238){name views{name}}}\"}"
ENDTEXT
Re: consumo de API REST con HMG
Posted: Thu Sep 23, 2021 3:24 am
by jparada
Hi Martín,
It was my fault because i was sending the query encoded as json, and that's why it sent the malformed query
and no need to escape the characters.
There will be some advantage or disadvantage to make the request with cURL against XMLHttpRequest, just to know...
Regards,
Javier