Jump to content
Fivewin Brasil

Consulta CNPJ site da receita federal, consulta não conclui.


sunset

Recommended Posts

Bom dia.

Uso aquele DLL de consulta ao site da receita federal junto com a classe que consulta e captura de dentro do html gerado os dados da empresa, mas há uns dias parou de funcionar a captura, alguém tem alguma dica do que mudou ?

Após a tela do não sou um robô ela não finaliza.

 

Grato por qualquer dica.

Link to comment
Share on other sites

5 horas atrás, sunset disse:

Bom dia.

Uso aquele DLL de consulta ao site da receita federal junto com a classe que consulta e captura de dentro do html gerado os dados da empresa, mas há uns dias parou de funcionar a captura, alguém tem alguma dica do que mudou ?

Após a tela do não sou um robô ela não finaliza.

 

Grato por qualquer dica.

Mostre como esta fazendo

 

Link to comment
Share on other sites

Use desta forma:

 

LOCAL oCNPJ := TCNPJ():New( cCNPJ )

IF oCNPJ:ConsultarCNPJ()

    cTELEFONE := oCNPJ:GetTelefone()
    cENDE_CAD := Upper( Pad( oCNPJ:GetLogradouro(), Len( ::aCampos[ "cENDE_CAD" ] ) ) )
    cNUM__CAD := Pad( oCNPJ:GetNumero(), Len( ::aCampos[ "cNUM__CAD" ] ) )
    cCOMP_CAD := Upper( Pad( oCNPJ:GetComplemento(), Len( ::aCampos[ "cCOMP_CAD" ] ) ) )
    cBAIR_CAD := Upper( Pad( oCNPJ:GetBairro(), Len( ::aCampos[ "cBAIR_CAD" ] ) ) )
    cCOD_MUNI := oCNPJ:GetCodigoIBGE()
    cEMAIL    := Pad( oCNPJ:GetEmail(), Len( ::aCampos[ "cEMAIL" ] ) )
    cCEP__CAD := oCNPJ:GetCEP()      1
    cMUNI_CAD := Pad( oCNPJ:GetMunicipio(), Len( ::aCampos[ "cMUNI_CAD" ] ) )
    nESTA_CAD := ::oCmbEstado:getIndex( oCNPJ:GetUF() )
    cNOM_RAZA := Upper( Pad( oCNPJ:GetNome(), Len( ::aCampos[ "cNOM_RAZA" ] ) ) )
    cNOM_FANT := Upper( Pad( oCNPJ:GetFantasia(), Len( ::aCampos[ "cNOM_FANT" ] ) ) )

    oCNPJ:End()

ENDIF

 

Link to comment
Share on other sites

Macs, o que está errado? A classe não reconhece ::aCampos... ???

#Include "FiveWin.ch"
	FUNCTION Main()
	   LOCAL CTELEFONE, CENDE_CAD, CNUM__CAD, CCOMP_CAD, CBAIR_CAD, CCOD_MUNI, ;
         CEMAIL, CCEP__CAD, CMUNI_CAD, NESTA_CAD, CNOM_RAZA, CNOM_FANT
   LOCAL cCNPJ
   LOCAL oCNPJ // := TCNPJ():New( cCNPJ )
   LOCAL SELF
	   cCNPJ := "42.905.527/0001-05"
   oCNPJ := TCNPJ():New( cCNPJ )
	   IF oCNPJ:ConsultarCNPJ()
	      cTELEFONE := oCNPJ:GetTelefone()
      cENDE_CAD := Upper( Pad( oCNPJ:GetLogradouro(), Len( ::aCampos[ "cENDE_CAD" ] ) ) )
      cNUM__CAD := Pad( oCNPJ:GetNumero(), Len( ::aCampos[ "cNUM__CAD" ] ) )
      cCOMP_CAD := Upper( Pad( oCNPJ:GetComplemento(), Len( ::aCampos[ "cCOMP_CAD" ] ) ) )
      cBAIR_CAD := Upper( Pad( oCNPJ:GetBairro(), Len( ::aCampos[ "cBAIR_CAD" ] ) ) )
      cCOD_MUNI := oCNPJ:GetCodigoIBGE()
      cEMAIL    := Pad( oCNPJ:GetEmail(), Len( ::aCampos[ "cEMAIL" ] ) )
      cCEP__CAD := oCNPJ:GetCEP()
      cMUNI_CAD := Pad( oCNPJ:GetMunicipio(), Len( ::aCampos[ "cMUNI_CAD" ] ) )
      nESTA_CAD := ::oCmbEstado:getIndex( oCNPJ:GetUF() )
      cNOM_RAZA := Upper( Pad( oCNPJ:GetNome(), Len( ::aCampos[ "cNOM_RAZA" ] ) ) )
      cNOM_FANT := Upper( Pad( oCNPJ:GetFantasia(), Len( ::aCampos[ "cNOM_FANT" ] ) ) )
	      oCNPJ:End()
	   ENDIF
	RETURN NIL
	********************************************************************************
