Delphi - consumir SOAP en delphi

 
Vista:

consumir SOAP en delphi

Publicado por Marco (1 intervención) el 26/12/2021 18:36:09
Hola a todos del foro
Acudo a ustedes por que no tengo experiencia en consumir los servicios Web y espero de que me puedan ayudar esto es el ejemplo en NETCORE

Nota.- La inclusión del Token de la petición SOAP debe hacerse en la cabecera HTTP y no así en la cabecera XML del request

Para efectos ilustrativos, se ejemplifica en los siguientes lenguajes:

using System;
using System.ServiceModel;
using ServiceReference;
using System.Xml;
using System.Threading.Tasks;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Channels;

namespace client
{
class Program
{
private static string endpointAddress = "https://pilotosiatservicios.impuestos.gob.bo/v1/FacturacionCodigos?wsdl";
static void Main(string[] args)
{
string token = "TOKEN";

BasicHttpBinding binding = new BasicHttpBinding
{
SendTimeout = TimeSpan.FromSeconds(1000),
MaxBufferSize = int.MaxValue,
MaxReceivedMessageSize = int.MaxValue,
AllowCookies = true,
ReaderQuotas = XmlDictionaryReaderQuotas.Max
};
binding.Security.Mode = BasicHttpSecurityMode.Transport; // https
//binding.Security.Mode = BasicHttpSecurityMode.None; // http
EndpointAddress address = new EndpointAddress(endpointAddress);
ServicioFacturacionCodigosClient servicio = new ServicioFacturacionCodigosClient(binding, address);
servicio.Endpoint.EndpointBehaviors.Add(new CustomAuthenticationBehaviour($"Token {token}"));
try {
Task<verificarComunicacionResponse> resp = servicio.verificarComunicacionAsync();
resp.Wait();
Console.WriteLine(resp.Result.@return);
} catch (Exception e) {
Console.WriteLine($"{e.Message}");
}
}
}

public class CustomMessageInspector : IClientMessageInspector
{
readonly string _authToken;

public CustomMessageInspector(string authToken)
{
_authToken = authToken;
}

public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var reqMsgProperty = new HttpRequestMessageProperty();
reqMsgProperty.Headers.Add("Authorization", _authToken);
request.Properties[HttpRequestMessageProperty.Name] = reqMsgProperty;
return null;
}

public void AfterReceiveReply(ref Message reply, object correlationState)
{ }
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

consumir SOAP en delphi

Publicado por Chip (1 intervención) el 09/02/2022 17:36:16
depende con que version de delphi estas usando..
con webservice de radstudio se puede conectar.


yo tambien soy de bolivia y tambien estoy haciendo el sistema de facturacion
talvez podamos ayudarnos...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Carlos (1 intervención) el 01/04/2022 19:30:41
//THTTPRIO1 evento HTTPWebNode/ClientCertificate/OnBeforePost

procedure TForm1.THTTPRIO1HTTPWebNode1BeforePost(
const HTTPReqResp: THTTPReqResp; Client: THTTPClient);
var
Token:String
begin
Token:='valor del Token';
//token en el encabezado SOAP
Client.CustomHeaders['key'] := Token;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Gustavo (8 intervenciones) el 17/06/2022 22:06:01
Hola carlos de ciudad eres y como te esta yendo con la facturacion en linea. Trabajo tambien con delphi
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Carlos (1 intervención) el 01/07/2022 20:34:46
Hola Gustavo, soy de Cbba.
Ya termine la etapa de pruebas con el sistema.

como te fue a ti.?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Gustavo (8 intervenciones) el 08/07/2022 22:45:25
Carlos yo tambien vivo en Cbba. Te cuendo que estoy retomando el trabajo, este es mi correo [email protected].
Una consulta Carlos con que componetes estas trabajando y que version de Delphi.
no estoy pudiendo conectarme con Token Api. si puedes darme una mano porfavor
en el codigo que enviaste la verdad no lo entendí. tal vez por la version de Delphi

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

consumir SOAP en delphi

Publicado por luchop (5 intervenciones) el 26/04/2022 03:54:05
Hola Chip. También de Bolivia.

¿Pudiste enviar la cabecera? Trabajo con mi viejo Delphi 7
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Gustavo (8 intervenciones) el 17/06/2022 21:59:47
Yo tambien estoy a trabajar con delphi soap podemos hacerlo juntos respecto a la facturacion en linea
Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por luchop (5 intervenciones) el 10/07/2022 15:18:37
Este es mi intento de usar la funcion verificarComunicacion():

1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TMySOAPClientForm.Button1Click(Sender: TObject);
begin
   Label1.Caption := (HTTPRIO1 as ServicioFacturacionCodigos).verificarComunicacion(nil).RespuestaComunicacion.mensajesList.descripcion;
end;
 
procedure TMySOAPClientForm.HTTPRIO1HTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var apikey, token : String;
begin
  token := 'TokenApi eyJ0eXAiOi...';
 
