Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2015
frankizzio frankizzio is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 10
Poder: 0
frankizzio Va por buen camino
Smile

Gracias Jhonny, tuve una semana informándome de los conceptos de este tipo de web service aún me falta mucho pero allí vamos.
Responder Con Cita
  #2  
Antiguo 18-10-2016
HubelSB HubelSB is offline
Registrado
 
Registrado: nov 2006
Posts: 9
Poder: 0
HubelSB Va por buen camino
Saludos

Saludos tambien trabajo con el tema de la SUNAT y en delphi, sobre el proceso de formar los XML utilize las plantillas de sunat y lo pase a un decodificador que me genera codigo fuente a partir del XML de la SUNAT, asi el proceso se hizo repetitivo para el kit de homologacion, en la parte de cifrado estoy utilizando XMLSec que lo ejecuto en segundo plano, una vez listo el XML firmado lo comprimo con 7zip, y ahora estoy en la parte de envio, estare subiendo todo el codigo, conforme avance, aunque recientemente recibi una charla por parte de la SUNAT donde se me informo sobre el SISTEMA FACTURADOR SUNAT, al cual solo hay que pasarle archivos planos, TXTs, con los campos a enviar y hace todo el proceso en el que hemos estado trabajando, voy a probarlo, si funciona todo ok, quedaria un camino mas en caso no terminar con el codigo.
Responder Con Cita
  #3  
Antiguo 22-12-2016
D1360666 D1360666 is offline
Miembro
 
Registrado: mar 2008
Posts: 53
Poder: 17
D1360666 Va por buen camino
consulta

Hola yo estoy con un problema similar.
Importe el wsdl con el importer, pero no sé como generar el WS-SECURITY.
tengo un WSDL para desarrollar facturación electrónica en Uruguay.

En caso de no importar con el Importer.

Manualmente como se debe hacer?

Gracias saludos!!
Responder Con Cita
  #4  
Antiguo 24-12-2016
HubelSB HubelSB is offline
Registrado
 
Registrado: nov 2006
Posts: 9
Poder: 0
HubelSB Va por buen camino
Tengo Respuesta

1). Con el WSDL Importer, darle la direccion del WS, para mi caso :

https://e-beta.sunat.gob.pe/ol-ti-it...llService?wsdl

se genera la unidad billService1.pas

la cual contiene la siguiente funcion GetbillService, ojo segun las versiones de delphi estas cambian en D7 y D2007 no se soportan los InvRegistry.RegisterParamInfo, si quieres generar un billService para versiones antiguas marca la opcion TXSxxxx for simple nillable, asi se genera un billservice capaz de usarse en versiones anteriores, yo estoy usando XE4 y bueno ahora D10.1 Berlin, esto de los webservices es mejor hacerlo con versiones nuevas, aunque las antiguas generan ejecutables mas rapidos.

2). Utilizar billservice1.pas

Para mi caso hay securidad ws-token, asi que para implementar la cabecera donde enviar el usuario y clave use THTTPReqResp

En un boton poner el siguiente codigo, ojo para la SUNAT peru, nos responde con un zip dentro del cual esta un xml con la respuesta si el documento ha sido aceptado o no, el archivo tiene que ser cargado en un array de bytes asi que lineas mas abajo te dejo los procedure que use.

Aun no termino el proyecto, ahora con wireshark estoy examinando como viajan los paquetes hacia el servidor, con la finalidad de ver si cumplen con el estandar que solicita SUNAT, cuando lo tengo listo lo libero hubelsolis@hotmail.com


procedure TForm1.Button1Click(Sender: TObject);
const
defWSDL = 'https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService?wsdl';
defURL = 'https://e-beta.sunat.gob.pe:443/ol-ti-itcpfegem-beta/billService';
defSvc = 'billService';
defPrt = 'BillServicePort';
var
tBillServ : billService;
Archivo : String;
Envio : TByteDynArray;
Respuesta : TByteDynArray;

HTTPReqResp1: THTTPReqResp;
HTTPRIO1 : THTTPRIO;
begin
HTTPReqResp1 := THTTPReqResp.create(nil);
HTTPReqResp1.Password := 'moddatos';
HTTPReqResp1.username := '20489697042MODDATOS';

HTTPRIO1 := THTTPRIO.Create(nil);
HTTPRIO1.HTTPWebNode := HTTPReqResp1;
HTTPRIO1.WSDLLocation := defWSDL;
HTTPRIO1.Service := defSvc;
HTTPRIO1.Port := defPrt;

// levanto el servicio
tBillServ:=GetbillService(TRUE,'',HTTPRIO1);
Archivo:='20489697042-03-BB01-00000003.ZIP';
envio:= FileToByteArray('D:\'+Archivo);

// envio
try
respuesta:=tBillServ.sendBill(Archivo,envio);
except
on E : Exception do
ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
end;

ByteArrayToFIle(respuesta, 'D:\respuestas\rptab.zip' );

end;



procedure ByteArrayToFIle(const ByteArray : TByteDynArray; const FileName : string );
var Count : integer;
F : FIle of Byte;
pTemp : Pointer;
begin
AssignFile( F, FileName );
Rewrite(F);
try
Count := Length( ByteArray );
pTemp := @ByteArray[0];
BlockWrite(F, pTemp^, Count );
finally
CloseFile( F );
end;
end;

function FIleToByteArray( const FileName : string ) : TByteDynArray;
const BLOCK_SIZE=1024;
var BytesRead, BytesToWrite, Count : integer;
F : FIle of Byte;
pTemp : Pointer;
begin
AssignFile( F, FileName );
Reset(F);
try
Count := FileSize( F );
SetLength(Result, Count );
pTemp := @Result[0];
BytesRead := BLOCK_SIZE;
while (BytesRead = BLOCK_SIZE ) do
begin
BytesToWrite := Min(Count, BLOCK_SIZE);
BlockRead(F, pTemp^, BytesToWrite , BytesRead );
pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE);
Count := Count-BytesRead;
end;
finally
CloseFile( F );
end;
end;
Responder Con Cita
  #5  
Antiguo 26-12-2016
D1360666 D1360666 is offline
Miembro
 
Registrado: mar 2008
Posts: 53
Poder: 17
D1360666 Va por buen camino
Muchas gracias amigos Husbel.
Lo voy a probar y les aviso como me fué.
Saludos.
Responder Con Cita
  #6  
Antiguo 26-12-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por HubelSB Ver Mensaje
1)...
Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #7  
Antiguo 27-12-2016
D1360666 D1360666 is offline
Miembro
 
Registrado: mar 2008
Posts: 53
Poder: 17
D1360666 Va por buen camino
Husbel amigo te consulto.
En lugar de utilizar ws-token, si uso username utilizo el mismo componente??
Responder Con Cita
  #8  
Antiguo 23-01-2017
D1360666 D1360666 is offline
Miembro
 
Registrado: mar 2008
Posts: 53
Poder: 17
D1360666 Va por buen camino
ws

Tengo una duda. Porque he probado muchas cosas y no llego a poder agregar un header de seguridad al comunicarme con un WS con el componente HTTPRIO y el Wsdl importer.

Estoy comunicando con un sistema de facturación eletrónica en Uruguay.
Importo el Wsdl, agrego un HTTPRIO, pero al tener seguridad la comunicación con ws-token, username y password.
Como tengo que hacer para agregar un header a la comunicación, si hay algún ejemplo les agradezco amigos.

He leído un poco sobre InvokeRegistry, etc pero no llego a una solución.
Gracias, saludos!!
Responder Con Cita
  #9  
Antiguo 09-06-2017
jpanta jpanta is offline
Registrado
 
Registrado: feb 2007
Posts: 1
Poder: 0
jpanta Va por buen camino
Cita:
Empezado por HubelSB Ver Mensaje
1). Con el WSDL Importer, darle la direccion del WS, para mi caso :

https://e-beta.sunat.gob.pe/ol-ti-it...llService?wsdl

se genera la unidad billService1.pas

la cual contiene la siguiente funcion GetbillService, ojo segun las versiones de delphi estas cambian en D7 y D2007 no se soportan los InvRegistry.RegisterParamInfo, si quieres generar un billService para versiones antiguas marca la opcion TXSxxxx for simple nillable, asi se genera un billservice capaz de usarse en versiones anteriores, yo estoy usando XE4 y bueno ahora D10.1 Berlin, esto de los webservices es mejor hacerlo con versiones nuevas, aunque las antiguas generan ejecutables mas rapidos.

2). Utilizar billservice1.pas

