Ya se resolvio el misterio, La conexión fue realizada y se obtuvo el token
Cesar me sirvió el concepto que pusiste de la cData, encontré que había un signo = luego de un &, que estaba de mas, por ello no te funcionaba
Era :
cData := 'grant_type=client_credentials&=scope=https://api.sunat.gob.pe/v1/contribuyente/contribuyentes&=client_id=123456&=client_secret=xxxxxxx'
y debe de ser :
cData := 'grant_type=client_credentials&scope=https://api.sunat.gob.pe/v1/contribuyente/contribuyentes&client_id=123456&client_secret=xxxxxxx'
Aqui les dejo como quedo la funcion de consulta, que puede ser util cuando "content-type" es -->> "application/x-www-form-urlencoded"
FUNCTION FSUNAT_GET_TOKEN(w_client_id,w_client_secret)
************************************************************************************************************ SOLUCIONADO
*FUNCION PARA OBTENER EL TOKEN QUE SE USARA EN UNA CONSULTA A LA SUNAT - PERU
*FECHA 20/03/2022
******************************************************************************
** RUTINA QUE LLEVA EL USUARIO Y LA CLAVE LINEA ABAJO ***
LOCAL oDoc
LOCAL ohttp
LOCAL cUrl:=""
LOCAL XRespuesta:=""
LOCAL aHasRes
LOCAL W_Token
LOCAL W_TipoToken
LOCAL W_TimeExpire
local w_send
* carga directa de los datos pra probaar (DATOS DE PRUEBA SOLO VALIDO HASTA 22/03/2022)
w_client_id="0319813d-f7c8-43fc-bda6-4317b225d3de"
w_client_secret="t8xujQF0yWLYmbp904iYZw=="
cUrl :="https://api-seguridad.sunat.gob.pe/v1/clientesextranet/"+w_client_id+"/oauth2/token/"
ohttp := CreateObject( "MSXML2.XMLHTTP" )
ohttp:Open( "POST" ,cUrl,.F.)
ohttp:SetRequestHeader("content-type" , "application/x-www-form-urlencoded" )
*Se prepara la consulta del W_SEND de los pares de datos "Campo1=Valor&Campo2=Valor2&Campo3&Valor3....."
w_send := "grant_type=client_credentials&scope=https://api.sunat.gob.pe/v1/contribuyente/contribuyentes&client_id="+ w_client_id +"&client_secret="+w_client_secret
TRY
ohttp:Send(w_send) && ohttp:Send(enviar)
CATCH
msginfo("No Se pudo Enviar solicitud de token","Intente Nuevamente")
return XRespuesta
END
XRespuesta:=ohttp:responseText
msginfo(XRespuesta,"esto respnde ... ")
IF "ERROR"$ UPPER(XRespuesta)
MSGINFO(XRespuesta,"RESPUESTA CON ERROR ")
return ""
ENDIF
** lEEMOS LA RESPUESTA
aHasRes := hash()
hb_jsondecode(XRespuesta ,@aHasRes) //Parse JSON to hash
W_Token := aHasRes["access_token"]
W_TipoToken := aHasRes["token_type"]
W_TimeExpire:= aHasRes["expires_in"]
MSGINFO(W_Token , valtype(W_Token ))
MSGINFO(W_TipoToken , valtype(W_TipoToken ))
MSGINFO(W_TimeExpire, valtype(W_TimeExpire))
*Retornamos el Tokek
RETURN W_Token
Hola Lubin
Estoy liado con el tema de las GRE, y veo que publicas esta funcion para obtener el token de sunat con las credenciales, excelente. obtengo el token con el PostMan pero desde la funcion obtengo un error 400 Bat Request, en esa funcion no va el usuario y clave sol?
Ya se resolvio el misterio, La conexión fue realizada y se obtuvo el token
Cesar me sirvió el concepto que pusiste de la cData, encontré que había un signo = luego de un &, que estaba de mas, por ello no te funcionaba
Era :
cData := 'grant_type=client_credentials&=scope=https://api.sunat.gob.pe/v1/contribuyente/contribuyentes&=client_id=123456&=client_secret=xxxxxxx'
y debe de ser :
cData := 'grant_type=client_credentials&scope=https://api.sunat.gob.pe/v1/contribuyente/contribuyentes&client_id=123456&client_secret=xxxxxxx'
Aqui les dejo como quedo la funcion de consulta, que puede ser util cuando "content-type" es -->> "application/x-www-form-urlencoded"
FUNCTION FSUNAT_GET_TOKEN(w_client_id,w_client_secret)
************************************************************************************************************ SOLUCIONADO
*FUNCION PARA OBTENER EL TOKEN QUE SE USARA EN UNA CONSULTA A LA SUNAT - PERU
*FECHA 20/03/2022
******************************************************************************
** RUTINA QUE LLEVA EL USUARIO Y LA CLAVE LINEA ABAJO ***
LOCAL oDoc
LOCAL ohttp
LOCAL cUrl:=""
LOCAL XRespuesta:=""
LOCAL aHasRes
LOCAL W_Token
LOCAL W_TipoToken
LOCAL W_TimeExpire
local w_send
* carga directa de los datos pra probaar (DATOS DE PRUEBA SOLO VALIDO HASTA 22/03/2022)
w_client_id="0319813d-f7c8-43fc-bda6-4317b225d3de"
w_client_secret="t8xujQF0yWLYmbp904iYZw=="
cUrl :="https://api-seguridad.sunat.gob.pe/v1/clientesextranet/"+w_client_id+"/oauth2/token/"
ohttp := CreateObject( "MSXML2.XMLHTTP" )
ohttp:Open( "POST" ,cUrl,.F.)
ohttp:SetRequestHeader("content-type" , "application/x-www-form-urlencoded" )
*Se prepara la consulta del W_SEND de los pares de datos "Campo1=Valor&Campo2=Valor2&Campo3&Valor3....."
w_send := "grant_type=client_credentials&scope=https://api.sunat.gob.pe/v1/contribuyente/contribuyentes&client_id="+ w_client_id +"&client_secret="+w_client_secret
TRY
ohttp:Send(w_send) && ohttp:Send(enviar)
CATCH
msginfo("No Se pudo Enviar solicitud de token","Intente Nuevamente")
return XRespuesta
END
XRespuesta:=ohttp:responseText
msginfo(XRespuesta,"esto respnde ... ")
IF "ERROR"$ UPPER(XRespuesta)
MSGINFO(XRespuesta,"RESPUESTA CON ERROR ")
return ""
ENDIF
** lEEMOS LA RESPUESTA
aHasRes := hash()
hb_jsondecode(XRespuesta ,@aHasRes) //Parse JSON to hash
W_Token := aHasRes["access_token"]
W_TipoToken := aHasRes["token_type"]
W_TimeExpire:= aHasRes["expires_in"]
MSGINFO(W_Token , valtype(W_Token ))
MSGINFO(W_TipoToken , valtype(W_TipoToken ))
MSGINFO(W_TimeExpire, valtype(W_TimeExpire))
*Retornamos el Tokek
RETURN W_Token
Hola Lubin
Estoy liado con el tema de las GRE, y veo que publicas esta funcion para obtener el token de sunat con las credenciales, excelente. obtengo el token con el PostMan pero desde la funcion obtengo un error 400 Bat Request, en esa funcion no va el usuario y clave sol?
Revisa Client_secret debe tener algun caracter especial que si envias directo por tu sistema el post no lo reconozca por lo que tienes que codificarlo el postman ya lo convierte en automativo, en el mismo postman te ubicas en el Client_secret y le das click derecho y seleccionas Encode URL y veras que _ especiales lo cambia copias esa cadena cambiada (nuevo client_secret) y lo usas en tu aplicacion.
Espero sea de utilidad
Me emocioné, hice lo que me indicas con "client_secret" en el postman, cambiaron _, use la cadena y ahora me sale: "cliente no autorizado", es el único campo que cambiar?, y las credenciales USUARIO Y CLAVE SOL no intervienen en esta solicitud del TOKEN?