00:00:00 Introdução
00:01:12 Mostrando webservice consulta cadastro
00:01:25 Variaveis iniciais e parametros do webservice 
00:02:56 Primeiras configuracoes sefaz uninfe dll e pesquisa estado
00:05:11 caso nao encontre , pesquisar na receita 
00:06:08 Buscando dados da receita 
00:07:03 vou unificar o retorno do xml fazendo um somente 
00:07:11 Criando xml padrao 
00:07:40 Colocando dados do json no xml 
00:08:18 Colocando dados do xml do sefaz no xml 
00:08:49 Fazendo codigo do consumo 
00:10:04 Vamos testar 
00:10:35 Onde eu encontro o código 
00:10:53 Propaganda Windev Webde Mobile com Adriano boller
00:11:01 Erpmatos 
00:11:10 Representantes ErpMatos
00:11:21 Video Encerramento
Objetivo Aula:
Temos a consulta do cnpj pela busca do sefaz.. Normalmente sempre consulto
o cnpj, com o estado do emitente. mas caso nao seja do mesmo estado, ai teriamos
de pedir para o cliente digitar a Uf. Mas podemos simplificar isso automaticamente.
o que farei. caso o cnpj nao for do estado do emitente, entao , vou fazer uma
pesquisa pelo site receitaws.com para saber o estado, e ai, sim. na segunta busca,
já leva o estado. 
Outra coisa que faremos é caso , nao tiver inscrição estadual, ai ele vai
trazer as informações do site da receitaws.com.
Top demais. vamos a aula, e aproveite.
Resultado Json
{
  "status": "OK",
  "ultima_atualizacao": "2019-08-24T14:15:22Z",
  "cnpj": "string",
  "tipo": "MATRIZ",
  "porte": "string",
  "nome": "string",
  "fantasia": "string",
  "abertura": "string",
  "atividade_principal": [
    {
      "code": "string",
      "text": "string"
    }
  ],
  "atividades_secundarias": [
    {
      "code": "string",
      "text": "string"
    }
  ],
  "natureza_juridica": "string",
  "logradouro": "string",
  "numero": "string",
  "complemento": "string",
  "cep": "string",
  "bairro": "string",
  "municipio": "string",
  "uf": "string",
  "email": "string",
  "telefone": "string",
  "efr": "string",
  "situacao": "string",
  "data_situacao": "string",
  "motivo_situacao": "string",
  "situacao_especial": "string",
  "data_situacao_especial": "string",
  "capital_social": "string",
  "qsa": [
    {
      "nome": "string",
      "qual": "string",
      "pais_origem": "string",
      "nome_rep_legal": "string",
      "qual_rep_legal": "string"
    }
  ],
  "billing": {
    "free": true,
    "database": true
  }
}
============================
//=========== CONSUMO
// criar as variaveis 
s_cnpj_emitente			is string		= ""
s_certificado_senha		is string		= ""
s_cnpj_consultar		is string		= ""
s_uf					is string		= ""
sEDT_Url_string			is string		= "http://www.amarildomatos.com.br/uninfe_consulta_cadastro"
oRequest				is httpRequest
oResponse				is httpResponse
oRequest.URL									= sEDT_Url_string 
oRequest.Method									= httpPost
oRequest..Header["s_recebe_cnpj_emitente"]				= s_cnpj_emitente
oRequest..Header["s_recebe_senha"]				= s_certificado_senha
oRequest..Header["s_recebe_UF"]				    = s_uf
oRequest..Header["s_recebe_cnpj_cadastro"]		= s_cnpj_consultar
oRequest..Header["local_salvar"]		        = "E:"
oRequest.Content								= ""
oRequest.ContentType							= typeMimeJSON
oResponse										= RESTSend(oRequest)
sRetorno_webservice			is string	= oResponse.Content
edt_Resposta		= sRetorno_webservice
//======== WEBSERVICE
PROCEDURE uninfe_consulta_cadastro()
retorno_json	is JSON	
cstat	is string=""
xmotivo is string=""
s_auditoria				is string	= ""
retorno_xml				is string	= ""
razao_social is string=""
s_recebe_cnpj_emitente	is string	= WebserviceReadHTTPHeader("s_recebe_cnpj_emitente") // cnpj do emitente-> certificado	
s_recebe_senha			is string	= WebserviceReadHTTPHeader("s_recebe_senha") // senha certificado
s_recebe_UF			    is string	= WebserviceReadHTTPHeader("s_recebe_UF") 
s_recebe_cnpj_cadastro  is string	= WebserviceReadHTTPHeader("s_recebe_cnpj_cadastro")
s_local_salvar			is string	= WebserviceReadHTTPHeader("local_salvar")
diretorio_salvar is string=fCurrentDir() // escolhendo onde salvar as informacoes
IF s_local_salvar="" THEN
ELSE	
	diretorio_salvar=s_local_salvar // "e:" 