Para mi caso hay securidad ws-token, asi que para implementar la cabecera donde enviar el usuario y clave use THTTPReqResp

En un boton poner el siguiente codigo, ojo para la SUNAT peru, nos responde con un zip dentro del cual esta un xml con la respuesta si el documento ha sido aceptado o no, el archivo tiene que ser cargado en un array de bytes asi que lineas mas abajo te dejo los procedure que use.

Aun no termino el proyecto, ahora con wireshark estoy examinando como viajan los paquetes hacia el servidor, con la finalidad de ver si cumplen con el estandar que solicita SUNAT, cuando lo tengo listo lo libero hubelsolis@hotmail.com


procedure TForm1.Button1Click(Sender: TObject);
const
defWSDL = 'https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService?wsdl';
defURL = 'https://e-beta.sunat.gob.pe:443/ol-ti-itcpfegem-beta/billService';
defSvc = 'billService';
defPrt = 'BillServicePort';
var
tBillServ : billService;
Archivo : String;
Envio : TByteDynArray;
Respuesta : TByteDynArray;

HTTPReqResp1: THTTPReqResp;
HTTPRIO1 : THTTPRIO;
begin
HTTPReqResp1 := THTTPReqResp.create(nil);
HTTPReqResp1.Password := 'moddatos';
HTTPReqResp1.username := '20489697042MODDATOS';

HTTPRIO1 := THTTPRIO.Create(nil);
HTTPRIO1.HTTPWebNode := HTTPReqResp1;
HTTPRIO1.WSDLLocation := defWSDL;
HTTPRIO1.Service := defSvc;
HTTPRIO1.Port := defPrt;

// levanto el servicio
tBillServ:=GetbillService(TRUE,'',HTTPRIO1);
Archivo:='20489697042-03-BB01-00000003.ZIP';
envio:= FileToByteArray('D:\'+Archivo);

// envio
try
respuesta:=tBillServ.sendBill(Archivo,envio);
except
on E : Exception do
ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
end;

ByteArrayToFIle(respuesta, 'D:\respuestas\rptab.zip' );

end;



procedure ByteArrayToFIle(const ByteArray : TByteDynArray; const FileName : string );
var Count : integer;
F : FIle of Byte;
pTemp : Pointer;
begin
AssignFile( F, FileName );
Rewrite(F);
try
Count := Length( ByteArray );
pTemp := @ByteArray[0];
BlockWrite(F, pTemp^, Count );
finally
CloseFile( F );
end;
end;

function FIleToByteArray( const FileName : string ) : TByteDynArray;
const BLOCK_SIZE=1024;
var BytesRead, BytesToWrite, Count : integer;
F : FIle of Byte;
pTemp : Pointer;
begin
AssignFile( F, FileName );
Reset(F);
try
Count := FileSize( F );
SetLength(Result, Count );
pTemp := @Result[0];
BytesRead := BLOCK_SIZE;
while (BytesRead = BLOCK_SIZE ) do
begin
BytesToWrite := Min(Count, BLOCK_SIZE);
BlockRead(F, pTemp^, BytesToWrite , BytesRead );
pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE);
Count := Count-BytesRead;
end;
finally
CloseFile( F );
end;
end;
Hola, he revisado tu código y trabaja sin problemas, al menos lo he probado con delphi xe7 y normal pero estoy tratando de utilizar la WSDL de Consultas pero tengo problemas, siempre me devuelve el siguiente mensaje EL ENCABEZADO DE SEGURIDAD ES INCORRECTO, estoy usando el mismo codigo que usaste para Sendbill

textoxml:=memo1.Lines.Text;//en este memo tengo todo el XML
try
respuesta:=tBillServ.getStatus(textoxml);
except
on E : Exception do
ShowMessage(E.ClassName+' error raised, with message : '+E.Message+'/'+E.ToString);
end;
showmessage(respuesta);

Podrias ayudarme con este problema?
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
Web services y ws-security adebonis Internet 7 15-05-2015 01:54:54
Error "Message part {URL}Método was not recognized" al consumir servicio Web Java Al González Delphi para la web 0 02-05-2013 08:23:24
Web Security de Microsoft juanjose Varios 1 03-03-2012 12:32:06
Al consumir Servicio Web JAVA el array regresa vacio guacasoft73 Varios 1 15-05-2011 06:25:45


La franja horaria es GMT +2. Ahora son las 08:09:02.


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