Page 1 of 1

Re: Una envio con Post SOLUCIONADO

Posted: Fri Jun 16, 2023 1:20 am
by LuisPonce
lubin wrote:Estimados Karina y Cesar

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"

Gracias a todos
Lubin

Code: Select all | Expand


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?

Re: Una envio con Post SOLUCIONADO

Posted: Fri Jun 16, 2023 4:22 am
by cjcardoza
LuisPonce wrote:
lubin wrote:Estimados Karina y Cesar

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"

Gracias a todos
Lubin

Code: Select all | Expand


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

Re: Una envio con Post ** SOLUCIONADO **

Posted: Fri Jun 16, 2023 6:07 pm
by LuisPonce
Gracias por responder

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?

En la cabecera del Postman señala la URL: https://api-seguridad.sunat.gob.pe/v1/c ... th2/token/
En vez de 'https://api-seguridad.sunat.gob.pe/v1/c ... th2/token/' que indica el ejemplo de Lubin.

En el 1er. URL me responde: "No Se pudo Enviar solicitud de token"
y con el 2do. URL : "cliente no autorizado"

No veo que haya otra URL publicada por sunat