webservice

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

coutinho
Usuário Nível 1
Usuário Nível 1
Mensagens: 21
Registrado em: 18 Jul 2011 14:14
Localização: rio de janeiro/rj

webservice

Mensagem por coutinho »

Senhores ,

estou tentando acessar o webservice abaixo
enviando um xml e aguardando retorno em xml
so que esta retornando em branco
alguem poderia me ajudar onde posso estar errando

Código: Selecionar todos

Function Gera_Elegibilidade()

    local cCnpj      := "28763118000190"
    local cTerminal  := "003"
    local cAutentica := "51131212"
    local cProjeto   := "SAN001"
    local cTimestamp := STRTRAN(DTOC(date()),"/","") + STRTRAN(time(),":","")
    local cNcartao   := "4116680730400158"
    local cCpf       := "0"
    local cNsu       := "60"                                     //-- numero da transacao
    local cCanal     := "''"

    //-- verifica se ha conexão com a internet

    IF(!IsInternet())
      MsgInfo("Necessário conexão com internet."+CRLF+"Operação cancelada","Informação")
      RETURN(.f.)
    ENDIF

    //-- Abertura das funções para WebService do xharbour - objeto HTTP

    try
      http := CreateObject( "MSXML2.XMLHTTP" )
    catch
      try
        http := CreateObject( "MSXML2.XMLHTTP" )
      catch
        Msg("Erro na criação do objeto MSXML2.XMLHTTP : " + Ole2TxtError())
      end
    end

    //-- cria objeto xml

    try
      doc := CreateObject( "MSXML2.DOMDocument" )
    catch
      try
        doc := CreateObject( "MSXML2.DOMDocument" )
      catch
        Msg("Erro na criacao do objeto MSXML2.DOMDocument : " + Ole2TxtError())
        return NIL
      end
    end

    //-- XML request

    cXMlBody := '<?xml version="1.0" encoding="utf-8"?>'          +;
                '<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">' +;
                ' <soap12:Body>'                                  +;
                ' <WS_Eleg_Portador xmlns="http://tempuri.org/">' +;
                ' <cIdentifica><identifica><cnpj>' + cCnpj + '</cnpj><terminal>' + cTerminal + '</terminal><autentica>' + cAutentica + '</autentica></identifica></cIdentifica>'+;
                ' <cProjeto>'   + cProjeto   + '</cProjeto>'      +;
                ' <cTimestamp>' + cTimestamp + '</cTimestamp>'    +;
                ' <cCartao>'    + cNcartao   + '</cCartao>'       +;
                ' <nCPF>'       + cCpf       + '</nCPF>'          +;
                ' <cCanal>'     + cCanal     + '</cCanal>'        +;
                ' </WS_Eleg_Portador>'                            +;
                ' </soap12:Body>'                                 +;
                '</soap12:Envelope>'

    //-- endereço WebService

    http:Open( "POST" , "http://www.conectapdv.com.br/concentrador/concentrador.asmx?wsdl" , .f. )
    http:SetRequestHeader( "Host"         , "www.conectapdv.com.br" )
    http:SetRequestHeader( "Content-Type" , "text/xml; charset=utf-8" )
    http:SetRequestHeader( "SOAPAction"   , "http://tempuri.org/WS_Eleg_Portador" )

    //-- Carrega o request

    doc:LoadXML( cXmlBody )

    IF doc:parseError:errorCode != 0
    lcErrorMsg =  "Não foi possível carregar o documento pois ele não corresponde ao seu Schema"
    lcErrorMsg += " Linha: " + STR(doc:parseError:line)
    lcErrorMsg += " Caractere na linha: " + STR(doc:parseError:linepos)
    lcErrorMsg += " Causa do erro: " + doc:parseError:reason +"code: "+STR(doc:parseError:errorCode)
    msg(lcErrorMsg)
    Return Nil
  ENDIF

    //-- Envia o request

    TRY
      http:Send( doc:xml )
  CATCH oError
    msg("Falha de envio "+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 )
  END

    //-- Recebe o response

    response = http:responseText

    //-- Cria o arquivo temporário e armazena o XML retornado

    oText:= TTxtFile():New( "retorno.xml" )

    If oText:Open()
      oText:add(alltrim(response))
    Endif

    oText:close()

Return Nil
tem que ter o pocketsoap instalado ?

