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

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-03-2015
frankizzio frankizzio is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 10
Poder: 0
frankizzio Va por buen camino
Consumir servicio web con WDSL - autentificación WS-Security

Hola,
Mi nombre es Franco, y estoy a cargo de un proyecto de Facturación electrónica en Perú,
buscando información sobre el tema pude ver que existe la posibilidad de crear clases definidas mediante el WDSL Importer de delphi en File/New/Other/WebServices/,
El link que utilizo es el siguiente h t tps://w ww.sunat. gob.pe: 443/ol-ti-it cpgem-beta/bill Service?wsdl

Pero cuando trato de realizar la conexión, enviando el arreglo de bits y el nombre del archivo como se especifica(datos demo) me aparece un mensaje de error como si no se hubiera creado algo.

Este es mi código

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  tBillServ : billService;
  tSendB    : sendBill;
  ByteA     : TByteDynArray;
  tSendBResp: sendBillResponse;
begin
  tSendB:=sendBill.Create;
  tSendBResp:=sendBillResponse.Create;
  tSendB.fileName:='Demo.zip';
  SetLength(ByteA,2);
  ByteA[0]:=10;
  ByteA[1]:=20;
  tSendB.contentFile:=ByteA;
  tSendBResp:=tBillServ.sendBill(tSendB);
end;

¿En que me estoy equivocando?, La conexión es mediante Soap utilizando WS-Security usando el modelo UserNameToken y no se si se necesite realizar un procedimiento más, soy nuevo en este tipo de procesos y no encuentro info que me pueda orientar.
Espero que me puedan ayudar, gracias.

Adjunto archivo generado por el WDSL Importer
Archivos Adjuntos
Tipo de Archivo: rar billService1.rar (2,2 KB, 42 visitas)
Responder Con Cita
  #2  
Antiguo 18-03-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Ahí no hay de otra que apegarse a la documentación del servicio, el WSDL es muy completo y nos colabora mucho en ese sentido, pero hay detalles que requieren de la documentación y sobre todo de la claridad acerca de la funcionalidad que ofrece el servicio.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 18-03-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Por otro lado, mirando el WSDL importado... solo estás asignando el nombre del archivo a tSendB.fileName, debe estar haciéndote falta asignar el arreglo de Bytes (Podrías usar un TBytesStream para cargar el archivo Demo.zip) a tSendB.contentFile, es muy probable que (Sin haber leido la documentación por mi parte) por ahí sea el norte de lo que buscas.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #4  
Antiguo 18-03-2015
frankizzio frankizzio is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 10
Poder: 0
frankizzio Va por buen camino
Consumir servicio con WDSL - autentificación WS-Security

Hola Jhonny gracias por responder,

El servicio es de una entidad del estado, la cual consiste en enviar un arreglo de bits(de un archivo zipeado) y el nombre del archivo, esto con la autentificación WS-Security, ahora lo que no se es si las clases que se generan resuelven todo ese problema o tengo que utilizar el componente HTTPRIO para realizar la conexión con el servicio web.

En su manual de programador dicen lo siguiente

1) Los documentos XML de la factura, boleta de venta y notas de crédito y debito, así como del resumen diario y comunicaciones de baja, antes de ser enviados a la SUNAT, deberán ser empaquetados en un archivo ZIP.
...
3) El envío de los archivos ZIP, indicados en el punto 1, será vía WebServices.
4) El servicio Web estará protegido con un esquema de seguridad basado en WSSecurity.
5) El modelo de seguridad usado en WSSecurity será UsernameToken

El servicio web de recepción cuenta con un método personalizado para aceptar cada tipo de documento electrónico. Los métodos de recepción definidos son los siguientes:
- sendBill, este método recibe un archivo ZIP con un único documento XML de comprobante y devuelve un archivo Zip que contiene un documento XML que es la constancia de aceptación ó rechazo.
- sendSummary, este método recibe un archivo Zip con un único documento XML de resúmenes, ya sea resumen de boletas o comunicación de bajas. Devuelve un ticket con el que posteriormente utilizando el método getStatus se puede obtener el archivo Zip que contiene un documento XML que es la constancia de aceptación o rechazo.
- getStatus, este método recibe el ticket como parámetro y devuelve un objeto que indica el estado del proceso y en caso de haber terminado, devuelve adjunta la constancia de aceptación o rechazo.