END
s_arquivo_certificado	is string	= fCurrentDir()+"\erpmatos\"+s_recebe_cnpj_emitente+".pfx"
s_diretorio				is string	= s_local_salvar+"\erpmatos\xml_"+s_recebe_cnpj_emitente+"\retorno"
IF fMakeDir(s_diretorio)=False THEN
END
s_diretorio_log is string=s_local_salvar+"\erpmatos\xml_"+s_recebe_cnpj_emitente+"\retorno"
IF fMakeDir(s_diretorio_log)=False THEN
END
s_busca_cnpj is string=""
busca_cnpj_sefaz:
o_configuracao	is Unimake.Business.DFe.Servicos.Configuracao // configurações minimas 
o_configuracao.TipoDFe				= TipoDFe.NFe //1 // nfe
o_configuracao.CertificadoArquivo	= s_arquivo_certificado
o_configuracao.CertificadoSenha		= s_recebe_senha
oConsCad is Unimake.Business.DFe.XML.NFe.ConsCad() // criar xml
oConsCad.VERSAO	= "2.00"
oInfCons is Unimake.Business.DFe.XML.NFe.InfCons()
oInfCons.CNPJ	= s_recebe_cnpj_cadastro
oInfCons.uf		= UFBrasil.RS
IF s_recebe_UF<>"" THEN
   pesquisa_estado()	
END
IF s_busca_cnpj="receita_busca" THEN
	busca_receita_cnpj()	
END
oConsCad.InfCons	= oInfCons
WHEN EXCEPTION IN
	oConsultaCadastro is Unimake.Business.DFe.Servicos.NFe.ConsultaCadastro() 
	oConsultaCadastro.Executar(oConsCad,o_configuracao)
	oRetConsCad	is Unimake.Business.DFe.XML.NFe.RetConsCad	<- oConsultaCadastro.Result
	
	cstat	= oRetConsCad.InfCons.CStat
	xmotivo	= oRetConsCad.InfCons.XMotivo
	
	IF cstat="259" THEN
		// cnpj da consulta não cadastrado como contribuinte na UF
		// na primeira vez, vai pesquizar o estado do emitente, ou da informacao fornecida pelo usuario
		// na segunda vez, vai pegar o resultado pela receita ws, pois nao tem inscrição
	ELSE
		razao_social		= oRetConsCad.InfCons.InfCad.XNome
		retorno_xml			= oConsultaCadastro.RetornoWSString 
		s_busca_cnpj="sefaz_achou"
	END
DO
	retorno_xml			= "ERRO:"+ExceptionInfo(errFullDetails)
	s_busca_cnpj="sefaz_erro"
END
IF s_busca_cnpj="sefaz_achou" OR s_busca_cnpj="sefaz_erro" THEN
ELSE
	IF s_busca_cnpj="" THEN
		s_busca_cnpj="receita_busca"
		GOTO busca_cnpj_sefaz
	END
