Solicitudu POST

773 views
Skip to first unread message

Alejandro Jorge Falca

unread,
Sep 9, 2021, 11:43:41 AM9/9/21
to publice...@googlegroups.com
Buen día grupo, estoy empezando a incursionar en este tema, me solicitan hacer una comunicación a una API que me devolverá datos necesarios para mi institución, no tengo idea de como hacerlo, pero tratare de ser lo mas claro posible:
me asignaron un client_id u un client_secret, con esto debo solicitar un token por medio de una solicitud POST con valor client_credentials, buscando y revisando hice esto:

#define lcURL_WSDL "xxxxxxxx"
LOCAL lcMiSolicitud, lcSuRespuesta, lcRespuestaWS, loHTTP

client_id = 'xxXXXXxxxXxXXxxXxxxxxxxxxxxxxxxxxxxxxxxx'
client_secret = 'zxzxZXZXzxzxzxzxzxzxzxzxzzxXZfxFXzYXZyxIYZXiyzx'

lcMiSolicitud = "client_credential"
lcSuRespuesta = "MiArchivo.XML"     && La respuesta recibida convertida en un archivo .XML
 
loHTTP = CreateObject("Msxml2.ServerXMLHTTP.6.0")     && conexión por HTTP
*loHTTP.open("POST",lcURL_WSDL,"client_credentials",client_id,client_secret)

WITH loHTTP
  .OPEN("POST",lcURL_WSDL,client_id,client_secret,"client_credentials")
*!*  .setRequestHeader("User-Agent", "client_credentials")
*!*  .setRequestHeader("Content-Type", "text/xml;charset=utf-8")
  *--- Se envía la solicitud al Servidor
  .SEND(lcMiSolicitud)
ENDWITH

*--- Si la propiedad Status es 200 entonces está todo ok, si es cualquier otro número entonces ocurrió algún error
IF loHTTP.STATUS = 200 THEN
  lcRespuestaWS = loHTTP.responseText
  *--- Se genera un archivo con formato XML de la respuesta obtenida
  =StrToFile(StrConv(lcRespuestaWS, 9), lcSuRespuesta)     && 9: Convierte doble-bytes caracteres a UTF-8
ENDIF

y la respuesta es siempre 400 en loHTTPSTATUS
en el instructivo que me pasaron indican lo siguiente:
curl --location --request POST 'https://..........................' \ --form 'client_id="CLIENT_ID"' \ --form 'cliente_secret="CLIENT_SECRET"' \ --form 'grant_type="client_credentials"'

el tema es que no lo quiero hacer con curl sino desde el mismo VFP.

Alguien me podrá orientar para seguir investigando? Desde ya muchas gracias
--
Alejandro J. Falca
S.F.V. de Catamarca
(4700) Catamarca
+54-0383-154512079


HernanCano

unread,
Sep 9, 2021, 1:47:52 PM9/9/21
to Comunidad de Visual Foxpro en Español
Debes verificar con quien te dio las credenciales, por que --de acuerdo a la documentación general-- está utilizando incorrectamente el servicio web.

Probablemente estás indicando incorrectamente los datos para autenticarte (client_id, client_secret, client_credentials; normalmente son sólo las dos primeras, pero pueden ser las tres) o tal vez estás escribiendo mal la URL (lcURL_WSDL)....

Veo que la característica client_credential está involucrada en dos partes, lo cual me hace concluir que efectivamente estás ejecutando mal la info que se te dió (sobre cómo usar el servicio web).

Para más info (que te podamos ayudar) se necesitaría la documentación del servicio web en cuestión.

borrable9.png

Luis Maria Guayan

unread,
Sep 11, 2021, 6:21:51 PM9/11/21
to Comunidad de Visual Foxpro en Español
No muestras como armas el URL que pasaras a la función OPEN, debería ser algo similar a esto:

lcURL = [https://misitio.com.ar/api/oauth/token?grant_type=client_credentials&client_id=] + client_id  + [&client_secret=] + client_secret 

Con esto obtendrás tu TOKEN que lo vas a utilizar en la próxima llamada para traer tus datos. Ej:

lcURL = [https://misitio.com.ar/api/oauth/access_token?]  + lcToken  + <<lo que te dio tu proveedor de la api>>


Luis María Guayán
Tucumán, Argentina
_______________________________
Comunidad Visual FoxPro en Español
http://comunidadvfp.blogspot.com

Alejandro Jorge Falca

unread,
Sep 13, 2021, 8:45:46 AM9/13/21
to publice...@googlegroups.com
Buen dia, gracias por vuestras respuestas, utilizando la estructura del Maestro Luis Maria, ahora la respuesta es status 500 (Internal Server Error) El Servidor ha encontrado una situación que no sabe cómo manejarla.

cURL = [https://api-intranet.catamarca.gob.ar/oauth2/token/?grant_type=client_credentials&client_id=]+cli_iden+[&client_secret=]+cli_secr

loxmlhttp.OPEN("POST", curl)
loxmlhttp.setrequestheader("Content-Type", "application/json")
loXmlHttp.Send()
IF loxmlhttp.STATUS = 200
RETURN loxmlhttp.responsetext
ELSE
RETURN loxmlhttp.STatus
ENDIF

me podrán indicar que estoy haciendo mal o que me falta, de parte de los administradores de la api me pasaron esto..


Se debe enviar una solicitud POST a la url: https://XXXXXXXXXXXXXXXXXXXX/oauth2/token/
 y en el cuerpo de la solicitud enviar los siguientes datos: client_id, client_secret y
grant_type con el valor “client_credentials”.

curl --location --request POST
'https://api-intranet.catamarca.gob.ar/oauth2/token/' \ --form
'client_id="CLIENT_ID"' \ --form 'client_secret="CLIENT_SECRET"' \ --form
'grant_type="client_credentials"'



--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/1f589e11-bcc2-489a-a691-3dce1de1ee20n%40googlegroups.com.

HernanCano

unread,
Sep 13, 2021, 2:09:36 PM9/13/21
to Comunidad de Visual Foxpro en Español
Debes ejecutar la solicitud (o sea el request) en la forma en que te dice la documentación:

>>> ... y en el cuerpo de la solicitud enviar los siguientes datos:...

Por lo tanto estás ejecutando mal; debiera ser algo así:

(¿sabes de dónde salen los datos que puse en amarillo? Si no, entonces, apague y vámonos...)

local M.CLI_IDEN, M.CLI_SECR
M.CLI_IDEN = "Identificacion-del-Cliente-que-da-el-portal"
M.CLI_SECR = "Dato-secreto-del-Cliente-que-da-el-portal"

text to M.cCuerpo noshow pretext 15

{
  "grant_type"   : "client_credentials"
  "client_id"    : <<M.CLI_IDEN>>
  "client_secret": <<M.CLI_SECR>>
}

endtext


loxmlhttp.OPEN("POST", M.cURL)
loxmlhttp.setrequestheader("Content-Type", "application/json")
loXmlHttp.Send(M.cCuerpo)
IF loxmlhttp.STATUS = 200
   RETURN loxmlhttp.responsetext
ELSE
   RETURN loxmlhttp.STatus
ENDIF

**

Verifica y nos cuentas.

Alejandro Jorge Falca

unread,
Sep 13, 2021, 3:56:22 PM9/13/21
to publice...@googlegroups.com
Hernan, gracias por responder, soy un neofito total en estas cuestiones, voy a probar con lo que me indicas y te cuento, por cierto si tengo el Clien_Id y el Client_Secret, desde ya muchas gracias...

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Alejandro Jorge Falca

unread,
Sep 13, 2021, 4:34:09 PM9/13/21
to publice...@googlegroups.com
Hola, hernan probe con lo que me indicas, me sigue respondiendo STATUS 400, no se por donde seguir...

LOCAL M.CLI_IDEN, M.CLI_SECR

PUBLIC loxmlhttp AS "MSXML2.ServerXMLHTTP.6.0"
loxmlhttp = CREATEOBJECT("MSXML2.XMLHTTP")

m.CLI_IDEN = "......."
m.CLI_SECR = "......"
SET TEXTMERGE on

TEXT to M.cCuerpo noshow pretext 15


{
  "grant_type"   : "client_credentials"
  "client_id"    : <<M.CLI_IDEN>>
  "client_secret": <<M.CLI_SECR>>
}

ENDTEXT


loxmlhttp.OPEN("POST", M.cURL)
loxmlhttp.setrequestheader("Content-Type", "application/json")
loxmlhttp.SEND(M.cCuerpo)

IF loxmlhttp.STATUS = 200
RETURN loxmlhttp.responsetext
ELSE
RETURN loxmlhttp.STATUS
ENDIF

Alejandro Jorge Falca

unread,
Sep 13, 2021, 4:40:13 PM9/13/21
to publice...@googlegroups.com
Hernan te comento que hay un detalle del error que lo adjunto


Sin título.png

HernanCano

unread,
Sep 13, 2021, 4:52:15 PM9/13/21
to Comunidad de Visual Foxpro en Español
En lo que yo te puse, en la generación del JSON, cambia:

text to M.cCuerpo noshow pretext 15

por 

text to M.cCuerpo noshow textmerge pretext 15

{
  "grant_type": "client_credentials",
  "client_id": "<<M.CLI_IDEN>>",
  "client_secret": "<<M.CLI_SECR>>"
}

endtext

Y verifica si "grant_type": "client_credentials" está bien escrito.

NOTA: ORIGINALMENTE ME FALTARON VARIAS COMILLAS Y COMAS. Y también quité unos espacios.
VERIFICA....

Alejandro Jorge Falca

unread,
Sep 14, 2021, 11:18:24 AM9/14/21
to publice...@googlegroups.com
Hola Hernan, buen dia, te comento que baje e instale postman y por medio de este pude realizar autorización y obtener el Token. El tema es que el Body del request debe ser de tipo x-www-form-urlencoded, como se veria el formato de un Body asi?
y luego con el TOKEN se envía un GET como QueryParams ...te adjunto imagenes de ambos porque todas las pruebas que hice para obtener el Body ese no me dieron resultado..

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Postman1.png
TraeDatos.png

Alejandro Jorge Falca

unread,
Sep 14, 2021, 11:23:10 AM9/14/21
to publice...@googlegroups.com
perdon, la primera imagen esta mal, no es la que corresponde...
PideToken.png

Paulo

unread,
Sep 14, 2021, 5:16:49 PM9/14/21
to publice...@googlegroups.com

HernanCano

unread,
Sep 14, 2021, 6:41:04 PM9/14/21
to Comunidad de Visual Foxpro en Español
Intenta cambiando application/json por  x-www-form-urlencoded (o tal vez sólo json por x-www-form-urlencoded).

Alejandro Jorge Falca

unread,
Sep 14, 2021, 6:41:25 PM9/14/21
to publice...@googlegroups.com
gracias Paulo, pero tiene que ser en formato x-www-form-urlencoded no json, con postaman lo puedo acceder y me devuelve el token, pero desde vfp no hallo la manera de armar el body del request (send()) porque siempre me devuelve STATUS 400 
"{"error": "unsupported_grant_type"}".
En postman el body es :
client_secret:HtnRfUQZq6NzprsDzC5xGy5vhNIHFMZuaw
client_id:bnDFJL954vV9zI6K6KDo2c7Gj
grant_type:client_credentials

ya probe con TEXT TO.....ENDTEXT,
con _body = "......"
y no hay caso


HernanCano

unread,
Sep 14, 2021, 6:42:57 PM9/14/21
to Comunidad de Visual Foxpro en Español
Debes aprender desde ahora que no debes pasar datos como claves por estos foros. Está bien que necesites ayuda, pero no poner las claves.

HernanCano

unread,
Sep 14, 2021, 6:46:56 PM9/14/21
to Comunidad de Visual Foxpro en Español
Pues el grant_type te lo estamos escribiendo como nos dijiste en el curl. Eres tú quien debe verificar si el grant_type está bien escrito....
Aunque probablemente lo q falte es el  x-www-form-urlencoded.... 

Alejandro Jorge Falca

unread,
Sep 14, 2021, 7:37:59 PM9/14/21
to publice...@googlegroups.com
Hola todos, si Hernan, tienes razón, no debo pasar claves por aquí, estoy tan mareado de realizar cambios que se me pasó ese detalle. Realice la pruebas con Postman y con x-www-form-urlencoded y los datos, funciona y me devuelve el token, pero cuando lo quiero hacer desde VFP, controlando la escritura el grant_type:client_credentials y demás siempre me devuelve STAUS 400

El mar, 14 sept 2021 a las 19:47, HernanCano (<jherna...@gmail.com>) escribió:
Pues el grant_type te lo estamos escribiendo como nos dijiste en el curl. Eres tú quien debe verificar si el grant_type está bien escrito....
Aunque probablemente lo q falte es el  x-www-form-urlencoded.... 

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

Paulo

unread,
Sep 14, 2021, 8:00:53 PM9/14/21
to publice...@googlegroups.com

boa noite

esta chaves que enviei antes eram inválidas. Agora mesmo com x-www-form-urlencoded

me retorna  .

image.png

Hendell Mora

unread,
Sep 14, 2021, 8:21:27 PM9/14/21
to publice...@googlegroups.com
********************************************************************************************
*** This method gets the access token by sending the access code                         ***
********************************************************************************************


oServerRequest=this.create_winhttprequest()

*!*	'client_id' // your API Key
*!*	'client_secret' // your API Secret
*!*	'scope' // this should say CompanyFile
*!*	'code' // the Access Code you just got
*!*	'redirect_uri' // your redirect URL
*!*	'grant_type' // this should say authorization_code

lcCode = this.codereturned

SELECT MYOB_System

lcURL = ALLTRIM(post_url)
lcRedirectURI = ALLTRIM(Redirect_URI)
lcRedirectURL = ALLTRIM(Redirect_URL)
lcApi=ALLTRIM(apikey)
lcScope = 'CompanyFile'
lcSecret = ALLTRIM(secretkey)
lcGrant_type='authorization_code'
lcHeader = "application/x-www-form-urlencoded" 

lcData = 'code=' + lcCode + '&redirect_uri=' + lcRedirectURI + '&client_id=' + lcApi + '&scope=' + lcScope + '&client_secret=' + lcSecret + '&grant_type=' + lcGrant_type


&& Get Response
lcFail=.f.
TRY 
	oServerRequest.Open("POST",lcURL, .f.)
	oServerRequest.SetRequestHeader('Content-Type',lcHeader) 
	oServerRequest.Send(lcData)
	lcResponseText  = "" + oServerRequest.ResponseText
CATCH 
	lcFail=.t.
ENDTRY 

IF lcFail=.t.
	MESSAGEBOX("There was some kind of error sending the request to the server. Please check the connection or settings")
	RETURN 
ENDIF 

Alejandro Jorge Falca

unread,
Sep 14, 2021, 8:41:43 PM9/14/21
to publice...@googlegroups.com
Paulo, esas claves no eran mias...
Hendell Mora, que se supone que haces en [oServerRequest=this.create_winhttprequest()] ?

Hendell Mora

unread,
Sep 14, 2021, 9:26:46 PM9/14/21
to publice...@googlegroups.com
puedes cambiar esa lìnea por esta

LOCAL ServerRequest AS WinHttp.WinHttpRequest
oServerRequest = CREATEOBJECT("WinHttp.WinHttpRequest.5.1")


HernanCano

unread,
Sep 14, 2021, 10:17:14 PM9/14/21
to Comunidad de Visual Foxpro en Español
Bueno.... Parece que tenemos tres personas realizando el mismo procedimiento.. aunque probablemente con prov tecnológico diferente....

Alejandro Falca
Phph26
Hendell Mora

Por lo que veo, a Phph26 le sale el error "Falta el parámetro grant_type".... Lo extraño es que no falta: sí está en el cuerpo del JSON. Probablemente deba estar codificado en la URL..... Se requiere ver la documentación......

A Alejandro le sale repetitivamente "Status 400"... Se necesita más info, ¿cuál es la respuesta completa? además de status 400 qué más hay?

Y parece que Hendell ya envía y recibe (sin problemas... lo supongo pues no dice nada, y creo que lo que desea es aportarle a Alejandro).
Pero se observa que el cuerpo del mensaje no se envía en formato JSON, sino de una forma que perece ser como si fuera a ser codificado en la URL.....

Supongo --por la intervención de Hendell-- que Alejandro debe usar un cuerpo de mensaje similar a como Hendell tiene la vble lcData,... pero ojo-- ésto es un supuesto.. pues la respuesta que nos dice Alejandro no tiene suficiente info, y Hendell no dá mucha info.....

¿Será que también Alejandro debiera cambiar el grant_type a authorization_code????????????????????????? Probablemente no.. por que Alejandro nos dijo ya algo sobre éso (en la doc que mencionó sobre Curl dice client_credentials........ pero nunca se sabe....

HernanCano

unread,
Sep 14, 2021, 10:29:31 PM9/14/21
to Comunidad de Visual Foxpro en Español
Alejandro:
En esta imagen (que nos pusiste tú) dice que el grant_type es no-soportado, por lo tanto la documentación que nos pusiste en el primer mensaje (donde se menciona el comando CURL) no corresponde.

Por lo tanto debes confirmar con quien te envió ese dato (el del CURL).
borrable1.png

Hendell Mora

unread,
Sep 14, 2021, 11:01:15 PM9/14/21
to publice...@googlegroups.com
Hernan. El problema es que yo no tengo la información técnica del consumo del Api o del WS. Por consiguiente solo puedo dar el aporte de una forma en que se puede enviar. Sería literalmente imposible darle el código de envío a dicho api sin tener la información del consumo. 
Ahora bien, sería cuestión que tome las opciones de los diferentes aportes y los pruebe. 
Igualmente si con curl funciona no veo problema alguno para usarlo. Igual es solo un punto de vista. 


--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.

HernanCano

unread,
Sep 15, 2021, 1:37:08 AM9/15/21
to Comunidad de Visual Foxpro en Español
>>> ...  sin tener la información del consumo. 

Exactamente. 
Si no se conoce la documentación de la API del servicio web que está usando es muy difícil de ayudarle.

Alejandro Jorge Falca

unread,
Sep 15, 2021, 10:27:04 AM9/15/21
to publice...@googlegroups.com
Agradezco a todos los aportes, el tema es que por información de la gente del sitio, quienes desarrollaron la api, me dicen que tengo que mandar el request con header  x-www-form-urlencoded y tan es asi que utilizando Postman logro hacer la conexión y obtengo el Token, con el que posteriormente con un GET recibo un Json con la info solicitada. El tema es que lo mismo desde VFP me da constantemente STATUS 400 unsupported_grant_type...

adjunto imagenes de por medio de Postman la solicitud POST y GET...y del modulo VFP

--
Blog de la Comunidad Visual FoxPro en Español: http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
PideTokenPostman.png
TraeInfoConTokenPostman.png
solicitudPostVFP.png
SolicitudPOSTVFPprg.png

Alejandro Jorge Falca

unread,
Sep 15, 2021, 5:22:22 PM9/15/21
to publice...@googlegroups.com
Hola Hendell, que es en tu codigo :

'code' // the Access Code you just got ?
'redirect_uri' // your redirect URL ?
a mi me pasaron el apikey (client_id) y el secretkey (client_secret) ademas me pasaron el url a donde debo enviar el POST con grant_type:client_credentials pero los demas campos que mencionas no se de donde sacarlos...desde ya muchas gracias

Alejandro Jorge Falca

unread,
Sep 15, 2021, 5:24:55 PM9/15/21
to publice...@googlegroups.com
Hendell, Hernan, esto es lo que me pasaron como documentación de la API...
Doc-API.pdf

Hendell Mora

unread,
Sep 15, 2021, 7:20:43 PM9/15/21
to publice...@googlegroups.com
Ok son dos pasos
1 Obtener el token (Post)
2 Realizar la Consulta (GET) con los parámetros en la URL incluido el token 

cService = '/oauth2/token'
cUser = 'usuario que te asignaron'
cPassword = 'contraseña que te asignaron'
cURL= 'https://api-intranet.catamarca.gob.ar'


cURL = cURL +cService
sp = CHR(13)+CHR(10)
TRY
oHTTP = CreateObject("Microsoft.XMLHTTP")
WITH oHTTP
.open ("POST", cURL, .F.)
.setRequestHeader ('user', cUser)
.setRequestHeader ('password', cPassword)
ENDWITH
oHTTP.Send()
Token = oHTTP.responseText

CATCH TO oErr
_token= "Error, sucedio un problema en la función Token" + sp + sp + ;
"[ Error: ] " + STR(oErr.ErrorNo) + sp + ;
"[ LineNo: ] " + STR(oErr.LineNo) + sp + ;
"[ Message: ] " + oErr.Message + sp + ;
"[ Procedure: ] " + oErr.Procedure + sp + ;
"[ Details: ] " + oErr.Details + sp + ;
"[ StackLevel: ] " + STR(oErr.StackLevel) + sp + ;
"[ LineContents: ] " + oErr.LineContents
ENDTRY


  Aqui deberias tener el token en un json, debes convertirlo para poder enviarlo en la url para poder hacer la consulta 




Alejandro Jorge Falca

unread,
Sep 15, 2021, 7:25:11 PM9/15/21
to publice...@googlegroups.com
Gracias por responder Hendell, ahora pruebo y te comento...

Hendell Mora

unread,
Sep 15, 2021, 7:29:36 PM9/15/21
to publice...@googlegroups.com
La Consulta seria algo asi 

FUNCTION Consulta(cToken, cURL,cEmpleado)
cServicio = '/api/v1/public-employee/'
sURL = cURL + cServicio + cEmpleado
sp = CHR(13)+CHR(10)
TRY
oHTTP = CreateObject("Microsoft.XMLHTTP")
WITH oHTTP
.open ("GET", sUrl, .F.)
.setRequestHeader ('Authorization', 'bearer '+ cToken)
.setRequestHeader ('Content-Type', 'application/json')
ENDWITH
oHTTP.send()
_Consulta = oHTTP.responseText
CATCH TO oErr
_Consulta = "Error, sucedio un problema en la función Consulta" + sp + sp + ;
"[ Error: ] " + STR(oErr.ErrorNo) + sp + ;
"[ LineNo: ] " + STR(oErr.LineNo) + sp + ;
"[ Message: ] " + oErr.Message + sp + ;
"[ Procedure: ] " + oErr.Procedure + sp + ;
"[ Details: ] " + oErr.Details + sp + ;
"[ StackLevel: ] " + STR(oErr.StackLevel) + sp + ;
"[ LineContents: ] " + oErr.LineContents
ENDTRY
RETURN _Consulta

Hendell Mora

unread,
Sep 15, 2021, 7:36:19 PM9/15/21
to publice...@googlegroups.com
Este es otro
Ok son dos pasos

1 Primero debes obtener el token en un evento post 

LOCAL lcURL, lcResponseData
LOCAL lcAsyncMode, lcUser, lcPassword
LOCAL lcClient_ID, lcClient_Secret
LOCAL loHttp
lcAsyncMode = .F.
lcUser = ""
lcPassword = ""

lcClient_ID = " El id del Cliente que te dieron"
lcClient_Secret = " La Contraseña que te dieron "

loHttp = CREATEOBJECT("Microsoft.XMLHTTP")
loHttp.Open("post", lcURL, lcAsyncMode, lcUser, lcPassword )
looHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
loHttp.send([code=]+This.AuthorizationCode+[&client_id=]+lcClient_ID+[&client_secret=]+lcClient_Secret+[&grant_type=authorization_code] )
lcResponseData = loHttp.responseText

  Aqui deberias tener el token en un json, debes convertirlo para poder enviarlo en la url para poder hacer la consulta 


2 una vez que tienes el token haces la consulta en un evento get 

que seria algo asi

Hendell Mora

unread,
Sep 15, 2021, 7:37:26 PM9/15/21
to publice...@googlegroups.com
Prueba a ver cual te sirve para generar el token. Después vamos viendo la consulta

Alejandro Jorge Falca

unread,
Sep 15, 2021, 7:39:43 PM9/15/21
to publice...@googlegroups.com
Hendell, tenia esperanzas GRANDES, pero....
Hendell.png

Alejandro Jorge Falca

unread,
Sep 15, 2021, 7:41:59 PM9/15/21
to publice...@googlegroups.com
ok, en la segunda propuesta, this.AutorizationCode dw donde lo sacas?

Hendell Mora

unread,
Sep 15, 2021, 7:52:16 PM9/15/21
to publice...@googlegroups.com
es  una propiedad del formulario donde corro el envio al api y guardo el dato devuelto 
puedes cambiarlo por una variable

Alejandro Jorge Falca

unread,
Sep 15, 2021, 7:58:14 PM9/15/21
to publice...@googlegroups.com
pero ese code debe tener algun valor o puede ser vacio cvariable="" ?

Alejandro Jorge Falca

unread,
Sep 15, 2021, 8:05:20 PM9/15/21
to publice...@googlegroups.com
HENDELLLLLLL, SALIOOOOOOO pero asi

lohttp = CREATEOBJECT("Microsoft.XMLHTTP")
lohttp.OPEN("post", lcurl, lcasyncmode, lcclient_id, lcclient_secret)
lohttp.setrequestheader('Content-Type', 'application/x-www-form-urlencoded')
lohttp.SEND([code=]+''+[&client_id=]+lcclient_id+[&client_secret=]+lcclient_secret+[&grant_type=client_credentials])
lcresponsedata = lohttp.responsetext

SIIIIIIII

Hendell Mora

unread,
Sep 15, 2021, 8:11:48 PM9/15/21
to publice...@googlegroups.com
Ok. Por eso te decía puedes usar una variable y la mandas en vacía 

Alejandro Jorge Falca

unread,
Sep 15, 2021, 8:30:31 PM9/15/21
to publice...@googlegroups.com
Muchas gracias, ahora pruebo el GET, mañana te molesto si no consigo obtener la info, MUCHAS GRACIAS...

Message has been deleted

Paulo

unread,
Sep 15, 2021, 9:17:09 PM9/15/21
to Comunidad de Visual Foxpro en Español
Boa noite  

nome  caso  preciso passar no header o Authorization e content-type, no  encoded grant_type=client_credentials



LOCAL lcURL, lcResponseData
LOCAL lcAsyncMode, lcUser, lcPassword
LOCAL lcClient_ID, lcClient_Secret
LOCAL loHttp
lcAsyncMode = .F.
lcUser = ""
lcPassword = ""

lcClient_ID = ""
lcClient_Secret = ""
               cBase64= STRCONV(lcClient_ID+lcClient_Secret,13)
loHttp = CREATEOBJECT("Microsoft.XMLHTTP")
loHttp.Open("post", lcURL, lcAsyncMode, lcClient_ID, lcClient_Secret)
loHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
loHttp.setRequestHeader('Authorization', 'Basic ' +cBase64)
loHttp.send([code=]+''+[&client_id=]+lcClient_ID+[&client_secret=]+lcClient_Secret+[&grant_type=client_credentials] )
lcResponseData = loHttp.responseText


recebo o erro ? invalid client_id in Authorization header

Alejandro Jorge Falca

unread,
Sep 15, 2021, 9:20:41 PM9/15/21
to publice...@googlegroups.com
Paulo, proba con eliminar esta linea

loHttp.setRequestHeader('Authorization', 'Basic ' +cBase64)

Paulo

unread,
Sep 15, 2021, 9:33:04 PM9/15/21
to publice...@googlegroups.com

retirei  a linha  loHttp.setRequestHeader('Authorization', 'Basic ' +cBase64)
o retorno

missing  Authorization header

Hendell Mora

unread,
Sep 16, 2021, 1:55:05 PM9/16/21
to publice...@googlegroups.com
CUIL_EMPLEADO = 'numero cuil a consultar'
cTOKEN = 'token obtenido en el paso anterior'
lcURL = "https://api-intranet.catamarca.gob.ar/api/v1/public-employee/"+"?tax-id = CUIL-EMPLEADO&version=2"
lcURL = lcURL + "?access_token="+cTOKEN
lcAsyncMode = .F.
lcUser = ""
lcPassword = ""
xhr = CREATEOBJECT("Microsoft.XMLHTTP")
xhr.Open("get", lcURL, lcAsyncMode, lcUser, lcPassword )
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.send()
lcResponseData = xhr.responseText
xhr = null
lcResponseData = STRTRAN( lcResponseData, [\"] , "" )
? lcResponseData

Debería funcionar sin mucho más

Consulta de Empleado

Hendell

Alejandro Jorge Falca

unread,
Sep 16, 2021, 5:43:51 PM9/16/21
to publice...@googlegroups.com
Gracias Hendell, ya lo hice andar esta mañana, muchas gracias por tu soporte...


Reply all
Reply to author
Forward
0 new messages