Ejemplo SOAP para invocar el servicio SendBill:
Código:
<soapenv:Envelope xmlns:soapenv="h ttp://sche mas.xmlsoap.org/soap/envelope/" xmlns:ser="ht tp://serv ice.sunat.gob.pe" xmlns:wsse="h ttp://do cs.o asis-open.org/wss/2004/01/oasis-200401-wss-wssec urity-secext-1.0.xsd"> <soapenv:Header> <wsse:Security> <wsse:UsernameToken> <wsse:Username>20100066603MODDATOS</wsse:Username> <wsse:Password>moddatos</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <ser:sendBill> <fileName>20100066603-01-F001-1.zip</fileName> <contentFile>cid:20100066603-01-F001-1.zip</contentFile> </ser:sendBill> </soapenv:Body> </soapenv:Envelope>
Por otro lado, lo que hice fue llenar con otro TByteDynArray llamado ByteA el ContentFile porque aún no tengo el archivo generado con todas las especificaciones, entonces que no cargue el archivo Zip puede ser el problema
Responder Con Cita
  #5  
Antiguo 18-03-2015
frankizzio frankizzio is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 10
Poder: 0
frankizzio Va por buen camino
Consumir servicio con WDSL - autentificación WS-Security

Cuando ejecuto la aplicación de prueba me aparece una violación de acceso como si un componente no este creado, los dos tienen valores, el filename y el contentfile, es más en tiempo de depuración puedo comprobarlo.
Responder Con Cita
  #6  
Antiguo 19-03-2015
frankizzio frankizzio is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 10
Poder: 0
frankizzio Va por buen camino
Consumir servicio con WDSL - autentificación WS-Security

Lo resolví utilizando esta función

Código Delphi [-]
function GetbillService(UseWSDL: Boolean; Addr: string;var HTTPRIO: THTTPRIO): billService;
 const
  defWSDL = 'htt ps://ww w. sunat. gob. pe:443/ol-ti-itcpgem-beta/billService?wsdl';
  defURL  = 'htt ps://w ww.s unat. gob. pe:443/ol-ti-itcpgem-beta/billService';
  defSvc  = 'billService';
  defPrt  = 'BillServicePort';
 var
  RIO: THTTPRIO;
 begin
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as billService);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;

 end;

Y utilizandolo en la acción del botón

Código Delphi [-]
    tBillServ:=GetbillService(True,'',HTTPRIO1);

Establezco la conexión pero el WSDL Importer no generó la cabecera de seguridad UsernameToken, ahora un nuevo dilema, buscando en internet encuentro info sobre como implementar una unit llamada WSSE.pas pero no me queda claro su función
Cómo puedo configurar la cabecera para que aparezca de la siguiente manera

Código:
<soapenv:Envelope xmlns:soapenv="ht tp:// sc hem as. xmls ap .o rg/soap/env elope/" xmlns:ser="h tt p: //ser vice. sun at .go b .pe" xmlns:wsse="ht tp:// do cs. oasis- op en. org /wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <soapenv:Header> <wsse:Security> <wsse:UsernameToken> <wsse:Username>20100066603MODDATOS</wsse:Username> <wsse:Password>moddatos</wsse:Password> </wsse:UsernameToken> </wsse:Security> </soapenv:Header> <soapenv:Body> <ser:sendBill> <fileName>20100066603-01-F001-1.zip</fileName> <contentFile>cid:20100066603-01-F001-1.zip</contentFile> </ser:sendBill> </soapenv:Body> </soapenv:Envelope>
Responder Con Cita
  #7  
Antiguo 22-03-2015
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Ahhh caramba, cierto, no comprendo como se me pasó ese asunto, el WSDL Importer siempre crea una función con el Get ante puesto y el nombre del servicio... para consumir el IInvokable , que bueno que lo encontraste por sí mismo.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #8  
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
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 02: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 09:23:24
Web Security de Microsoft juanjose Varios 1 03-03-2012 13:32:06
Al consumir Servicio Web JAVA el array regresa vacio guacasoft73 Varios 1 15-05-2011 07:25:45


La franja horaria es GMT +2. Ahora son las 01:15:37.


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