Estou precisando receber o retorno de um rastreamento de veículos...dai usei o código abaixo!
Código: Selecionar todos
#include "hbcompat.ch"
#include "hbxml.ch"
#include "hbmxml.ch"
//-----------------
FUNCTION Rastreador
//-----------------
LOCAL cWebService := 'http://webservice.onixsat.com.br'
LOCAL cXml, oXml
cXml := '<RequestMensagemCB>'+hb_eol()
cXml += ' <login>xxx</login>'+hb_eol()
cXml += ' <senha>123456</senha>'+hb_eol()
cXml += ' <mId>1</mId>'+hb_eol()
cXml += '</RequestMensagemCB>'
HB_MemoWrit('enviado.xml',cXml)
oXml := TXMLDocument():New( cXml, HBXML_STYLE_NOESCAPE )
IF oXml:nError != HBXML_ERROR_NONE
TONE( 321, 2 )
MSGBOX1( {'Erro na criação do XML !!!',oXML:nError}, 'Erro...',,'&OK', ArqAdm[cALERT_TIT], ArqAdm[cALERT_BORD], ArqAdm[cALERT_IN] )
xret := .F.
ELSE
xretorno := MicrosoftXmlRequest( cXml, cWebservice )
IF xretorno == NIL
xret := .F.
ELSE
// Criar o arquivo zip e descompactar
HB_MemoWrit('retorno.xml',xretorno)
HB_UnZipFile('retorno.xml')
xret := .T.
END
END
RETURN(xret)
//------------------------------------------------------
FUNCTION MicrosoftXmlRequest( cXmlRequest, cWebService )
//------------------------------------------------------
LOCAL oServer, oDOMDoc, cRetorno, cXmlRetorno, nCont
oServer := WIN_OLECREATEOBJECT( "MSXML2.ServerXMLHTTP")
oServer:Open( "POST", cWebService, .F. )
oDOMDoc := Win_oleCREATEOBJECT("MSXML2.DOMDocument")
oDOMDoc:async = .F.
oDOMDoc:validateOnParse = .T.
oDOMDoc:resolveExternals := .F.
oDOMDoc:preserveWhiteSpace = .T.
oDOMDoc:LoadXML(cXmlRequest)
IF oDOMDoc:parseError:errorCode <> 0
TONE( 321, 2 )
MSGBOX1( {'Erro no carregamento do XML !!!',oDOMDoc:parseError:errorCode}, 'Erro...',,'&OK', ArqAdm[cALERT_TIT], ArqAdm[cALERT_BORD], ArqAdm[cALERT_IN] )
ELSE
TRY
oServer:Send(oDOMDoc:xml)
WHILE oServer:readyState <> 4
HB_milliseconds(500)
END
cRetorno := oServer:responseText
CATCH oError
TONE( 321, 2 )
MSGBOX1( 'Falha no envio do XML !!!', 'Erro...',,'&OK', ArqAdm[cALERT_TIT], ArqAdm[cALERT_BORD], ArqAdm[cALERT_IN] )
END
END
IF VALTYPE( cRetorno ) == "C"
cXmlRetorno := cRetorno
ELSE
IF VALTYPE( cRetorno ) == "A"
cXmlRetorno := ""
FOR nCont = 1 TO LEN( cRetorno )
cXmlRetorno += CHR( cRetorno[ nCont ] )
NEXT
ELSE
cXmlRetorno := ""
END
END
RETURN(cXmlRetorno)
As palavras dele: "voce precisa capturar os bytes, montar o arquivo zip e descompactar." e "ele esta com aqueles caracteres pois voce nao montou o arquivo zip, que vai conter um xml la dentro."
Alguém ja passou por isso. Qual seria a saída ??
Em anexo o arquivo retorno.xml, que não é um XML, pois segundo o fabricante, tenho que descompactar!
Qual seria a função para montar esse tal ZIP e depois descompactar para gerar o XML que irá conter as informações do rastreamento

