Histórico da Página
Composition Setup |
---|
import.css=/download/attachments/6062824/tecnologia.css
|
...
Pagetitle | ||||
---|---|---|---|---|
|
Um documento WSDL, que descreve um Web Service, pode indicar que o WS aceita mensagens usando os padrões SOAP 1.1 e SOAP 1.2.
SOAP 1.1 e SOAP 1.2 possuem algumas diferenças:
- SOAP 1.1 foi desenvolvido por e é propriedade de 5 empresas (Microsoft, IBM, Lotus, Developmentor, and UserLand). SOAP 1.2 está sendo desenvolvido pelo World Wide Web Consortium (W3C), com contribuições de mais de 50 empresas, e será licenciada livre de royalties.
- SOAP 1.1 está baseada em XML 1.0. SOAP 1.2 está baseada no Conjunto de Informações XML (XML Infoset).
- A especificação de SOAP 1.1 é definida em um documento. A especificação de SOAP 1.2 é definida em 3 documentos (um documento básico, o framework básico de tratamento de mensagens, e os complementos (convenção de RPC, SOAP encoding, padrões de troca de mensagens, etc.))
- SOAP 1.2 coloca "application/soap+xml" no header HTTP Content-Type e SOAP 1.1 coloca "text/xml".
- SOAPAction é obrigatório para SOAP 1.1 and opcional para SOAP 1.2.
- SOAP 1.2 usa o endereço de namespace "http://www.w3.org/2003/05/soap-envelope/" para o Envelope SOAP e SOAP 1.1 usa "http://schemas.xmlsoap.org/soap/envelope/".
A classe AdvPL TWsdlManager dá suporte a SOAP 1.1 e SOAP 1.2. Caso o WS informe que aceita ambos os padrões, a classe irá utilizar SOAP 1.2.
Nesse caso, se for enviada uma mensagem personalizada, através do método SendSoapMsg, deve-se ter o cuidado com o namespace utilizado para as tags do envelope SOAP.
Bloco de código | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| language | cpp
| |||||||||||
user function wsdl2()
Local lRet := Nil
Local cMsg := ""
Local oWsdl := Nil
Local cMsgRet := ""
oWsdl := TWsdlManager():New()
oWsdl:cSSLCACertFile := "\certs\sefazca.pem"
oWsdl:cSSLCertFile := "\certs\sefazcert.pem"
oWsdl:cSSLKeyFile := "\certs\sefazkey.pem"
oWsdl:cSSLKeyPwd := "password"
oWsdl:nSSLVersion := 1
oWsdl:nTimeout := 120
xRet := oWsdl:ParseURL("https://www.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx?wsdl")
if xRet == .F.
conout("Erro ParseURL: " + oWsdl:cError)
Return
endif
// Define a operação
lRet := oWsdl:SetOperation("nfeDownloadNF")
If lRet == .F.
conout("Erro SetOperation: " + oWsdl:cError)
return
EndIf
// Mensagem enviada com namespace de SOAP 1.1, que dará erro, pois, como o WSD possui SOAP 1.1 e 1.2, a classe utilizará SOAP 1.2
// cMsg := '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:nfed="http://www.portalfiscal.inf.br/nfe/wsdl/NfeDownloadNF">' + CRLF
// cMsg += ' <soapenv:Header>' + CRLF
// cMsg += ' <nfed:nfeCabecMsg>' + CRLF
// cMsg += ' <nfed:versaoDados>1.00</nfed:versaoDados>' + CRLF
// cMsg += ' <nfed:cUF>31</nfed:cUF>' + CRLF
// cMsg += ' </nfed:nfeCabecMsg>' + CRLF
// cMsg += ' </soapenv:Header>' + CRLF
// cMsg += ' <soapenv:Body>' + CRLF
// cMsg += ' <nfed:nfeDadosMsg>' + CRLF
// cMsg += ' <downloadNFe versao="1.00" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>1</tpAmb><xServ>DOWNLOAD NFE</xServ><CNPJ>86501400000104</CNPJ><chNFe>31150502806413000274550010000074971000042278</chNFe></downloadNFe>' + CRLF
// cMsg += ' </nfed:nfeDadosMsg>' + CRLF
// cMsg += ' </soapenv:Body>' + CRLF
// cMsg += '</soapenv:Envelope>'
// Mesma mensagem que a anterior, mas com namespace de SOAP 1.2
cMsg := '<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:nfed="http://www.portalfiscal.inf.br/nfe/wsdl/NfeDownloadNF">' + CRLF
cMsg += ' <soapenv:Header>' + CRLF
cMsg += ' <nfed:nfeCabecMsg>' + CRLF
cMsg += ' <nfed:versaoDados>1.00</nfed:versaoDados>' + CRLF
cMsg += ' <nfed:cUF>31</nfed:cUF>' + CRLF
cMsg += ' </nfed:nfeCabecMsg>' + CRLF
cMsg += ' </soapenv:Header>' + CRLF
cMsg += ' <soapenv:Body>' + CRLF
cMsg += ' <nfed:nfeDadosMsg>' + CRLF
cMsg += ' <downloadNFe versao="1.00" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>1</tpAmb><xServ>DOWNLOAD NFE</xServ><CNPJ>86501400000104</CNPJ><chNFe>31150502806413000274550010000074971000042278</chNFe></downloadNFe>' + CRLF
cMsg += ' </nfed:nfeDadosMsg>' + CRLF
cMsg += ' </soapenv:Body>' + CRLF
cMsg += '</soapenv:Envelope>'
// Envia uma mensagem SOAP personalizada ao servidor
lRet := oWsdl:SendSoapMsg( cMsg )
If lRet == .F.
conout( "Erro SendSoapMsg: " + oWsdl:cError )
conout( "Erro SendSoapMsg FaultCode: " + oWsdl:cFaultCode )
Return
EndIf
cMsgRet := oWsdl:GetSoapResponse()
conout( cMsgRet )
return
|
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas