Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Providers
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-02-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Ayuda con un servicio SOAP de impuestos en Bolivia con TOKEN en delphi

Buen día, de ante mano muchas gracias por la ayuda
no logro establecer la conexion para poder usar el servicio
https://pilotosiatservicios.impuesto...utarizada?wsdl
no se como añadir el encabezado al html para poder enviar
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var Peticion: verificarComunicacion;
    Respuesta: verificarComunicacionResponse;
    Token: String;
begin
     Token:='ePyJ0eXwiOiJKV1QiLwthbGciOiJIUzUx...........elTokenEsUnaCadenaLarga';
     
     Peticion:= Nil;
     HTTPRIO1:= THTTPRIO.Create(self);
     HTTPRIO1.HTTPWebNode.Password:=Token;
     Try
         Respuesta:= GetServicioFacturacionCodigos(False,'',HTTPRIO1).verificarComunicacion(Peticion);
         ShowMessage(IntToStr(Respuesta.return));
     Except
          on E : Exception do
               ShowMessage('Error generado : '+E.Message);
     end;
 
end;

Última edición por Casimiro Notevi fecha: 24-02-2022 a las 18:32:42.
Responder Con Cita
  #2  
Antiguo 01-03-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
les solicito una vez más ayuda, no puedo consumir el servicio, este es un ejemplo en PHP
gracias por su colaboración

Código PHP:
<?php
 
/** Ejemplo de manejo de SOAP con libreria de PHP php-soap */
 
$wsdl "https://pilotosiatservicios.impuestos.gob.bo/v2/FacturacionCodigos?wsdl";
 
$token 'VALOR_TOKEN';
 
$opts = array(
      
'http' => array(
           
'header' => "Authorization: Token $token"
      
)
);
 
$context stream_context_create($opts);
 
$client = new \SoapClient($wsdl, [
      
'stream_context' => $context,
      
'cache_wsdl' => WSDL_CACHE_NONE,
      
'compression' => SOAP_COMPRESSION_ACCEPT SOAP_COMPRESSION_GZIP SOAP_COMPRESSION_DEFLATE
 
      
// other options
]);
 
$respons $client->verificarComunicacion();
?>
este es código en Delphi pero da el siguiente error "EL SERVICIO REQUIERE API KEY", supongo que es por el encabezado

Código Delphi [-]
procedure TForm1.Button5Click(Sender: TObject);
 const   Token = 'VALOR_TOKEN';
 type   TAuthHeader = class(TSOAPHeader)
 private     Tokey: WideString;   
published   
end;   
var  
  Peticion: respuestaComunicacion;   
  Respuesta: ServicioFacturacionCodigos;   
  Headers: ISOAPHeaders;   
  key: TAuthHeader;   
  HTTPRio: THTTPRio; 
begin    
  HTTPRio := THTTPRio.Create(self);   
  try     
    key := TAuthHeader.Create;     
    key.Tokey := 'Authorization: Token ' + Token;      
    Headers := HTTPRIO as ISoapHeaders;      
    Respuesta := GetServicioFacturacionCodigos(False, '', HTTPRIO);      
    (Respuesta as ISOAPHeaders).Send(key);      
    try       
      Respuesta.verificarComunicacion;  //sale error: EL SERVICIO REQUIERE API KEY     
    except       
      on E: Exception do         
        ShowMessage('Error : ' + E.Message);     
    end;    
  finally     
  key.Free;   
end;  
end;

Última edición por Casimiro Notevi fecha: 01-03-2022 a las 10:33:03.
Responder Con Cita
  #3  
Antiguo 01-03-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Seguramente la "key" debas indicarlo en la cabecera, mira este enlace a ver si te sirve.
Responder Con Cita
  #4  
Antiguo 01-03-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Gracias Casimiro, por la ayuda pero añadi el evento y sigue dando el mismo error, probe cambiando la autentificacion y codificando en base64 el token



Código Delphi [-]
procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
  auth: string;

begin

  auth := 'Authorization: Basic ' + token;
//  auth := 'Authorization: Token ' + token;
//  auth := 'Authorization: Basic ' + idEncoderMIME1.EncodeString(token);
//  auth := 'Authorization: Token ' + idEncoderMIME1.EncodeString(token);

  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);

end;
Responder Con Cita
  #5  
Antiguo 01-03-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por CrazySoft Ver Mensaje
Gracias Casimiro, por la ayuda pero añadi el evento y sigue dando el mismo error, probe cambiando la autentificacion y codificando en base64 el token
Es que no se trata de que pruebes y pruebes y pruebes distintas cosas, sino de hacer lo que digan los requisitos de ese servicio. ¿No tienes la documentación?
Responder Con Cita
  #6  
Antiguo 01-03-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Gracias Casimiro, si deberia de estar en la documentación que sería lo ideal, pero lastimosamente ya no la encuentro la documentación o el ejemplo de conexión, porque volivieron a actualizar la pagina https://siatinfo.impuestos.gob.bo/in...cion-fact-comp
Responder Con Cita
  #7  
Antiguo 02-03-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Ahí hay mucho que mirar, y efectivamente, en el menú han quitado la opción donde en teoría explican lo que necesitas.
Pregunto, ¿es obligatorio usar ese sistema?
Responder Con Cita
  #8  
Antiguo 02-03-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ahí hay mucho que mirar, y efectivamente, en el menú han quitado la opción donde en teoría explican lo que necesitas.
Pregunto, ¿es obligatorio usar ese sistema?

Si, es obligatorio pero lo estan hacendo de manera incrementa
Responder Con Cita
  #9  
Antiguo 02-03-2022
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Ahí te dice donde va el token y como se arma



Código:
headers.put("apikey", Arrays.asList("TokenApi " + pToken));
Lo que entiendo es que en el header del REQUEST debes agregar esta línea (entre otras que deberían ir)

Código PHP:
apiKeyTokenApi ePyJ0eXwiOiJKV1QiLwthbGciOiJIUzUx...........elTokenEsUnaCadenaLarga 
Eso lo podrías ver si usas soapUI o Postman, ahí te permite agregar las cabeceras que necesites

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #10  
Antiguo 02-03-2022
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Continúo

En lo personal se me ha complicado usar HTTPRIO para el asunto de Headers "personalizados" por lo que he acudido a cURL para generar el REQUEST y enviarlo, la pega es que el proceso de armado del XML es artesanal, sin embargo, es una solución que me ha sacado de problemas siempre.

Hace poco hice una pequeña aplicación que usa cURL para Delphi y puedes descargarla desde mi bitácora en la sección de descargas


Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #11  
Antiguo 03-03-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Muchas gracias Egostar, hice el cambio que dijite para el envio de la cabecera pero ahora me da el siguente error: "Token no es valido", pese a que volvi a generar el toque nuevamente


realizare las pruebas con soapUI o Postman, como sugieres


estoy revisando la aplicacion que hiciste y vere de hacer los cambios que sugieres, estare comentando como me va



Cita:
Empezado por egostar Ver Mensaje
Continúo

En lo personal se me ha complicado usar HTTPRIO para el asunto de Headers "personalizados" por lo que he acudido a cURL para generar el REQUEST y enviarlo, la pega es que el proceso de armado del XML es artesanal, sin embargo, es una solución que me ha sacado de problemas siempre.

Hace poco hice una pequeña aplicación que usa cURL para Delphi y puedes descargarla desde mi bitácora en la sección de descargas


Saludos

gracias
Responder Con Cita
  #12  
Antiguo 03-03-2022
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por CrazySoft Ver Mensaje
Muchas gracias Egostar, hice el cambio que dijite para el envio de la cabecera pero ahora me da el siguente error: "Token no es valido", pese a que volvi a generar el toque nuevamente

realizare las pruebas con soapUI o Postman, como sugieres

estoy revisando la aplicacion que hiciste y vere de hacer los cambios que sugieres, estare comentando como me va

gracias

Te recomiendo que ya tengas un XML formado lo pases a la función DoSendRequest, y claro, las dll que se requieren de cURL en el directorio de la aplicación

Si abres la unidad uSOAP verás la parte donde se agregan los Headers; yo haría algo así

Código Delphi [-]
      ApiKey := 'ePyJ0eXwiOiJKV1QiLwthbGciOiJIUzUx...........elTokenEsUnaCadenaLarga';

      Header := nil;
      Header := curl_slist_append(Header, 'Accept-Encoding: gzip,deflate');
      Header := curl_slist_append(Header, 'SOAPAction: ""');
      Header := curl_slist_append(Header, PAnsiChar('apiKey: TokenApi ' + ApiKey));
      Header := curl_slist_append(Header, 'Content-Type: text/xml;charset=UTF-8;');
      Header := curl_slist_append(Header, 'User-Agent: Apache-HttpClient/4.5.5 (Java/12.0.1)');

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #13  
Antiguo 03-03-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Gracias pude concecta con el cURL, pero estoy en problemas con el XML para enviar estoy revisando como hacer, use muy poco XML, ahora estoy aprendiendo