  apikey := 'apikey:' + idEncoderMIME1.EncodeString( token );
  HttpAddRequestHeaders(Data, PChar(apikey), Length(apikey), HTTP_ADDREQ_FLAG_ADD);
end;

pero genera una excepción "API KEY NO VALIDA"

El soporte de Impuestos me dice que no debo hacer la codificación base64
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Diego (8 intervenciones) el 10/07/2022 18:27:50
luchop que version de delphi estas usando,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Diego (8 intervenciones) el 10/07/2022 19:06:40
amigo logre comunicarme con tu ejemplo estoy trabajando con DelphiXE5
solo debes reemplar:

token := 'TokenApi eyJ0eXAiOi...';
// apikey := 'apikey:' + idEncoderMIME1.EncodeString( token );
apikey := 'apikey: ' + token ;
HttpAddRequestHeaders(Data, PChar(apikey), Length(apikey), HTTP_ADDREQ_FLAG_ADD);

esta es la respuesta que recibi:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:verificarComunicacionResponse xmlns:ns2="https://siat.impuestos.gob.bo/"><RespuestaComunicacion><mensajesList><codigo>926</codigo><descripcion>COMUNICACION EXITOSA</descripcion></mensajesList><transaccion>true</transaccion></RespuestaComunicacion></ns2:verificarComunicacionResponse></soap:Body></soap:Envelope>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por luchop (5 intervenciones) el 11/07/2022 22:50:43
Intenté también eso, pero igual obtengo:

raised exception class ERemotableException with message "API KEY NO VALIDO"

Significa que el código está bien, pero hay algo mal con los componentes Indy talvez o la configuración.

@Diego, estoy usando el viejo Delphi 7. Tienes alguna idea de la causa de mi problema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Diego (8 intervenciones) el 12/07/2022 02:40:24
Hice pruebas con Delphi 7 y presenta errores
No use Indy (No tengo instalada los componentes SOAP de Indy en mi Delphi7) (si puedes pasame esos componentes)

Estoy compilando con XE5 y funciono correctamente tal como tu ejemplo presenta con esas correcciones que te envie.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por luchop (5 intervenciones) el 23/07/2022 18:34:35
No instalé componentes. Solo el Indy que trae el disco de D7 y que se instala en la instalación por defecto.

Podrías pasarme el proyecto en el que hiciste funcionar el método? Voy a tratar de trabajar con Delphi 10 CE

Pasada esta etapa, crep podré avanzar rápido ya que tengo mucho avanzado en PHP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por Gustavo Diego (8 intervenciones) el 24/07/2022 01:38:27
enviame tu correo y coordinamos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por luchop (5 intervenciones) el 24/07/2022 02:23:59
Mi correo es luispaezrocha @yahoo com

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consumir SOAP en delphi

Publicado por osvaldo rodriguez (1 intervención) el 18/08/2022 20:48:13
Hola amigos, alguna solucion, necesito el apikey
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

consumir SOAP en delphi

Publicado por jimmy (1 intervención) el 08/02/2023 15:52:23
Hola tambien estoy desarrollando sistema de facturacion, podemos ayudarnos mi email es [email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar