Una envio con Post ** SOLUCIONADO **

Post Reply
User avatar
LuisPonce
Posts: 195
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU
Contact:

Re: Una envio con Post SOLUCIONADO

Post 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?
cjcardoza
Posts: 37
Joined: Thu Jul 13, 2006 12:20 am
Location: Lima - Peru

Re: Una envio con Post SOLUCIONADO

Post 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
User avatar
LuisPonce
Posts: 195
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU
Contact:

Re: Una envio con Post ** SOLUCIONADO **

Post 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
Luis Ponce
Post Reply