Cita:
Empezado por egostar Ver Mensaje
Te recomiendo que ya tengas un XML formado lo pases a la función DoSendRequest, y claro, las dll que se requieren de cURL en el directorio de la aplicación

Si abres la unidad uSOAP verás la parte donde se agregan los Headers; yo haría algo así

Código Delphi [-] ApiKey := 'ePyJ0eXwiOiJKV1QiLwthbGciOiJIUzUx...........elTokenEsUnaCadenaLarga'; Header := nil; Header := curl_slist_append(Header, 'Accept-Encoding: gzip,deflate'); Header := curl_slist_append(Header, 'SOAPAction: ""'); Header := curl_slist_append(Header, PAnsiChar('apiKey: TokenApi ' + ApiKey)); Header := curl_slist_append(Header, 'Content-Type: text/xml;charset=UTF-8;'); Header := curl_slist_append(Header, 'User-Agent: Apache-HttpClient/4.5.5 (Java/12.0.1)');


Saludos
Responder Con Cita
  #14  
Antiguo 03-03-2022
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por CrazySoft Ver Mensaje
Gracias pude concecta con el cURL,
Excelente

Cita:
Empezado por CrazySoft Ver Mensaje
pero estoy en problemas con el XML para enviar estoy revisando como hacer, use muy poco XML, ahora estoy aprendiendo
Para hacer el XML hay varias formas, te recomiendo mires el XML Data Binding.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #15  
Antiguo 03-03-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Al añadir todo esto al HEAD, también dejo de dar error al usar HTTPRIO y valido el token correctamente



pero aun tengo problemas en consumo del servicio con HTTPRIO y cURL por causa del XML, que estoy aprendiendo



Gracias por toda la ayuda brindada hasta el momento y seguiré en el proceso



Código Delphi [-]
procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
  auth: string;

begin

  auth := 'Accept-Encoding: gzip,deflate';
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
  auth := 'SOAPAction: ""';
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
  auth := PAnsiChar('apiKey: TokenApi ' + Token);
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
  auth := 'Content-Type: text/xml;charset=UTF-8;';
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
  auth := 'User-Agent: Apache-HttpClient/4.5.5 (Java/12.0.1)';
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);

end;
Responder Con Cita
  #16  
Antiguo 03-03-2022
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por CrazySoft Ver Mensaje
Al añadir todo esto al HEAD, también dejo de dar error al usar HTTPRIO y valido el token correctamente



pero aun tengo problemas en consumo del servicio con HTTPRIO y cURL por causa del XML, que estoy aprendiendo



Gracias por toda la ayuda brindada hasta el momento y seguiré en el proceso



Código Delphi [-]
procedure TForm1.HTTPRIO1HTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
  auth: string;

begin

  auth := 'Accept-Encoding: gzip,deflate';
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
  auth := 'SOAPAction: ""';
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
  auth := PAnsiChar('apiKey: TokenApi ' + Token);
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
  auth := 'Content-Type: text/xml;charset=UTF-8;';
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
  auth := 'User-Agent: Apache-HttpClient/4.5.5 (Java/12.0.1)';
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);

end;

Muy bien, ya aprendimos todos algo nuevo.

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #17  
Antiguo 04-03-2022
CrazySoft CrazySoft is offline
Miembro
 
Registrado: abr 2005
Posts: 96
Poder: 20
CrazySoft Va por buen camino
Cita:
Empezado por egostar Ver Mensaje
Excelente



Para hacer el XML hay varias formas, te recomiendo mires el XML Data Binding.

Saludos



Gracias, saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
consumir web service SOAP con TOKEN en delphi Muriel Delphi para la web 14 07-02-2022 09:17:37
Servicio SOAP Sergio-ponchito Internet 3 07-06-2018 07:33:56
Device Token Request Failed Ayuda porfa jkokoj Desarrollo en Delphi para Android 2 25-01-2018 03:52:31
Ayuda con SOAP. Documentación ? rolandoj Internet 2 21-10-2008 04:29:06
Delphi encuentro en La Paz - Bolivia jcarteagaf La Taberna 15 04-05-2008 12:58:05


La franja horaria es GMT +2. Ahora son las 01:58:56.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi