Página 1 de 1

soap

Enviado: 25 Jul 2011 17:06
por coutinho
amigos

estou utilizando o soap para consumir webservice

mas estou com erro de parse

segue codigo

alguem para ajudar , agradeço

Código: Selecionar todos

FUNCTION CallWebService()

   LOCAL uResult

   cCnpj          := "09072237000152"
   cTerminal      := "000001"
   cAutentica     := "0070244923"

  cXMlBody = '<?xml version="1.0" encoding="utf-8"?>'          +;
              '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +;
              ' <soap:Body>'                                    +;
              ' <WS_Busc_Projetos xmlns="http://tempuri.org/">' +;
              ' <identifica><cnpj>' + cCnpj + '</cnpj><terminal>' + cTerminal + '</terminal><autentica>' + cAutentica + '</autentica></identifica>'+;
              ' </WS_Busc_Projetos>'                            +;
              ' </soap:Body>'                                   +;
              '</soap:Envelope>'

  //-- instancia objeto - transport (comunicacao web service)

  try
     oHttp    := CreateObject( "PocketSOAP.HTTPTransport" )
  catch
     try
      oHttp    := CreateObject( "PocketSOAP.HTTPTransport" )
     catch
        Msginfo("Erro na criação do objeto PocketSOAP.HTTPTransport : " + Ole2TxtError())
        return NIL
     end
  end

  //-- instancia objeto - soap (envelope)

  try
     Envelope := CreateObject( "PocketSOAP.Envelope.11" )
  catch
     try
      Envelope := CreateObject( "PocketSOAP.Envelope.11" )
     catch
        Msginfo("Erro na criação do objeto PocketSOAP.Envelope.11 : " + Ole2TxtError())
        return NIL
     end
  end

   Envelope:SetMethod( "WS_Busc_Projetos" , "http://tempuri.org/" )

   Envelope:Parameters:Create( "cIdentifica" , cXMlBody )

   //-- name space
   
   oHttp:SOAPAction( "http://tempuri.org/WS_Busc_Projetos" )

   //-- ws calling

   oHttp:Send( "http://www.conectapdv.com.br/concentrador/concentrador.asmx?wsdl" , Envelope:Serialize() )

//-- erro aqui

   Envelope:Parse( oHttp )

   uResult := Envelope:Parameters:Item( 0 ):Value

   ? uresult

RETURN NIL

soap

Enviado: 26 Jul 2011 09:33
por athayde
da uma olhada nesse exemplo: https://pctoledo.org/forum/viewto ... 731#p68731
nao uso o pocket mas o principio acredito que é o mesmo
e outra coisa nao sei por qual motivo mas alguns webservices não aceita um xml dentro do outros com as tags ai tem que se usar como o meu exemplo &lt
tem soaps genericos online para testar
http://www.soapclient.com/soaptest.html
http://www.service-repository.com/client/operations

gerador md5
http://www.connectionspeedtest.net/md5password.html

[]s
Fernando

soap

Enviado: 26 Jul 2011 13:18
por athayde
aqui esta

Código: Selecionar todos

#include "common.ch"
#include "hbclass.ch"
#include "hbwin.ch"
#include "hbcompat.ch"

FUNCTION main()

xmldom = CREATEOBJECT("MSXML2.DOMDocument")
xmldom:async = .T.
xmldom:validateOnParse = .T.
xmldom:resolveExternals := .T.
xmldom:preserveWhiteSpace = .T.

url := "http://www.conectapdv.com.br/concentrador/concentrador.asmx"
xmldoc = CREATEOBJECT("MSXML2.XMLHTTP")
xmldoc:open("POST", url, .F.)
xmldoc:SetRequestHeader( "Host" , "www.conectapdv.com.br" )
xmldoc:SetRequestHeader( "Content-Type" , "text/xml; charset=utf-8" )
xmldoc:SetRequestHeader( "SOAPAction" , "http://tempuri.org/WS_Busc_Projetos" )

cCnpj := "09072237000152"
cTerminal := "000001"
cAutentica := "0070244923"

Texto := '<?xml version="1.0" encoding="utf-8"?>'
Texto += '<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">'
Texto += '<SOAP-ENV:Body>'
Texto += '<ns1:WS_Busc_Projetos xmlns:ns1="http://tempuri.org/">'

Texto += '<ns1:cIdentifica>'

Texto += '<identifica>' // para quem não sabe usa-se < para < e > para >, pois é um xml dentro de outro
Texto += '<cnpj>'+cCnpj+'</cnpj>'
Texto += '<terminal>'+cTerminal+'</terminal>'
Texto += '<autentica>'+cAutentica+'</autentica>'
Texto += '</identifica>'
Texto += '</ns1:cIdentifica>'

Texto += '</ns1:WS_Busc_Projetos>'
Texto += '</SOAP-ENV:Body>'
Texto += '</SOAP-ENV:Envelope>'

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

? "text "+xmldom:text
? "XML1 "+xmldom:xml

xmldoc:send(xmldom:xml)

?
do while xmldoc:readyState <> 4
?? ALLTRIM(STR(xmldoc:readyState))
millisec(50)
enddo

? "Resposta"
? "TEXT "+xmldoc:responseText
? "XML "+ xmldoc:responseXML:xml
[]s
Fernando

soap

Enviado: 26 Jul 2011 13:53
por coutinho
obrigado

vou testar

soap

Enviado: 26 Jul 2011 14:14
por athayde
deu certo?

soap

Enviado: 26 Jul 2011 14:44
por coutinho
deu não

soap

Enviado: 26 Jul 2011 14:48
por athayde
eu mandei o fonte completo
é só salvar como um nome.prg
e compilar
hbmk2 nome -lhbwin -lhbct

vai retornar um xml grande
la dentro das tags vai ter la pharmalink homologacao o numero de inscricao, ....

meus msn: fernando@fjsistemas.com.br
[]s
Fernando

soap

Enviado: 26 Jul 2011 15:05
por coutinho
amigao , mandou pra onde

soap

Enviado: 26 Jul 2011 16:33
por coutinho
funcionou

obrigado

soap

Enviado: 21 Dez 2011 10:10
por Wanderlei
Fernando, me ajude com este xml do Pharmalink.
Não sei o que está errado, mas não aceita na hora de enviar, diz que tem erro no xml.

Texto := '<?xml version="1.0" encoding="utf-8"?>'
Texto += '<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">'
Texto += '<SOAP-ENV:Body>'
Texto += '<ns1:WS_Efet_Transac xmlns:ns1="http://tempuri.org/">'
Texto += '<ns1:cIdentifica>'
Texto += '<identifica>'
Texto += '<cnpj>'+cgcfil+'</cnpj>'
Texto += '<terminal>'+strzero(val(Maq),6)+'</terminal>'
Texto += '<autentica>'+PH_Autentica+'</autentica>'
Texto += '</identifica>'
Texto += '</ns1:cIdentifica>'
Texto += '<ns1:cProjeto>'+pProjeto+'</ns1:cProjeto>'
Texto += '<ns1:cTimestamp>'+GeraTimestamp()+'</ns1:cTimestamp>'
Texto += '<ns1:cCartao>'+pCartao+'</ns1:cCartao>'
Texto += '<ns1:nCPF>00000000000</ns1:nCPF>'
Texto += '<ns1:nNSU_host>'+pNSU_Host+'</ns1:nNSU_host>'
Texto += '<ns1:produtos>'
Texto += '<produto>'
Texto += '<ean>7896206401146</ean>'
Texto += '<qtdade>1</qtdade>'
Texto += '<prc_bruto>1000</prc_bruto>'
Texto += '<prc_liquido>800</prc_liquido>'
Texto += '<codigo>500001</codigo>'
Texto += '<descricao>ATACAND 16 MG COM 30 CPS</descricao>'
Texto += '</produto>'
Texto += '</ns1:produtos>'
Texto += '</ns1:WS_Efet_Transac>'
Texto += '</SOAP-ENV:Body>'
Texto += '</SOAP-ENV:Envelope>'