Una envio con Post ** SOLUCIONADO **

Una envio con Post ** SOLUCIONADO **

Postby lubin » Fri Mar 18, 2022 10:34 pm

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 view  RUN


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
lubin
 
Posts: 449
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Una envio con Post

Postby karinha » Fri Mar 18, 2022 11:16 pm

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
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Una envio con Post

Postby lubin » Sat Mar 19, 2022 3:03 am

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
lubin
 
Posts: 449
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Una envio con Post

Postby karinha » Sat Mar 19, 2022 11:57 am

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
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Una envio con Post

Postby cmsoft » Sat Mar 19, 2022 10:24 pm

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 view  RUN

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 view  RUN
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
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Una envio con Post

Postby lubin » Sun Mar 20, 2022 3:27 am

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 view  RUN


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: 449
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Una envio con Post SOLUCIONADO

Postby lubin » Sun Mar 20, 2022 8:20 am

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 view  RUN


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
lubin
 
Posts: 449
Joined: Fri Dec 09, 2005 12:41 am
Location: Lima, Peru

Re: Una envio con Post ** SOLUCIONADO **

Postby cmsoft » Sun Mar 20, 2022 12:34 pm

Excelente Lubin!!
Me alegro que hayas encontrado la solución!
Muchas gracias por compartirlo!
Saludos
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Una envio con Post ** SOLUCIONADO **

Postby artu01 » Sat Mar 26, 2022 4:14 am

Continuando este hilo quiero solicitar datos pero me aparece este error.
Image
este es mi codigo
Code: Select all  Expand view  RUN

      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
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Una envio con Post ** SOLUCIONADO **

Postby cmsoft » Sat Mar 26, 2022 12:56 pm

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 view  RUN
ohttp:Open( "POST" ,cUrl,.F.)

Por
Code: Select all  Expand view  RUN
ohttp:Open( "GET" ,cUrl,.F.)

O mira las espeficicaciones de la Api a ver que metodo requiere para ese comando
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Una envio con Post ** SOLUCIONADO **

Postby artu01 » Sat Mar 26, 2022 8:38 pm

artu01 wrote:
Code: Select all  Expand view  RUN

      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
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: Una envio con Post ** SOLUCIONADO **

Postby cmsoft » Sat Mar 26, 2022 8:41 pm

Me alegro que lo hayas solucionado!!
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Una envio con Post SOLUCIONADO

Postby LuisPonce » Fri Jun 16, 2023 1:20 am

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 view  RUN


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

Re: Una envio con Post SOLUCIONADO

Postby cjcardoza » Fri Jun 16, 2023 4:22 am

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 view  RUN


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

Re: Una envio con Post ** SOLUCIONADO **

Postby LuisPonce » Fri Jun 16, 2023 6:07 pm

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/clientessol/'+w_client_id+'/oauth2/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
User avatar
LuisPonce
 
Posts: 195
Joined: Tue Jul 01, 2008 6:34 pm
Location: PERU


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 62 guests