https://youtu.be/ZEt8hdBtotQ
Bom Dia Boa Tarde Boa Noite
Mande um email pedido para receber todas notificaçoes dos videos
email : amarildo.matos@gmail.com
==============================================================
Seja Membro do Canal e tenha direito a consultorias com precos diferenciados
https://www.youtube.com/channel/UCQGPHrppG5XKoRbeOIgLJEA/join
Beneficios Membros:
Skype Privado
Sugerir ou pedir Videos
Valroes de consultorias com precos acesiveis
Pedir para eu refazer uma exemplo versao inferior
Quero Refazer meu sistema no windev, onde comecar?
Como fazer uma proteção on-line do seu sistema ?
Meu projeto será grande, como devo fazer?
==============================================================
Esse Video vai estrear as 10:00 do dia 30/07/2021
DICAS 3375 - WINDEV WEBDEV MOBILE - NFeDistribuicaoDFe - Parte 6 - Confirmacao Operacao da Nota em Windev - Curso Webservice - 42
ASSUNTOS
00:00 Introducao
00:34 Vamos entrar no projeto NFeDistribuicaoDfe_Confirmar_Nota_Windev_3375
01:04 Vamos transformar a rotina ciencia em uma procedure para reaproveitar codigo
01:36 Vamos receber dois parametros na procedure evento manifestacao
02:02 Vamos configurar tipo de evento e descricao
03:33 Vamos alterar o botao ciencia com os parametros
04:07 Vamos criar o botao confirmar operacao
04:26 Vamos alterar o codigo evento manifestacao
05:27 Vamos executar
06:06 Mostrar os xml gerados e retornados
06:16 Proxima aula
------------------ codigo
// btn ciencia
evento_manifestacao(TABLE_Manifestacao_resumo.COL_ChNfe,"ciencia")
// btn confirmar
evento_manifestacao(TABLE_Manifestacao_resumo.COL_ChNfe,"confirmacao")
--- Botao Entrar na consulta nota
ShellExecute("https://www.sefaz.rs.gov.br/dfe/Consultas/ConsultaPublicaDfe?chaveNFe="+TABLE_Manifestacao_resumo.COL_ChNfe)
------------------------------- Codigo
//PROCEDURE evento_manifestacao(recebe_chnfe,recebe_tipo)
// Ciencia Nota e confirmacao de Nota
s_recebe_thumprint_certificado is string = "" // vamos criar duas variaveis -
s_web_service is string = ""
IF RADIO_ambiente=1 THEN // se o ambiente for igual 1- Producao ou se for igual 2 - Homologaão
s_web_service="https://www.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"
ELSE
s_web_service="https://hom.nfe.fazenda.gov.br/NFeRecepcaoEvento4/NFeRecepcaoEvento4.asmx"
END
// Criar uma variavel sxml_para_assinar
sOrgao_nacional is string = "91"
sCnpj is string = ""
HReadSeekFirst(empresa,empresaID,1)
sCnpj=empresa.cnpj_cpf
nSequencia_evento_int is int = 1
// Data do evento tem de estar conforme abaixo
// 2021-07-25T13:06:21-03:00
sDhevento is string = ""
dAta_hoje is Date = DateSys()
tHora_hoje is Time = TimeSys()
sDhevento=NumToString(dAta_hoje.Year,"04d")+"-"
sDhevento+=NumToString(dAta_hoje.Month,"02d")+"-"
sDhevento+=NumToString(dAta_hoje.Day,"02d")+"T"
sDhevento+=NumToString(tHora_hoje.Hour,"02d")+":"
sDhevento+=NumToString(tHora_hoje.Minute,"02d")+":"
sDhevento+=NumToString(tHora_hoje.Second,"02d")+"-"
sDhevento+="03:00"
sTipo_evento is string = ""
sDescricao_evento is string = ""
SWITCH recebe_tipo
CASE "confirmacao" //1
sTipo_evento="210200"
sDescricao_evento="Confirmacao da Operacao"
CASE "desconhecimento" //2
sTipo_evento = "210220"
sDescricao_evento = "Desconhecimento da Operacao"
CASE "ciencia" //4
sTipo_evento = "210210"
sDescricao_evento = "Ciencia da Operacao"
CASE "nao_realizada"
sTipo_evento = "210240"
sDescricao_evento = "Operacao nao realizada"
OTHER CASE
END
sChave_nfe is string = recebe_chnfe
sEquencia_evento_string is string = NumToString(nSequencia_evento_int,"02d")
//Identificador da TAG a ser assinada, a regra de formação do
// Id é: "ID" + tpEvento + chave da NF-e + nSeqEvento
sId_evento is string = "ID"+sTipo_evento+sChave_nfe+sEquencia_evento_string
sXml_para_assinar is string = [
<evento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00">
<infEvento Id="[%sId_evento%]">
<cOrgao>[%sOrgao_nacional%]</cOrgao>
<tpAmb>[%RADIO_ambiente%]</tpAmb>
<CNPJ>[%sCnpj%]</CNPJ>
<chNFe>[%sChave_nfe%]</chNFe>
<dhEvento>[%sDhevento%]</dhEvento>
<tpEvento>[%sTipo_evento%]</tpEvento>
<nSeqEvento>[%nSequencia_evento_int%]</nSeqEvento>
<verEvento>1.00</verEvento>
<detEvento versao="1.00">
<descEvento>[%sDescricao_evento%]</descEvento>
</detEvento>
</infEvento>
</evento>
]
sXml_assinado is string = assinar_xml(sXml_para_assinar,"infEvento",sId_evento) // // vamos assinar o xml
sEnvelopE_soap is string = [
<?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>
<nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NFeRecepcaoEvento4">
<envEvento xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.00">
<idLote>0</idLote>
#xml_assinado#
</envEvento>
</nfeDadosMsg>
</soap12:Body>
</soap12:Envelope>
]
sEnvelopE_soap = Replace(sEnvelopE_soap,CR,"") // vamos tirar os cr da variavel senvelope_soap
sEnvelopE_soap = Replace(sEnvelopE_soap,"#xml_assinado#",sXml_assinado)
EDT_ENVELOPE_SOAP_ENVIADO = sEnvelopE_soap // vamos agora colocar o envelope soap no edt
// vamos ler o cadastro de empresas e pegar o certificado ja selecionado
HReadSeekFirst(empresa,empresaID,1)
IF HFound(empresa) THEN
s_recebe_thumprint_certificado=NoSpace(empresa.certificado_thumprint,sscAll)
Message("Procurando HttpCertificate ...")
ELSE
s_recebe_thumprint_certificado=""
END
HTTPCertificate(s_recebe_thumprint_certificado) // vamos ler o certificado com HTTPCertificate - e caso ele nao encontre nada, ele vai pedir para escolehr
HTTP.IgnoreError = httpIgnoreRevocation
HTTP.IgnoreError = httpErrorInvalidCertificate
HTTP.IgnoreError = httpErrorInvalidCertificateName
bMensagem is boolean=HTTPRequest(s_web_service,"","",sEnvelopE_soap,"text/xml;charset=UTF-8","","")
HTTPCertificate("") //Vamos limpar da memoria o certificado
IF bMensagem=False THEN
Error(ErrorInfo(errFullDetails))
ELSE
EDT_RETORNO_SOAP = HTTPGetResult(httpResult) // vamos pegar o retorno com httpgetresult(httpresult)
EDT_Retorno_xml = XMLExtractString(EDT_RETORNO_SOAP,"nfeRecepcaoEventoNFResult") // vamos agora pegar somente o xml de retorno // XMLExtractString(EDT_RETORNO_SOAP,"nfeResultMsg")
sOmente_protocolo is string=XMLExtractString(EDT_Retorno_xml,"retEvento")
EDT_DhRecbto = XMLExtractString(sOmente_protocolo,"dhRecbto")
EDT_NProt = XMLExtractString(sOmente_protocolo,"nProt")
EDT_TpAmb = XMLExtractString(sOmente_protocolo,"tpAmb")
EDT_Cstat = XMLExtractString(sOmente_protocolo,"cStat")
EDT_Xmotivo = XMLExtractString(sOmente_protocolo,"xMotivo")
SWITCH sTipo_evento
CASE "210200" //confirmacao
manifestacao_resumo.confirma = True
manifestacao_resumo.csitNfe = 1
CASE "210220" // desconhecimento
CASE "210210" // ciencia
manifestacao_resumo.ciencia = True
manifestacao_resumo.csitNfe = 4
CASE "210240" // operacao nao realizada
OTHER CASE
END
manifestacao_resumo.ciencia_cstat = EDT_Cstat
manifestacao_resumo.ciencia_motivo = EDT_Xmotivo
HModify(manifestacao_resumo)
fSaveText("C:\temp\xml\EDT_ENVELOPE_SOAP_ENVIADO.xml",EDT_ENVELOPE_SOAP_ENVIADO)
fSaveText("C:\temp\xml\EDT_RETORNO_SOAP.xml",EDT_RETORNO_SOAP)
fSaveText("C:\temp\xml\EDT_Retorno_xml.xml",EDT_Retorno_xml)
END
Info("finalizado ciencia/confirmacao")
------------------------------------------------
//PROCEDURE assinar_xml(recebe_xml,recebe_refUri,recebe_id)
//,recebe_dados_certificado
//Info(recebe_dados_certificado)
clX509certi is X509Certificate2("D:\BACKUP_HD\AMARILDO\infinity\certificado_infinitus_rm2020.pfx","rm2020")
//clX509certi is X509Certificate2(recebe_dados_certificado)
clDoc is System.Xml.XmlDocument;
clDoc.LoadXml(recebe_xml) // Ler um arquivo Xml
nQtdeRefUri is int= clDoc.GetElementsByTagName(recebe_refUri).Count //_refUri= (sRefUri IS STRING = "infNFe")
IF (nQtdeRefUri) =0 THEN
RESULT "erro assinar" //nao existe // does not exists // ne pas exister
ELSE
VrSignedXml is SignedXml(clDoc) //cria um objeto assinado
VrSignedXml.SigningKey = clX509certi.PrivateKey // adiciona a chave do certificado
Reference is Reference //= new Reference(); // Cria a referencia para assinatura
Reference.URI = "#" + recebe_id
Env is XmlDsigEnvelopedSignatureTransform // adiciona um XmlDsigEnvelopedSignatureTransform para a assinatura
Reference.AddTransform(Env)
c14 is XmlDsigC14NTransform
Reference.AddTransform(c14)
VrSignedXml.AddReference(Reference) // adiciona a referencia no xml assinado
VrkeyInfo is KeyInfo // Cria a chave
VrkeyInfo.AddClause(new KeyInfoX509Data(clX509certi)) // carrega o certificado em um keyinfox509 e adiciona ao keyinfo
VrSignedXml.KeyInfo = VrkeyInfo // adiciona o keyinfo ao xml assinado
VrSignedXml.ComputeSignature()
xmlDigitalSignature is System.Xml.XmlElement dynamic = VrSignedXml.GetXml() // busca a representacao XML da assinatura e salva no XML
clDoc.DocumentElement.AppendChild(clDoc.ImportNode(xmlDigitalSignature, True)) // adiciona a assinatura no documento
RESULT clDoc.get_InnerXml() //salva o documento assinado
END
--------------------- Indice WebService
Criar Projeto WebService - Lista Site - - WebService - 001/...
Deploy - Gerando WebService/Levando Servidor/Instalar/Mostrar - WebService - 002/...
Instalando SoapUI - Testar WebService - Aula 1040 - WebService - 003/...
Ajustando Xml Lista Site WebService - WebService - 004/...
Consumir WebService - WebService - 005
Xml - Consumir Ler Xml e colocar Tabela - WebService - 006
Dolar - Consumir WebService - Cotação Dolar - 007
Cnpj Receita - Consumir WebService - 008/...
Cep Buscar WebService Correio - WebService - 009/...
CONSULTA CADASTRO SEFAZ P-1 - DICAS 1871 - WINDEV_23 - WEBSERVICE 010 -
CONSULTA CADASTRO SEFAZ P-2 - 1872 - PUBLICA - WINDEV_23 - WEBSERVICE 011 -
CONSULTA CADASTRO SEFAZ P-3 - 1873 - PUBLICA - WINDEV_23 - WEBSERVICE 012 -
DICAS 1877 - WINDEV_23 - WEBSERVICE 014 - CNPJ BUSCA CADASTRO ACBR
DICAS 2019 - WINDEV - WEBSERVICE - 015 - APRENDER A FAZER REST WEBSERVICE
DICAS 2020 - WINDEV - WEBSERVICE - 016 - CRIANDO TABELAS
DICAS 2021 - WINDEV - WEBSERVICE - 017 - WDTESTREST
DICAS 2022 - WINDEV MOBILE - WEBSERVICE - 018 - LER WEBSERVICE RESTSend
DICAS 2023 - WINDEV MOBILE - WEBSERVICE - 019 - LER WEBSERVICE RESTSend SOMENTE 1 REGISTRO
DICAS 2024 - WINDEV MOBILE - WEBSERVICE - 020 - WEBSERVICE RESTSend CRIA NOVO REGISTRO - httpPost
DICAS 2025 - WINDEV MOBILE - WEBSERVICE - 021 - WEBSERVICE RESTSend ALTERA REGISTRO - httpPut
DICAS 2026 - WINDEV MOBILE - WEBSERVICE - 022 - WEBSERVICE httpRequest httpDelete
DICAS 2033 - WINDEV - WEBSERVICE 23 - HTTPRequest - HTTPGetResult - fSaveBuffer - BAIXAR ARQUIVO
AO VIVO-SOAP-DICA 2095-WINDEV MOBILE WEBDEV-WEBSERVICE COM MOBILE -
DICAS 2096-2095 - WINDEV WEBDEV MOBILE - WEBSERVICE 25 - SOAP
DICAS 2097 - WINDEV MOBILE - WEBSERVICE 26 - MOSTRAR CLIENTES - SOAP
DICAS 2132 - HANGOUT AO VIVO 20 HORAS 30/05 - WEBSERVICE SOAP COM MOBILE
DICAS 2163 WINDEV WEBDEV MOBILE WEBSERVICE 28 SOAP
DICAS 2226 WINDEV WEBDEV MOBILE 24 NOVIDADES 26 WEBSERVICE 29 HTTPREQUEST - BUSCA CNPJ
DICA 2687 - WINDEV WEBDEV MOBILE - WEBSERVICE 32 - EXPLICANDO WEBSERVICE SOAP E CONSUMIDO MOBILE E DESKTOP
-------------------