*
* compilacao hbmk2 soap -lhbwin -lhbct -es2
*
function main()
LOCAL cXml, cSoapAction, cWebservice, cOperation, cRetorno
cls
cWebservice := "http://homologacao.averba.com.br/webserver/index.soap"
cSoapAction := "urn:ATMWebSvr#averbaCTe20"
cOperation := "averbaCTe20Request"
*-
cxlido:=HB_Memoread('meux.xml')
cXml := ""
*cXml += []
cXml += XmlTag( "usuario", "TESTES" )
cXml += XmlTag( "senha", "BASE" )
cXml += XmlTag( "codatm", "11340073" )
*--
cxml +=''
cxml +=''
*cXml += []
cXml := SoapEnvelope( cXml, cOperation ) //
*--
cRetorno := MicrosoftXmlSoapPost( cXml, cSoapAction, cWebservice )
*--
HB_MemoWrit('retorno.xml',cRetorno)
? cRetorno
RETURN
*-------------------------------------------------
*-------------------------------------------------
FUNCTION SoapEnvelope( cXml, cOperation )
LOCAL cXmlEnvelope:=''
cXmlEnvelope+=''
cXmlEnvelope+=''
cXmlEnvelope+=''
cXmlEnvelope+=''
cXmlEnvelope += cXml // aqui seu XML dentro do envelope
*cXmlEnvelope += []
cXmlEnvelope += []
cXmlEnvelope += []
HB_MemoWrit('vai.xml',cXmlEnvelope)
RETURN cXmlEnvelope
*------------------------------------------------------
*------------------------------------------------------
FUNCTION MicrosoftXmlSoapPost( cXmlSoap, cSoapAction, cWebService )
LOCAL oServer, nCont, cRetorno := "*ERRO*", cXmlRetorno := ""
BEGIN SEQUENCE WITH { |e| Break(e) }
oServer := win_OleCreateObject( "MSXML2.ServerXMLHTTP")
oServer:Open( "POST", cWebService, .F. )
oServer:SetRequestHeader( "SOAPAction", cSoapAction )
oServer:SetRequestHeader( "Content-Type", "application/soap+xml; charset=utf-8" )
oServer:Send( cXmlSoap )
oServer:WaitForResponse( 500 )
cRetorno := oServer:ResponseBody
ENDSEQUENCE
IF ValType( cRetorno ) == "C"
cXmlRetorno := cRetorno
ELSEIF cRetorno == NIL
cXmlRetorno := "*ERRO*"
ELSE
cXmlRetorno := ""
FOR nCont = 1 TO Len( cRetorno )
cXmlRetorno += Chr( cRetorno[ nCont ] )
NEXT
ENDIF
RETURN cXmlRetorno
*--------------------------------
*--------------------------------
FUNCTION XmlTag( cNome, cConteudo )
IF Empty( cConteudo )
RETURN "<" + cNome + " />"
ENDIF
RETURN "<" + cNome + ">" + cConteudo + "" + cNome + ">"