**                         SIMTECH SISTEMAS LTDA                               *
********************************************************************************
** Sistema...: WERP - Sistemas Integrados de Gestão Empresarial                *
********************************************************************************
** Arquivo...: TCNPJ.Prg                                                       *
********************************************************************************
** Classe....: TCNPJ()                                                         *
** Função....: TCNPJ()                                                         *
** Objetivo..: Criar Classe para Pesquisa de Um determinado CJPJ               *
**             Produto                                                         *
** Módulo....: Classes                                                         *
** Autor.....: Márcio Augusto Cezar                                            *
** Data......: 21/01/2020                                                      *
********************************************************************************
** Parâmetros:                                                                 *
********************************************************************************
** Retorno...: NIL                                                             *
********************************************************************************
** Observação:                                                                 *
********************************************************************************
// # Include "ERPConfig.Ch"
	CLASS TCNPJ
	   PRIVATE:
	   DATA cCNPJ, cNome, cFantasia AS CHARACTER
   DATA cLogradouro, cNumero, cBairro, cComplemento, cBairro, cMunicipio, cUF, cCEP, cCodigoIBGE AS CHARACTER
   DATA cTelefone, cEmail AS CHARACTER
   DATA cNatureza, cAtividade, cNmAtividade, cSituacao, cMotivoSituacao AS CHARACTER
   DATA dDataAbertura AS DATE
	   DATA aSocios        AS ARRAY INIT {}
   DATA aAtividadesSec AS ARRAY INIT {}
	   DATA nCapitalSocial AS NUMERIC INIT 0
	   PUBLIC:
	   DATA lExito AS LOGICAL INIT .F.
	   && -- Métodos para retorno das informações básicas da Empresa Pesquisada
   METHOD GetCNPJ()            INLINE ::cCNPJ
   METHOD GetNome()            INLINE ::cNome
   METHOD GetFantasia()        INLINE ::cFantasia
   METHOD GetLogradouro()      INLINE ::cLogradouro
   METHOD GetNumero()          INLINE ::cNumero
   METHOD GetComplemento()     INLINE ::cComplemento
   METHOD GetBairro()          INLINE ::cBairro
   METHOD GetMunicipio()       INLINE ::cMunicipio
   METHOD GetCodigoIBGE()      INLINE ::cCodigoIBGE
   METHOD GetUF()              INLINE ::cUF
   METHOD GetCEP()             INLINE StrTran( Strtran( ::cCEP, "-" ), "." )
   METHOD GetTelefone()        INLINE ::cTelefone
   METHOD GetEmail()           INLINE ::cEmail
   METHOD GetSituacao()        INLINE ::cSituacao
   METHOD GetMotivoSituacao()  INLINE ::cMotivoSituacao
   METHOD GetAbertura()        INLINE ::dDataAbertura
   METHOD GetCapitalSocial()   INLINE ::nCapitalSocial
   METHOD GetSocios()          INLINE ::aSocios
   METHOD GetNaruzeza()        INLINE ::cNatureza
   METHOD GetCodigoAtividade() INLINE ::cAtividade
   METHOD GetDescAtividade()   INLINE ::cNmAtividade
   METHOD GetCapitalSocial()   INLINE ::nCapitalSocial
   METHOD GetAtividadesSec()   INLINE ::aAtividadesSec
	   && -- Métodos para Tratamento do Saldo Anterior do Produto
      METHOD ConsultarCNPJ( cCNPJ )
	   METHOD New( cCNPJ ) CONSTRUCTOR
   METHOD End()
   METHOD SetCNPJ( cCNPJ ) INLINE ::cCNPJ := cCNPJ
	ENDCLASS
	********************************************************************************
** Método....: New()                                                           *
** Objetivo..: Construtor da Classe                                            *
** Autor.....: Márcio Augusto Cezar                                            *
********************************************************************************
METHOD New( cCNPJ ) CLASS TCNPJ
	   ::cCNPJ := cCNPJ
	RETURN Self
	********************************************************************************
** Método....: End()                                                           *
** Objetivo..: Finalizar a classe                                              *
** Autor.....: Márcio Augusto Cezar                                            *
** Data......: 21/03/2017                                                      *
********************************************************************************
METHOD End() CLASS TCNPJ
	   PostMessage( Self, WM_CLOSE )
	RETURN NIL
	********************************************************************************
** Método....: ConsultarCNPJ()                                                 *
** Objetivo..: Realizar a Consulta do CNPJ informado no Site da Receita Federal*
** Autor.....: Márcio Augusto Cezar                                            *
********************************************************************************
METHOD ConsultarCNPJ( cCNPJ ) CLASS TCNPJ
	   LOCAL cResult, hDados
   LOCAL cLink := "https://www.receitaws.com.br/v1/cnpj/"
   LOCAL cSetIndex
	   DEFAULT cCNPJ := ::cCNPJ
	   cCnpj := StrTran( cCnpj, ".", "" )
   cCnpj := StrTran( cCnpj, "/", "" )
   cCnpj := StrTran( cCnpj, "-", "" )
   cCnpj := AllTrim( cCnpj )
	   cLink += cCnpj
	   cResult := GetPesqHtml( cLink )
	   cResult := StrTran( cResult, "true", '"true"' )
	   hDados := My_JsonToHash( cResult )
	
   IF Valtype( hDados ) == "C" .AND. Empty( hDados )
      RETURN .F.
   ENDIF
	   && -- Checar se o CNPJ e valido ou nao.
   ::lExito := ( hDados["status"] == "OK" )
	   IF ::lExito  // CNPJ E VALIDO
	      ::cNome           := hDados["nome"]
      ::cFantasia       := hDados["fantasia"]
      ::cSituacao       := hDados["situacao"]
      ::cMotivoSituacao := hDados["motivo_situacao"]
      ::cLogradouro     := hDados["logradouro"]
      ::cNumero         := hDados["numero"]
      ::cComplemento    := hDados["complemento"]
      ::cBairro         := hDados["bairro"]
      ::cUF             := hDados["uf"]
      ::cCEP            := Pad( RetiraSimbolos( hDados["cep"] ), 8 )
      ::cMunicipio      := hDados["municipio"]
      ::dDataAbertura   := ctod( hDados["abertura"] )
      ::cNatureza       := hDados["natureza_juridica"]
      ::cAtividade      := hDados["atividade_principal"][1]["code"]
      ::cNmAtividade    := hDados["atividade_principal"][1]["text"]
      ::aSocios         := hDados["qsa"]
      ::nCapitalSocial  := Val( hDados["capital_social"] )
      ::aAtividadesSec  := hDados["atividades_secundarias"]
      ::cTelefone       := RetiraSimbolos( hDados["telefone"] )
      ::cEmail          := Lower( hDados["email"] )
      
      TRY
      
         cSetIndex := MUNI->( setIndex( "UF+MUNICIPIO" ) )
	         IF MUNI->( dbSeek( ::cUF + alltrim( upper( ::cMunicipio ) ) ) )
            ::cCodigoIBGE := MUNI->CODIGO
         ENDIF
	         MUNI->( setIndex( cSetIndex ) )
	      CATCH
         ::cCodigoIBGE := space(07)
      END
	    ENDIF
    
RETURN ::lExito
	********************************************************************************
** Método....: GetPesqHtml()                                                   *
** Objetivo..: Retornar o HTML da pesquisa do CNPJ consultado                  *
** Autor.....: Márcio Augusto Cezar                                            *
********************************************************************************
STATIC FUNCTION My_JsonToHash( cStringJson )
	   LOCAL oError
   LOCAL hJson := { => }
	   cStringJson := Alltrim( cStringJson )
   cStringJson := StrTran( cStringJson, ':[', '=>{' )
   cStringJson := StrTran( cStringJson, '":"', '" => "' )
   cStringJson := StrTran( cStringJson, '[', '{' )
   cStringJson := StrTran( cStringJson, ']', '}' )
   cStringJson := StrTran( cStringJson, '":null', '"=>nil' )
   cStringJson := StrTran( cStringJson, '":true' , '"=>.t.' )
   cStringJson := StrTran( cStringJson, '":false', '"=>.f.' )
   cStringJson := StrTran( cStringJson, '": true' , '"=>.t.' )
   cStringJson := StrTran( cStringJson, '": false', '"=>.f.' )
   cStringJson := StrTran( cStringJson, '":', '"=>' )
   cStringJson := StrTran( cStringJson, "\/", "/" )
   cStringJson := StrTran( cStringJson, Chr( 13 ), "" )
   cStringJson := StrTran( cStringJson, Chr( 10 ), "" )
	   Try
      hJSon := &( cStringJson )
   Catch oError
      MsgStop( "Ocorreu Erro de Conexão com site da Receita Federal" )
      hJson := ""
     //  Throw( oError )
   End
	RETURN hJson
	********************************************************************************
** Método....: GetPesqHtml()                                                   *
** Objetivo..: Retornar o HTML da pesquisa do CNPJ consultado                  *
** Autor.....: Márcio Augusto Cezar                                            *
********************************************************************************
STATIC FUNCTION GetPesqHtml( cLink )
	  LOCAL oOle, cErro
  LOCAL cHtml := ""
	  Try
	     oOle := CreateObject( "Microsoft.XMLHTTP" )
	     oOle:Open( "GET", cLink, .F. )
     oOle:Send()
	     cHtml := oOle:ResponseBody
     oOle := nil
	   Catch
	      cErro := MsgErro( "Não foi possível realizar a Pesquisa do Site da Receita" )
	   End
	RETURN cHtml
	FUNCTION RETIRASIMBOLOS()
	RETURN NIL
	FUNCTION SETINDEX()
	RETURN NIL
	FUNCTION MSGERRO( cErro )
	   MsgInfo( cErro )
	RETURN NIL
	// FIN / END

Regards, saludos.

Link to comment
Share on other sites

aCampos é uma variável tipo Hash(). Você tem que substituir pelas suas.

Exemplo: 

LOCAL cENDE_CAD := Space(50)

cENDE_CAD := Upper( Pad( oCNPJ:GetLogradouro(), Len( cENDE_CAD ) ) )  //   Len( ::aCampos[ "cENDE_CAD" ] ) ) )

Ou

cENDE_CAD := Upper( Pad( oCNPJ:GetLogradouro(), 50 ) )

Link to comment
Share on other sites

Putz Macs, sua classe está com muita baytolagem. E eu não gosto de CLASSE, gosto assim: pego o FONTE compilo e PIMBA!!

