Una envio con Post ** SOLUCIONADO **

Post Reply
User avatar
lubin
Posts: 451
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Una envio con Post ** SOLUCIONADO **

Post by lubin »

Buenas tardes colegas de la Vida

Debo obtener un token desde una petición tipo POST una API de la SUNAT - Perú

Para esto nos dan los siguientes datos:

el ID_cliente ="xxxxxxmxmxmxmxm"
CLAVE_Cliente = "zxzxzxzxzxzxzxzxzx"

y Se deberá acceder a la siguiente URL
-->> https://api-seguridad.sunat.gob.pe/v1/clientesextranet/cliente_id/oauth2/token/

client_id: Es el ID_cliente

En el cuerpo(Body) de la consulta deberá ser de tipo “x-www-form-urlencoded”
y enviaremos estas Keys:

grant_type = client_credentials
scope = https://api.sunat.gob.pe/v1/contribuyen ... ribuyentes
client_id = ID_cliente
client_secret = CLAVE_cliente

Con estos datos prepare esta rutina pero no logro conectarme, No se que debo poner en el oHttp:Send("XXX")

Yo he probado la conexion con el programa Postman para ver si la API de SUNAT funciona y si da la respuesta correcta.

Cuando la ejecuto se queda en el CATCH por que no pudo conectarse , en el MSGINFO ("ERROR01: ..... " )

ESTA ES MI CODIFICACION : :oops:

Code: Select all | Expand



FUNCTION FSUNAT_GET_TOKEN(w_client_id,w_client_secret)
******************************************************
LOCAL oDoc
LOCAL ohttp
LOCAL cUrl:=""
LOCAL XRespuesta:=""
LOCAL aHasRes
LOCAL W_Token      
LOCAL W_TipoToken  
LOCAL W_TimeExpire

ohttp := CREATEOBJECT("MSXML2.ServerXMLHTTP.6.0")
doc   := CREATEOBJECT('MSXML2.DOMDocument.6.0')

** w_client_id        es el DI del Cliente
** w_client_secret  Es la Clave del cliente

cUrl:="https://api-seguridad.sunat.gob.pe/v1/clientesextranet/" + w_client_id +  "/oauth2/token/"

ohttp:Open( "POST" ,cUrl,.F.)

ohttp:SetRequestHeader("content-type" , "application/x-www-form-urlencoded" )
oHttp:SetRequestHeader("grant_type"   , "client_credentials")
oHttp:SetRequestHeader("scope"        , "https://api.sunat.gob.pe/v1/contribuyente/contribuyentes")
oHttp:SetRequestHeader("client_id"    , w_client_id)
oHttp:SetRequestHeader("client_secret", w_client_secret)

TRY
  ohttp:Send("")   && ohttp:Send(enviar)
CATCH
  msginfo("ERROR01: No Se pudo Enviar solicitud de token","Intente Nuevamente")
  return XRespuesta
END
XRespuesta:=ohttp:responseText

**  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


 


Agradeceré cualquier Ayuda

Lubin
Last edited by lubin on Sun Mar 20, 2022 8:25 am, edited 1 time in total.
User avatar
karinha
Posts: 7932
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Una envio con Post

Post by karinha »

El site solo muestra esto: Bienvenidos a SUNAT y más nada, está correcto?

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
lubin
Posts: 451
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Una envio con Post

Post by lubin »

Hola Karinha

La URL completa indicada es una dirección que recibe peticiones para consultas de la SUNAT, ( la Sunat en Peru es la Superintendencia Nacional de Aduanas y de Administración Tributaria. .. ve los tributos)

El tema es poder hacer la consulta, pero me parece que me falta el paramentro adecuado en ohttp:send( "xxxxx" ) Que valor tendría "xxxx" o como seria la consulta???

Gracias .
Lubin
User avatar
karinha
Posts: 7932
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil
Been thanked: 3 times
Contact:

Re: Una envio con Post

Post by karinha »

Master Lubin, Lo que quise decir:

{"cod":"404","msg":"Not Found - El Recurso Solicitado no puede ser encontrado."}

La dirección de esta URL no responde. O está fuera de servicio, o ha cambiado de dirección. Vea si puede encontrar la URL correcta.

Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Una envio con Post

Post by cmsoft »

Hola Lubin, me interesa el tema y por eso estuve haciendo pruebas.
Todas me dan lo mismo que a Ud.
Sin embargo, con Postman, si accedo a que me devuelva {"error_description":"cliente no autorizado","error":"unauthorized_client"} (Eso es correcto porque yo pongo cualquier valor de usuario y clave).
Si te fijas con Postman, el envio Curl queda de la siguiente manera:

