Página 1 de 1

PocketSoap

Enviado: 28 Nov 2012 09:46
por anacatacombs
Bom dia queridos colegas.
Estou fazendo alguns testes como PocketSoap e estou bastante animada com os resultados.
Durante o desenvolvimento,encontrei um problema que me "travou".

Código: Selecionar todos

      oEnvelope := CreateObject( "PocketSOAP.Envelope.2" )
      oHttp      := CreateObject( "PocketSOAP.HTTPTransport.2" )
      oEnvelope:EncodingStyle = ""
      oEnvelope:SetMethod( "Registraversao","EndereçodoService" )
      oEnvelope:Parameters:Create( "CpfCnpj", cgc )
      oEnvelope:Parameters:Create( "Versao" , vTpSys+" "+"testeversao")
      oHttp:Send("EndereçodoService?wsdl",oEnvelope:Serialize() )
     oEnvelope:Parse(oHttp)  // aqui da o erro
Na linha do PARSE dá erro de Member not found.
Uso xHarbour 1.0.0, Windows 7 64.

Ao instalar o pocketSoap, eu registrei as DLL's.
O estranho, é que eu consigo comunicar corretamente com o webservice.
Nesse caso, eu sei que comunicou pq é um webservice interno, então fica mais fácil saber o que está acontecendo.
Alguém já passou por esse problema?

PocketSoap

Enviado: 28 Nov 2012 12:15
por alxsts
Olá!

Não estaria faltando o SOAPAction? Algo do tipo

Código: Selecionar todos

oTttp:SOAPAction = "< URL >"
É apenas um palpite...

PocketSoap

Enviado: 28 Nov 2012 13:48
por JoséQuintas
Outro palpite... imagino que o software não seja brasileiro...
Então.. "endereço", achei esquisito.

Curiosidade:
Qual seria a vantagem de usar esse PocketSoap?

É que o Windows já tem isso, por isso minha curiosidade.

PocketSoap

Enviado: 28 Nov 2012 14:03
por anacatacombs
José, eu estou usando pq não consegui criar o objeto utilizando o do windows.

PocketSoap

Enviado: 28 Nov 2012 16:19
por JoséQuintas
Seria isto?

Código: Selecionar todos

METHOD MicrosoftXmlSoapPost() CLASS Sefaz
   LOCAL oServer, nCont, aRetorno
   oServer := win_oleCreateObject( "MSXML2.ServerXMLHTTP")
   IF ::Certificado != NIL
      oServer:setOption( 3, "CURRENT_USER\MY\" + ::Certificado )
   ENDIF   
   oServer:Open("POST", ::UrlWS, .F.)
   oServer:SetRequestHeader("SOAPAction", ::SoapAction)
   oServer:SetRequestHeader("Content-Type", "application/soap+xml; charset=utf-8")
   oServer:Send(::XmlSoap)
   DO WHILE oServer:ReadyState <> 4
      MilliSec(500)
   ENDDO
   aRetorno := oServer:ResponseBody
   IF ValType(aRetorno) == "C"
      ::XmlRetorno := aRetorno
   ELSEIF aRetorno == NIL
      ::XmlRetorno := "*ERRO*"
   ELSE   
      ::XmlRetorno := ""
      FOR nCont = 1 TO Len(aRetorno)
         ::XmlRetorno += Chr(aRetorno[nCont])
      NEXT
   ENDIF   
    RETURN NIL

PocketSoap

Enviado: 28 Nov 2012 16:33
por JoséQuintas
O envelope do SOAP, faço manualmente.
Pro projeto NFE e CTE uso assim:

Código: Selecionar todos

METHOD XmlSoapPost() CLASS Sefaz
   ::XmlSoap := ""
   ::XmlSoap += [<?xml version="1.0" encoding="UTF-8"?>]
   ::XmlSoap += [<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">]
   ::XmlSoap +=    [<soap12:Header>]
   ::XmlSoap +=       [<] + ::NfeCte + [CabecMsg xmlns="] + ::Servico + [">]
   ::XmlSoap +=          [<cUF>] + ::Uf + [</cUF>]
   ::XmlSoap +=          [<versaoDados>] + ::Versao + [</versaoDados>]
   ::XmlSoap +=       [</] + ::NfeCte + [CabecMsg>]
   ::XmlSoap +=    [</soap12:Header>]
   ::XmlSoap +=    [<soap12:Body>]
   ::XmlSoap +=       [<] + ::NfeCte + [DadosMsg xmlns="] + ::Servico + [">]
   ::XmlSoap += ::XmlDados
   ::XmlSoap +=    [</] + ::NfeCte + [DadosMsg>]
   ::XmlSoap +=    [</soap12:Body>]
   ::XmlSoap += [</soap12:Envelope>]
   ::MicrosoftXmlSoapPost()
   RETURN NIL
O projeto hbnfe também poderia servir de referência. Tem aqui no fórum.
Pode usar Microsoft Soap ou libcurl.

PocketSoap

Enviado: 28 Nov 2012 16:36
por anacatacombs
José, e Alex:
Obrigada pela atenção e pelas contribuições, tenho certeza que será muito util.
Consegui resolver o problema. Achei na internet uma versão pra window 7 e ficou tudo 100%.
Mais uma vez, obrigada.
:)

PocketSoap

Enviado: 06 Jan 2013 13:09
por rochinha
Amiguinhos,

sempre que possivel mantenham atualizados o MSXML ou tenham as versões 4, 5 e 6 instaladas para evitar erros de parse

PocketSoap

Enviado: 07 Jan 2013 08:00
por anacatacombs
Obrigada pela dica, Rochinha