// C:\FWH..\SAMPLES\RECEITA2.PRG
	#include "FiveWin.ch"
	FUNCTION Main()
	   LOCAL cOnde, cCnpj, cNome, cEndereco, cNro, cComplemento, cBairro, cCidade, ;
         cEstado, cCep, cTelefone
	   cOnde        := SPACE(10)
   cCnpj        := "42905527000105"
   cNome        := SPACE(50)
   cEndereco    := SPACE(40)
   cNro         := SPACE(10)
   cComplemento := SPACE(10)
   cBairro      := SPACE(20)
   cCidade      := SPACE(30)
   cEstado      := SPACE(02)
   cCep         := SPACE(08)
   cTelefone    := SPACE(17)
	   GetCNPJ( cOnde, cCnpj, cNome, cEndereco, cNro, cComplemento, cBairro, cCidade, cEstado, cCep, cTelefone )
	RETURN NIL
	FUNCTION GetCNPJ( cOnde, cCnpj, cNome, cEndereco, cNro, cComplemento, cBairro, cCidade, cEstado, cCep, cTelefone )
	   LOCAL oServerWS, cUrl, aArray, x1, erro, oADODBStream
	   IF Len( AllTrim( cCnpj ) ) < 14
	      MsgInfo( "Somente Pessoa Juridica para consultar os dados na Receita !!!", "Atenção " )
	      RETURN( .T. )
	   ENDIF
	   cUrl := "https://www.receitaws.com.br/v1/cnpj/" + cCnpj
   // cUrl:= "https://publica.cnpj.ws/cnpj/" + cCnpj
	   #ifdef __XHARBOUR__  // PERFEITO COM XHARBOUR( I Like )
	      Try
	         Try
            oServerWS := CreateObject( 'MSXML2.XMLHTTP' )
         Catch
            oServerWS := CreateObject( 'Microsoft.XMLHTTP' )
         End
	      Catch
	         MsgInfo( 'Erro na Criação do Serviço' )
	         RETURN NIL
	      End
	   #else // PERFEITO COM HARBOUR. ( no Like. kkkkk )
	      Try
	         Try
            oServerWS := win_OleCreateObject( 'MSXML2.XMLHTTP' )
         Catch
            oServerWS := win_OleCreateObject( 'Microsoft.XMLHTTP' )
         End
	      Catch
	         MsgInfo( 'Erro na Criação do Serviço! Com Harbour', 'Atenção!' )
	         RETURN NIL
	      End
	   #endif
	   oServerWS:Open( 'GET', cUrl, .F. )
   oServerWS:setRequestHeader( "Content-Type", "text/xml; charset=utf-8" )
   oServerWS:Send()
	   IF oServerWS:STATUS != 200
	      MsgStop( AllTrim( Str( oServerWS:Status ) ) + " - " + oServerWS:StatusText, "Erro" )
	      RETURN NIL
	   ENDIF
	   WHILE oServerWS:readyState != 4
	      SYSREFRESH()
	      oServerWS:WaitForResponse( 1000 )
	   END
	   x1 := hb_jsonDecode( oServerWS:responseText, @aArray )
	   IF aArray == nil
	      MsgStop( "Erro ao retornar os dados. Tente novamente." )
	      RETURN NIL
	   ENDIF
	   IF aArray[ 'status' ] != 'OK'
	      MsgStop( aArray[ 'message' ], "Erro" )
	      RETURN NIL
	   ENDIF
	   MsgInfo( "NOME:  " + AllTrim( aArray[ 'nome' ] ) + CRLF + ;
            "FANTASIA:  " + AllTrim( aArray[ 'fantasia' ] ) + CRLF + ;
            "ENDEREÇO:  " + AllTrim( aArray[ 'logradouro' ] ) + ", " + AllTrim( aArray[ 'numero' ] ) + " " + AllTrim( aArray[ 'complemento' ] ) + CRLF + ;
            "BAIRRO:  " + AllTrim( aArray[ 'bairro' ] ) + " CEP: " + AllTrim( aArray[ 'cep' ] ) + CRLF + ;
            "CIDADE:  " + AllTrim( aArray[ 'municipio' ] ) + "-" + AllTrim( aArray[ 'uf' ] ) + CRLF + ;
            "TELEFONE:  " + AllTrim( aArray[ 'telefone' ] ) + CRLF + CRLF + ;
            "NATUREZA JURÍDICA:  " + AllTrim( aArray[ 'natureza_juridica' ] ) + CRLF + ;
            "TIPO:  " + AllTrim( aArray[ 'tipo' ] ) + CRLF + ;
            "SITUAÇÃO:  " + AllTrim( aArray[ 'situacao' ] ) + CRLF + ;
            "DATA SITUAÇÃO:  " + AllTrim( aArray[ 'data_situacao' ] ) + CRLF + ;
            "ULTIMA ATUALIZAÇÃO:  " + AllTrim( aArray[ 'ultima_atualizacao' ] ), "CNPJ CONSULTA" )
	   cNome = AllTrim( aArray[ 'nome' ] )
   cEndereco = AllTrim( aArray[ 'logradouro' ] )
   cNro = AllTrim( aArray[ 'numero' ] )
   cNro = StrTran( cNro, ".", "", 1, 10 )
   cNro = Val( cNro )
   cComplemento = AllTrim( aArray[ 'complemento' ] )
   cBairro = AllTrim( aArray[ 'bairro' ] )
   cCep = AllTrim( aArray[ 'cep' ] )
   cCidade = AllTrim( aArray[ 'municipio' ] )
   cEstado = AllTrim( aArray[ 'uf' ] )
   cTelefone  = AllTrim( aArray[ 'telefone' ] )
	   IF cOnde = "T"
	      cEndereco = cEndereco + " " + AllTrim( Str( cNro, 10 ) ) + " " + AllTrim( cComplemento )
	   ENDIF
	   cNome        := cNome + spac( 100 - Len( cNome ) )
   cEndereco    := cEndereco + spac( 100 - Len( cEndereco ) )
   cComplemento := cComplemento + spac( 100 - Len( cComplemento ) )
   cBairro      := cBairro + spac( 100 - Len( cBairro ) )
   cCep         := cCep + spac( 10 - Len( cCep ) )
   cCep         := StrTran( cCep, ".", "", 1, 10 )
   cCidade      := cCidade + spac( 50 - Len( cCidade ) )
   cTelefone    := cTelefone + spac( 20 - Len( cTelefone ) )
	RETURN NIL
	// FIN / END

Teste ai e veja que simples, prático e seguro.

Regards, saludos.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...