utilizo o windows 7 , acho que ja tem instalado este pacote..
Editado pela última vez por Maligno em 18 Jul 2011 19:58, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

webservice

Mensagem por Jairo Maia »

Olá Coutinho,

Não sei se vai ajudar, mas em outro fórum um colega teve um problema similar, também com Windows Seven: Legislação Fiscal e Tributária. Ele resolveu colocando um retardo de 0.5 segundos.

Antes de tratar o arquivo de retorno, tente usar um retardo com Inkey( nTempo ), ou tipo assim:

Código: Selecionar todos

Tentativa := 0
While ! File( "NomeDoArquivo.Extensao" )
 InKey( .2 )
 Tentativa++
 If  Tentativa = 20  // Máximo dois segundos?
  Exit
 EndIf
EndDo
O problema que para usar de forma genérica como acima p.ex., é que precisa garantir que o arquivo seja excluído antes de enviar o request. (Claro, se o problema estiver relacionado a retardo).
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

webservice

Mensagem por angeiras »

Olá,

Não testei ainda com windows 7, mas no XP uso praticamente da mesma forma ( só que para ler/enviar informações para ANVISA ) e não precisei instalar nada.

Tive problemas também em ler o resultado usando reponseText. Já tentou usar o reponseXML ?

[]s
Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
coutinho
Usuário Nível 1
Usuário Nível 1
Mensagens: 21
Registrado em: 18 Jul 2011 14:14
Localização: rio de janeiro/rj

webservice

Mensagem por coutinho »

o amigo , tem como vc me mostrar como vc fez .
angeiras
Usuário Nível 3
Usuário Nível 3
Mensagens: 134
Registrado em: 21 Nov 2005 20:53
Localização: Olinda/PE

webservice

Mensagem por angeiras »

Olá,

Desculpe a demora em responder, mas vamos ao que interessa.

O meu post fez referencia a forma como voce está lendo as informações ( da mesma forma que faço ). O que relatei foi um problema que tive no login do SNGPC : em certos casos, ao usar o método responseText dava errado. Então troquei para o método responseXML e passou a funcionar normal. Por exemplo, na minha função de login

Código: Selecionar todos


STATIC FUNCTION LOGIN( cCookie, memail, msenha )
************************************************
   local response

   http:Open( "POST", "https://sngpc.anvisa.gov.br/includes/AcessoPersistir.asp", .F. )
   http:SetRequestHeader( "Accept"          , "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" )
   http:SetRequestHeader( "Referer"         , "https://sngpc.anvisa.gov.br/includes/login.asp" )
   http:SetRequestHeader( "Accept-Language" , "pt-br" )
   http:SetRequestHeader( "Accept-Encoding" , "gzip, deflate" )
   http:SetRequestHeader( "User-Agent"      , "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; BTRS25991; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; AskTB5.6)" )
   http:SetRequestHeader( "Host"            , "sngpc.anvisa.gov.br" )
   http:SetRequestHeader( "Connection"      , "Keep-Alive" )
   http:SetRequestHeader( "Keep-Alive"      , "115" )
   http:SetRequestHeader( "Cookie"          , cCookie )
   http:SetRequestHeader( "Content-Type"    , "application/x-www-form-urlencoded" )

   http:send( "email=" + memail + "&senha=" + msenha + "&Entrar=Entrar" )
   response  := http:responseXML
RETURN response
quando retornava com a variável response lendo por responseText, não conseguia obter as informações necessárias. Quando usei responseXML, deu certo. Aparentemente o retorno de ambos era um arquivo XML, mas com responseText vinha "truncado".

[]s
Angeiras
Clipper 5.2e + sixcdx + catools + nanfor
xHarbour 1.0.0 + gtwvw / xHarbour 1.2.1 + Fivewin
coutinho
Usuário Nível 1
Usuário Nível 1
Mensagens: 21
Registrado em: 18 Jul 2011 14:14
Localização: rio de janeiro/rj

webservice

Mensagem por coutinho »

amigo

fiz um contato com a empresa e me informaram que nao esta nem comunicando com o servidor.
nao sei o que pode estar ocorrendo.
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

webservice

Mensagem por Mário Isa »

Boa tarde.
Gostaria de saber se vcs conseguiram êxito em comunicar-se via webservice e qual código que deu certo, pois pretendo construir uma comunicação dessas com a checkcheck e preciso dar uns primeiros passos.

Mário
Responder