Enviar objeto XML con archivo anexo a un WS

2,284 views
Skip to first unread message

Antonio.xt

unread,
Mar 22, 2012, 8:11:57 PM3/22/12
to publice...@googlegroups.com

Que tal grupo, me encuentro ahora con la siguiente cuestion.

Termine una aplicacion con un tema nuevo para mi, "VFP y los Web Services". Bueno, apoyandome un poco de colegas de aqui del grupo, un documento de PortalFox, y de aqui y de alla, pude terminar esta aplicacion que consume un Web Service en el cual envio un objeto XML con Firma Electronica, certificado, informacion del docto, etc.

Ahora acaban de liberar otro Web Services, y tambien tengo que hacer una rutina para enviar un objeto XML con la informacion de un Archivo Digitalizado (PDF), el cual tambien tengo que enviar, aqui esta el problema, ya pude enviar el objeto XML, pero como puedo enviar el XML y ademas enviar el archivo digitalizado, lei que ese archivo se envia como un arreglo de bytes, algo parecido a un archivo adjunto en un email.

Saludos cordiales, y agradezco de antemano...

Baltazar Moreno

unread,
Mar 22, 2012, 11:46:58 PM3/22/12
to publice...@googlegroups.com
Usa Soap UI para que veas como es el request.

Saludos!

Baltazar Moreno
VFP9SP2 - Win7
Guadalajara, Jalisco, México

Antonio.xt

unread,
Mar 23, 2012, 12:16:27 PM3/23/12
to publice...@googlegroups.com

Que tal Baltazar, oye lo que pasa es que ya tengo el Request, y estoy usando SopaUI, y tengo la informacion completa y hasta ya genere la firma con los archivos de la FIEL. Lo que no se es como anexar un archivo al XML que se va a enviar.

Aprovecho nuevamente para agradecerte por tu articulo de PortalFox, ya que ese es el documento en el que me apoye para la primer aplicacion con Web Service.

Pero ahora esto si es nuevo para mi, ademas de enviar un XML a un WS, enviar o anexar al XML un archivo PDF tambien al WS.

Si alguien tiene alguna informacion sobre el tema.

Saludos...

Baltazar Moreno

unread,
Mar 23, 2012, 12:32:18 PM3/23/12
to publice...@googlegroups.com
Supongo que ese arreglo de bytes tendría que ir en el xml request.. 

Para crear ese arreglo de bytes. .tengo entendido que puedes usar CREATEBINARY( ) En lo personal.. no lo he utilizado, pero acá:
dicen que se puede.

Saludos!

Juan Rojas C

unread,
Mar 23, 2012, 2:15:48 PM3/23/12
to publice...@googlegroups.com
Espero te sirva:

LTEXTO=FILETOSTR('c:\fact\factura.ZIP')

LTEXTO=Strconv(LTEXTO,13)

.

.

.

<!--REQUEST.................-->

<env:Envelope .......

.

.

.

<archivoEnvioByte xsi:type="xsd:base64Binary"><<ltexto>></archivoEnvioByte>

.

.

.

</env:Envelope>

 


JRCORONA

Antonio.xt

unread,
Mar 23, 2012, 2:27:00 PM3/23/12
to publice...@googlegroups.com

Gracias Baltazar y Jrsiste, voy a probar con eso.

Saludos...

ArturoPC

unread,
Mar 23, 2012, 2:41:13 PM3/23/12
to publice...@googlegroups.com
Para pasar a 64 bits un archivo yo utilizo la librería foxcrypto.fll que puedes descargar de http://www.comsersa.pe/updates/consolida/others/FoxCrypto.zip

Creas una función para que codifique el archivo. La función sería:
FUNCTION xxCodifica64
PARAMETER pCadena
   LOCAL lcBase64, lcInFile, lnHandle, lnSize
   lnHandle = Base64EncoderCreate( .T. )
   IF lnHandle > 0
           Base64EncoderPut(lnHandle, pCadena)
           Base64EncoderClose(lnHandle)
           lnSize = Base64EncoderMaxRetrievable(lnHandle)
           lcBase64 = Base64EncoderGet(lnHandle, lnSize)
           Base64EncoderDestroy(lnHandle)
   ELSE
      WAIT WIND "ERROR al instanciar"
      RETURN .F.
   ENDIF
   RETURN lcBase64
ENDFUNC
 
Luego para llamar a la función usas el siguiente código
   * codifica a Base 64
   tcInFile = FULLPATH("miarchivo.pdf")
   lcInFile = FILETOSTR(tcInFile)
   lcInFile64 = xxCodifica64(lcInFile)

En la variable lcInFile64 tienes la cadena que debes incluir en tu archivo XML.

Slds,

ArturoPC.

Juan Rojas C

unread,
Mar 24, 2012, 2:03:59 PM3/24/12
to publice...@googlegroups.com
pero con
 
LTEXTO=Strconv(LTEXTO,13)

en vfp9 ya lo tienes en base 64
JRCORONA

Antonio.xt

unread,
Mar 26, 2012, 12:55:19 PM3/26/12
to publice...@googlegroups.com

Excelente !!

ArturoPc, muy buena libreria, es exactamete lo que necesitaba para convertir el archivo al formato requerido. Y es correcto, la funcion que menciona jrsiste20 tambien me da el archivo en una cadena en base64.

