* * 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 + ""