END
	INTERNAL PROCEDURE busca_receita_cnpj()
		
		// pegar pela receita o estado 
		s_busca_cnpj="buscou"
		s_url					is string	= "https://www.receitaws.com.br/v1/cnpj/"+s_recebe_cnpj_cadastro
		IF HTTPRequest(s_url) THEN
			retorno_json=HTTPGetResult()
			recebi_o_estado	is string	= retorno_json.uf
			SWITCH recebi_o_estado
				CASE "AC"
					oInfCons.uf=UFBrasil.AC 
				CASE "AL"
					oInfCons.uf=UFBrasil.AL 
				CASE "AM"
					oInfCons.uf=UFBrasil.AM 
				CASE "AP"
					oInfCons.uf=UFBrasil.AP 
				CASE "BA"
					oInfCons.uf=UFBrasil.BA 
				CASE "CE"
					oInfCons.uf=UFBrasil.CE 
				CASE "DF"
					oInfCons.uf=UFBrasil.DF 
				CASE "ES"
					oInfCons.uf=UFBrasil.ES 
				CASE "EX"
					oInfCons.uf=UFBrasil.EX 
				CASE "GO"
					oInfCons.uf=UFBrasil.GO 
				CASE "MA"
					oInfCons.uf=UFBrasil.MA 
				CASE "MG"
					oInfCons.uf=UFBrasil.MG 
				CASE "MS"
					oInfCons.uf=UFBrasil.MS 
				CASE "MT"
					oInfCons.uf=UFBrasil.MT
				CASE "PA"
					oInfCons.uf=UFBrasil.PA 
				CASE "PB"
					oInfCons.uf=UFBrasil.PB 
				CASE "PE"
					oInfCons.uf=UFBrasil.PE 
				CASE "PI"
					oInfCons.uf=UFBrasil.PI 
				CASE "PR"
					oInfCons.uf=UFBrasil.PR 
				CASE "RJ"
					oInfCons.uf=UFBrasil.RJ 
				CASE "RN"
					oInfCons.uf=UFBrasil.RN 
				CASE "RO"
					oInfCons.uf=UFBrasil.RO 
				CASE "RR"
					oInfCons.uf=UFBrasil.RR 
				CASE "RS"
					oInfCons.uf=UFBrasil.RS
				CASE "SC"
					oInfCons.uf=UFBrasil.SC 
				CASE "SE"
					oInfCons.uf=UFBrasil.SE 
				CASE "SP"
					oInfCons.uf=UFBrasil.SP 
				CASE "TO"
					oInfCons.uf=UFBrasil.TO 
				OTHER CASE
					s_busca_cnpj="receita_nao_achou["+retorno_json
			END
        ELSE
        	s_busca_cnpj="erro busca receita="+ErrorInfo(errFullDetails)
		END
		
	
	END
   	 INTERNAL PROCEDURE pesquisa_estado()
		SWITCH s_recebe_UF
			CASE "AC"
				oInfCons.uf=UFBrasil.AC 
			CASE "AL"
				oInfCons.uf=UFBrasil.AL 
			CASE "AM"
				oInfCons.uf=UFBrasil.AM 
			CASE "AP"
				oInfCons.uf=UFBrasil.AP 
			CASE "BA"
				oInfCons.uf=UFBrasil.BA 
			CASE "CE"
				oInfCons.uf=UFBrasil.CE 
			CASE "DF"
				oInfCons.uf=UFBrasil.DF 
			CASE "ES"
				oInfCons.uf=UFBrasil.ES 
			CASE "EX"
				oInfCons.uf=UFBrasil.EX 
			CASE "GO"
				oInfCons.uf=UFBrasil.GO 
			CASE "MA"
				oInfCons.uf=UFBrasil.MA 
			CASE "MG"
				oInfCons.uf=UFBrasil.MG 
			CASE "MS"
				oInfCons.uf=UFBrasil.MS 
			CASE "MT"
				oInfCons.uf=UFBrasil.MT
			CASE "PA"
				oInfCons.uf=UFBrasil.PA 
			CASE "PB"
				oInfCons.uf=UFBrasil.PB 
			CASE "PE"
				oInfCons.uf=UFBrasil.PE 
			CASE "PI"
				oInfCons.uf=UFBrasil.PI 
			CASE "PR"
				oInfCons.uf=UFBrasil.PR 
			CASE "RJ"
				oInfCons.uf=UFBrasil.RJ 
			CASE "RN"
				oInfCons.uf=UFBrasil.RN 
			CASE "RO"
				oInfCons.uf=UFBrasil.RO 
			CASE "RR"
				oInfCons.uf=UFBrasil.RR 
			CASE "RS"
				oInfCons.uf=UFBrasil.RS
			CASE "SC"
				oInfCons.uf=UFBrasil.SC 
			CASE "SE"
				oInfCons.uf=UFBrasil.SE 
			CASE "SP"
				oInfCons.uf=UFBrasil.SP 
			CASE "TO"
				oInfCons.uf=UFBrasil.TO 
			OTHER CASE
				s_busca_cnpj="nao_acho_estado"
		END
		
   	END
retorno_xml_erpmatos is string=""
retorno_xml_erpmatos=[
	<infCad>
	<IE>#IE#</IE>
	<CNPJ>#CNPJ#</CNPJ>
	<UF>#UF#</UF>
	<cSit>#cSit#</cSit>
	<indCredNFe>#indCredNFe#</indCredNFe>
	<indCredCTe>#indCredCTe#</indCredCTe>
	<xNome>#xNome#</xNome>
	<xFant>#xFant#</xFant>
	<xRegApur>#xRegApur#</xRegApur>
	<CNAE>#CNAE#</CNAE>
	<dIniAtiv>#dIniAtiv#</dIniAtiv>
	<dUltSit>#dUltSit#</dUltSit>
	<ender>
	<xLgr>#xLgr#</xLgr>
	<nro>#nro#</nro>
	<xCpl>#xCpl#</xCpl>
	<xBairro>#xBairro#</xBairro>
	<cMun>#cMun#</cMun>
	<xMun>#xMun#</xMun>
	<CEP>#CEP#</CEP>
	</ender>
	<alteracao>#alteracao#</alteracao>
	</infCad>
]
IF cstat="259" THEN
	//caso nao tiver no sefaz, vai pegar o json da receita
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#alteracao#","pegou pelo json da receita")
	
    retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#IE#","")
    retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#CNPJ#",s_recebe_cnpj_cadastro)
    retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#UF#",retorno_json.uf)	
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#cSit#","")	
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#indCredNFe#","")	
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#indCredCTe#","")	
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#xNome#",retorno_json.nome)
    IF retorno_json.fantasia="" THEN
		retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#xFant#",retorno_json.nome)
	ELSE    	
		retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#xFant#",retorno_json.fantasia)
	END
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#xRegApur#","")	
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#CNAE#","")	
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#dIniAtiv#","")	
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#dUltSit#","")	
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#xLgr#",retorno_json.logradouro)
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#nro#",retorno_json.numero)
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#xCpl#",retorno_json.complemento)
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#xBairro#",retorno_json.bairro)
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#cMun#","")
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#xMun#",retorno_json.municipio)
	cep_string is string=retorno_json.cep
	cep_string=Replace(cep_string,".","")
	cep_string=Replace(cep_string,"-","")
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#CEP#",cep_string)
ELSE
	retorno_xml_erpmatos=Replace(retorno_xml_erpmatos,"#alteracao#","pegou pelo xml da sefaz")
	
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#IE#",XMLExtractString(retorno_xml,"IE"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#CNPJ#",s_recebe_cnpj_cadastro)
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#UF#",XMLExtractString(retorno_xml,"UF"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#cSit#",XMLExtractString(retorno_xml,"cSit"))	
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#indCredNFe#",XMLExtractString(retorno_xml,"indCredNFe"))	
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#indCredCTe#",XMLExtractString(retorno_xml,"indCredCTe"))	
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#xNome#",XMLExtractString(retorno_xml,"xNome"))
	IF XMLExtractString(retorno_xml,"xFant")="" THEN
		retorno_xml_erpmatos    = Replace(retorno_xml_erpmatos,"#xFant#",XMLExtractString(retorno_xml,"xNome"))
	ELSE
		retorno_xml_erpmatos    = Replace(retorno_xml_erpmatos,"#xFant#",XMLExtractString(retorno_xml,"xFant"))
	END
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#xRegApur#",XMLExtractString(retorno_xml,"xRegApur"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#CNAE#",XMLExtractString(retorno_xml,"CNAE"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#dIniAtiv#",XMLExtractString(retorno_xml,"dIniAtiv"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#dUltSit#",XMLExtractString(retorno_xml,"dUltSit"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#xLgr#",XMLExtractString(retorno_xml,"xLgr"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#nro#",XMLExtractString(retorno_xml,"nro"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#xCpl#",XMLExtractString(retorno_xml,"xCpl"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#xBairro#",XMLExtractString(retorno_xml,"xBairro"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#cMun#",XMLExtractString(retorno_xml,"cMun"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#xMun#",XMLExtractString(retorno_xml,"xMun"))
	retorno_xml_erpmatos	= Replace(retorno_xml_erpmatos,"#CEP#",XMLExtractString(retorno_xml,"CEP"))
	//xFant
END
RESULT retorno_xml_erpmatos	
 