Ya anexe el archivo base64 al XML, y logre enviarlo con exito al Web Service.

Gracias por el apoyo, y saludos cordiales...


Cesar Izquierdo

unread,
Jun 2, 2012, 4:08:10 PM6/2/12
to publice...@googlegroups.com
Estimado Antonio, estoy empezando un proyecto igual al tuyo, utilizando el vfp para conectarse con web services, podrias indicarme de donde optuviste la info que te ayudo a hacerlo.
Muchas gracias.
Saludos
Cesar

--

Saludos,
-------------------------------------
Cesar Izquierdo Oré
Telf. 997-550-279

Antonio.xt

unread,
Jun 4, 2012, 10:33:36 AM6/4/12
to publice...@googlegroups.com

Que tal Cesar, sabes, la documentacion de la cual me base para desarrollar el proyecto fue de varias fuentes, por ejemplo un articulo (que por cierto fue muy oportuno) de PoralFox del colega Baltazar Moreno, otro articulo de ahi mismo de PortalFox, y aqui mismo tambien. Te comento que el articulo de Baltazar Moreno es precisamente para el uso un Web Service, de ahi puedes partir. Y si tienes mas dudas, publicalas aqui en un nuevo hilo, te apoyo en lo que pueda.

La liga del articulo es:


Saludos...

Charles A. Moreno

Tlacuilo

unread,
Sep 5, 2012, 12:36:24 PM9/5/12
to publice...@googlegroups.com
Hola Antonio...

Yo estoy trabajando en un proyecto similar al tuyo...tambien necesito mandar un archivo adjunto al servidor...he intentado con las funciones strconv() y no me funciona...tengo el visual foxpro 7...no se si ese sea mi problema...

Gracias!!!!

Hector Kuhn

unread,
Sep 5, 2012, 1:10:34 PM9/5/12
to publice...@googlegroups.com
Estoy en un tema parecido, y he visto el articulo que mensionas, pero, si es posible , podrias poner un ejemplo, (parte del prg) que usas desde la coneccion hasta el send; porque no logro enviar el xml, y seguramente me esta faltando algo; seguramente el webservice al que me quiero conectar ( el de ANMAT) es distinto al tuyo pero me serviria el ejemplo

Desde ya muchas gracias

Antonio.xt

unread,
Sep 5, 2012, 1:27:23 PM9/5/12
to publice...@googlegroups.com

Tlacuilo
Ese proyecto yo tambien lo hice en VFP 7, no debes tener problemas por eso. Las funciones para tener el archivo a como se requiere es el siguiente:

strArchivo = FILETOSTR({Nombre del archivo a anexar})
ArchBase64 = STRCONV(strArchivo,13)

El resultado o el contenido de la variable ArchBase64 es lo que se coloca en los tags <archivo> del documento XML. Los tags pueden ser diferentes, pero asi se anexa al documento.


Hector
Te paso las lineas de codigo con las que envio el XML al Web Service

oHTTP = CREATEOBJECT('MSXML2.XMLHTTP')
oHTTP.OPEN("POST", {direccion donde se envia el XML}, .F.)
oHTTP.setRequestHeader("Content-Type", "text/xml")
oHTTP.SEND({objeto XML a enviar})

Para esto el documento XML que envias debe de estar ya armado, y si es necesario firmado, ya que el que yo envio se anexa con firma electronica y certificado y van dentro del mismo XML.

Saludos...
Message has been deleted

Tlacuilo

unread,
Sep 5, 2012, 2:58:42 PM9/5/12
to publice...@googlegroups.com
Hola Antonio...

Creo el XML y lo envio usando el ejemplo que mostraste anteriormente...pero recibo lo siguiente:

"Request format is invalid: text/xml."

Pienso que es por la cadena que se esta mandando...a ti te paso algo similar???...de ser asi, como lo resolviste???

ArturoPC

unread,
Sep 5, 2012, 3:10:40 PM9/5/12
to publice...@googlegroups.com
Te recomiendo que antes de enviar el XML lo validez con su esquema XSD.
Una buena página para hacerlo es:

Slds

ArturoPC

JAVI33

unread,
Dec 3, 2012, 5:44:40 PM12/3/12
to publice...@googlegroups.com
Que tal Antonio, he utilizado un web service para factura electrónica el cual ya lo puedo consumir pero no tengo mucha información sobre la firma electrónica (archivo o token, APIS) y estoy ahí detenido, por favor me puedes indicar donde encontraste información al respecto.


Saludos y te agradezco

Charles Game

unread,
May 31, 2015, 10:15:39 AM5/31/15
to publice...@googlegroups.com, sitacs...@gmail.com


El lunes, 3 de diciembre de 2012, 17:44:40 (UTC-5), JAVI33 escribió:
Que tal Antonio, he utilizado un web service para factura electrónica el cual ya lo puedo consumir pero no tengo mucha información sobre la firma electrónica (archivo o token, APIS) y estoy ahí detenido, por favor me puedes indicar donde encontraste información al respecto.


Saludos y te agradezco

 Como lo consumes desde fox yo lo firmo con un .jar de java invocado con el shell desde fox
Reply all
Reply to author
Forward
0 new messages