Code: Select all | Expand


curl --location --request POST 'https://api-seguridad.sunat.gob.pe/v1/clientesextranet/0001/oauth2/token/' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cookie: TS019e7fc2=019edc9eb833efa208ebafe19a0cb31458a80273fee6dbdcea86918dff131d7cc6c12a3f038f6fb103241babd7b41e2f28dd90b2c6' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scope=https://api.sunat.gob.pe/v1/contribuyente/contribuyentes' \
--data-urlencode 'client_id=0001' \
--data-urlencode 'client_secret=test'
 

Fijate que no es un header lo que envia en los datos sino un data-urlencode
Intente de varias maneras pero todas con el mismo resultado
Segun lo que lei, en el tipo de envio application/x-www-form-urlencoded, hay que enviarle los pares de datos juntados con &

Code: Select all | Expand

cData := 'grant_type=client_credentials&=scope=https://api.sunat.gob.pe/v1/contribuyente/contribuyentes&=client_id=123456&=client_secret=xxxxxxx'
ohttp:Send(cData)
 

Pero a mi no me funciona tampoco.
Tal vez algun experto pueda saber la forma de armar la data para enviar
Saludos
User avatar
lubin
Posts: 451
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Una envio con Post

Post by lubin »

Hola Karinha , y Cesar

Gracias por los comentarios.

Efectivamente, probe la conexion por Postman y si responde el token, lineas abajo coloco el Codigo PRG con el Nombre de USuario y Clave para una prueba real y obtener respuesta.

Aqui les pego un link de un video: https://www.youtube.com/watch?v=3gJizy4qOlU donde se ve como se procesa,, pero no logro obtener el token,, inclusive luego hay que hacer una segunda consulta.

Es un caso interesante para conectarse con una API Rest que usa Oauth2

Me parece que el tema seria ver como se manda con el oHttp:Send()

Quizás así podamos descubrir el método de envió

Estaré muy atento y agradecido por la ayuda.

Lubin


Code: Select all | Expand



FUNCTION FSUNAT_GET_TOKEN(w_client_id,w_client_secret)
******************************************************
**  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

* carga directa de los datos  pra probaar
w_client_id="0319813d-f7c8-43fc-bda6-4317b225d3de"
w_client_secret="t8xujQF0yWLYmbp904iYZw=="


* METODO OBJTETO #1  (NO FUNCIONA SE QUEDA EN EN CATH )
*  doc   := CREATEOBJECT("MSXML2.DOMDocument.6.0")
*  ohttp := CREATEOBJECT("MSXML2.ServerXMLHTTP.6.0")

* METODO OBJTETO #2  ( RESPONDE ERROR  HTTP 400 BAD REQUEST)
 doc   := CreateObject( "MSXML2.DOMDocument" )
 ohttp := CreateObject( "MSXML2.XMLHTTP" )


cUrl:="https://api-seguridad.sunat.gob.pe/v1/clientesextranet/"+w_client_id+"/oauth2/token/"

ohttp:Open( "POST" ,cUrl,.F.)

*ohttp:SetRequestHeader("content-type" , "application/x-www-form-urlencoded" )
ohttp:SetRequestHeader("content-type" , "x-www-form-urlencoded" )
oHttp:SetRequestHeader("grant_type"   , "client_credentials")
oHttp:SetRequestHeader("scope"        , "https://api.sunat.gob.pe/v1/contribuyente/contribuyentes")
oHttp:SetRequestHeader("client_id"    , w_client_id)
oHttp:SetRequestHeader("client_secret", w_client_secret)

TRY
   ohttp:Send()   && ohttp:Send(enviar)
CATCH
   msginfo("No Se pudo Enviar solicitud de token","Intente Nuevamente")
   return XRespuesta
END
XRespuesta:=ohttp:responseText
 

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



 
User avatar
lubin
Posts: 451
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru
Contact:

Re: Una envio con Post SOLUCIONADO

Post by lubin »

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


 
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Una envio con Post ** SOLUCIONADO **

Post by cmsoft »

Excelente Lubin!!
Me alegro que hayas encontrado la solución!
Muchas gracias por compartirlo!
Saludos
artu01
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Una envio con Post ** SOLUCIONADO **

Post by artu01 »

Continuando este hilo quiero solicitar datos pero me aparece este error.
Image
este es mi codigo

Code: Select all | Expand


      cUrl:="https://api.sunat.gob.pe/v1/contribuyente/contribuyentes/20502060768/validarcomprobante/"
      ohttp   := CreateObject( "MSXML2.XMLHTTP" )
      ohttp:Open( "POST" ,cUrl,.F.)
      ctk:="eyJraWQiOiJhcGkuc3VuYXQuZ29iLnBlLmtpZDEwMSIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJiZmMwYWFlNi1jNDQwLTRiZDMtYmI0NS02NmY5NjAyOTA1MDgiLCJhdWQiOiJbe1wiYXBpXCI6XCJodHRwczpcL1wvYXBpLnN1bmF0LmdvYi5wZVwiLFwicmVjdXJzb1wiOlt7XCJpZFwiOlwiXC92MVwvY29udHJpYnV5ZW50ZVwvY29udHJpYnV5ZW50ZXNcIixcImluZGljYWRvclwiOlwiMFwiLFwiZ3RcIjpcIjAxMDAwMFwifV19XSIsIm5iZiI6MTY0ODI1ODg3NywiY2xpZW50SWQiOiJiZmMwYWFlNi1jNDQwLTRiZDMtYmI0NS02NmY5NjAyOTA1MDgiLCJpc3MiOiJodHRwczpcL1wvYXBpLXNlZ3VyaWRhZC5zdW5hdC5nb2IucGVcL3YxXC9jbGllbnRlc2V4dHJhbmV0XC9iZmMwYWFlNi1jNDQwLTRiZDMtYmI0NS02NmY5NjAyOTA1MDhcL29hdXRoMlwvdG9rZW5cLyIsImV4cCI6MTY0ODI2MjQ3NywiZ3JhbnRUeXBlIjoiY2xpZW50X2NyZWRlbnRpYWxzIiwiaWF0IjoxNjQ4MjU4ODc3fQ.r8hNuaa2p-lGpbcpO8lbfwq62e9wIpdZD6YolYROLkoKBKSy0rnfYZYH9Ms4c0d7LXdSotF4Y90uaAdNUop7VqOKECMUYR2ZhC7wapOme0QEQi0K_WO0C_X-idKs_cO5MfCWkCKiM_mM52hfWXcCsRCNyAqeYN9VwtUNORwwszt45og3wIb_cDVsLYbW0oKV6TmgigbgYDIvJ9hcZEOq31cLZ95IELXDM9lbhF2-bftZzGofQNbitzAsg1pr0L9D16xvL8TRZ2sa3yUqkwRWCAoM8XYJlhTbdHN5H1JpF5FTEpTSheRZCLQTe_6p-J0A4Pwq4z8m_iwx1HdVd93O8g"
      ohttp:SetRequestHeader("Authorization", "Bearer &ctk" )
      cJson :='{"numRuc":"20332970411","codComp":"01","numeroSerie":"F072","numero":"1844225","fechaEmision":"06/01/2022","monto":"1682.44"}'
oHttp:setRequestHeader( "Content-type", "text/json" )
      //ohttp:SetRequestHeader("content-type" , "application/raw -JSON(application/json" )
      //ohttp:Open( "POST" ,cUrl,.F.)
      TRY
        ohttp:Send(cJson)  
      CATCH
        msginfo("No Se pudo Enviar solicitud ","Intente Nuevamente")
        return XRespuesta
      END
      XRespuesta:=ohttp:responseText
      ?XRespuesta
      aHasRes1 := hash()
      hb_jsondecode(XRespuesta ,@aHasRes1) //Parse JSON to hash  
      ?aHasRes1["success"]  
 

tengo win7 tendra algo que ver
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Una envio con Post ** SOLUCIONADO **

Post by cmsoft »

Artu:
El método no soportado imagino que hace referencia a la forma de solicitar el dato, si por POST o por GET.
Prueba cambiando:

Code: Select all | Expand

ohttp:Open( "POST" ,cUrl,.F.)

Por

Code: Select all | Expand

ohttp:Open( "GET" ,cUrl,.F.)

O mira las espeficicaciones de la Api a ver que metodo requiere para ese comando
artu01
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Una envio con Post ** SOLUCIONADO **

Post by artu01 »

artu01 wrote:

Code: Select all | Expand


      cUrl:="https://api.sunat.gob.pe/v1/contribuyente/contribuyentes/20502060768/validarcomprobante/"

 


Gracias cesar por responder le quite el caracter / al final de la URL y funciono!
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
User avatar
cmsoft
Posts: 1297
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina
Been thanked: 2 times

Re: Una envio con Post ** SOLUCIONADO **

Post by cmsoft »

Me alegro que lo hayas solucionado!!
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 algunos caracteres 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 algunos caracteres, 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