webservice harbour nfe status servico
Enviado: 02 Mai 2011 10:40
aqui segue um exemplo de verificar o status do servico com harbour
estou usando o ServerXMLHTTP pois é o que deu certo, só que nao sei selecionar o certificado ele seleciona sozinho, isso é um problema quando se tem varios
o XMLHTTP nao consegui dar o send sempre demorava e dava argument error
se alguem souber como melhorar esse código seria interessante pois é um passo para os WS da vida
hbmk2 nome do prg -lhbwin -lhbct
[]s
Fernando
estou usando o ServerXMLHTTP pois é o que deu certo, só que nao sei selecionar o certificado ele seleciona sozinho, isso é um problema quando se tem varios
o XMLHTTP nao consegui dar o send sempre demorava e dava argument error
se alguem souber como melhorar esse código seria interessante pois é um passo para os WS da vida
hbmk2 nome do prg -lhbwin -lhbct
Código: Selecionar todos
#include "common.ch"
#include "hbclass.ch"
#include "hbwin.ch"
#include "hbcompat.ch"
FUNCTION MAIN()
xmldom = win_oleCREATEOBJECT("MSXML2.DOMDocument")
xmldom:async = .F.
xmldom:validateOnParse = .T.
xmldom:resolveExternals := .F.
xmldom:preserveWhiteSpace = .T.
Texto := '<?xml version="1.0" encoding="utf-8"?>'
Texto := Texto + '<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">'
Texto := Texto + '<soap12:Header>'
Texto := Texto + '<nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">'
Texto := Texto + '<cUF>35</cUF>'
Texto := Texto + '<versaoDados>2.00</versaoDados>'
Texto := Texto + '</nfeCabecMsg>'
Texto := Texto + '</soap12:Header>'
Texto := Texto + '<soap12:Body>'
Texto := Texto + '<nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">'
Texto := Texto + '<consStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00">'
Texto := Texto + '<tpAmb>1</tpAmb>'
Texto := Texto + '<cUF>35</cUF>'
Texto := Texto + '<xServ>STATUS</xServ>'
Texto := Texto + '</consStatServ>'
Texto := Texto + '</nfeDadosMsg>'
Texto := Texto + '</soap12:Body>'
Texto := Texto +'</soap12:Envelope>'
xmldoc = win_oleCREATEOBJECT("MSXML2.ServerXMLHTTP.6.0")
url = "https://nfe.fazenda.sp.gov.br/nfeweb/services/nfestatusservico2.asmx"
xmldoc:open("POST", url, .F.)
xmldoc:setRequestHeader("SOAPAction", "http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2/nfeStatusServicoNF2")
xmldoc:setRequestHeader("Content-Type", "application/soap+xml; charset=utf-8")
xmldom:LoadXML(Texto)
IF xmldom:parseError:errorCode = 0
? "XML Carregado"
ELSE
lcErrorMsg = "Não foi possível carregar o documento pois ele não corresponde ao seu Schema"
lcErrorMsg = lcErrorMsg + " Linha: " + STR(xmldom:parseError:line)
lcErrorMsg = lcErrorMsg + " Caractere na linha: " + STR(xmldom:parseError:linepos)
lcErrorMsg = lcErrorMsg + " Causa do erro: " + xmldom:parseError:reason;
+"code: "+STR(xmldom:parseError:errorCode)
? lcErrorMsg
ENDIF
lerro = .F.
TRY
xmldoc:send(xmldom:xml)
CATCH oError
? "Falha envio de email"+HB_OsNewLine()+ ;
"Error: " + Transform(oError:GenCode, nil) + ";" +HB_OsNewLine()+ ;
"SubC: " + Transform(oError:SubCode, nil) + ";" +HB_OsNewLine()+ ;
"OSCode: " + Transform(oError:OsCode, nil) + ";" +HB_OsNewLine()+ ;
"SubSystem: " + Transform(oError:SubSystem, nil) + ";" +HB_OsNewLine()+ ;
"Mensangem: " + oError:Description
lerro = .T.
END
IF !lerro
?
do while xmldoc:readyState <> 4
?? ALLTRIM(STR(xmldoc:readyState))
millisec(500)
enddo
endif
? "TEXT "+xmldoc:responseText
? "XML "+ xmldoc:responseXML:xml
quit
Fernando