Página 1 de 4
Novo projeto
Enviado: 27 Jul 2015 19:45
por JoséQuintas
Pra não depender de autorização, e pra ficar bem clara a proposta, endereço separado.
Depois veremos o que fazer.
Não tem conversão de TXT: Xml chegou pra ficar. Aprender é fácil, e aqui no fórum podemos ajudar.
Não lê do disco: Sabe usar MemoRead(), então pode ler do jeito que quiser.
Não salva no disco: Sabe usar MemoWrit(), então sabe salvar do jeito que quiser.
Só trabalha com XML: pensou em rotina pra gerar INI, melhor gerar no padrão nacional que é XML.
Mudou o projeto? Ok. Só alterar os XMLs/strings.
Ainda não tá pronta pra 3.10: Vamos descobrir que letras alterar.
Precisa tempo e paciência: Uma única letra faz não funcionar, então tempo e paciência pra descobrir essa letra são necessários.
O ponto de partida está aí.
Daqui pra frente é descobrir que "letras" precisa alterar.
Sugestão: começar pela consulta protocolo, assim dá uma visão exata do que esperar, e no momento é uma das que uso 24 horas, então sei que funciona.
https://github.com/JoseQuintas/SpedSefazClass
Como usar o github:
Precisa do software GIT.
Pra baixar, aqui digitei no prompt pra usar a pasta SpedSefazClass\:
Código: Selecionar todos
git clone https://github.com/JoseQuintas/SpedSefazClass.git SpedSefazClass
a partir daí, pra atualizar, é entrar na pasta SpedSefazClass e digitar:
Nota: Exatamente igual no Harbour, só muda endereço, afinal é no mesmo GITHUB.
Também serve o link direto pra quem não quer o git: [url]
https://github.com/JoseQuintas/SpedSefa ... er.zip[url]
Novo projeto
Enviado: 27 Jul 2015 19:55
por JoséQuintas
Assinatura:
Código: Selecionar todos
aDelimitadores := { ;
{ "<enviMDFe", "</MDFe></enviMDFe>" }, ;
{ "<eventoMDFe", "</eventoMDFe>" }, ;
{ "<eventoCTe", "</eventoCTe>" }, ;
{ "<infMDFe", "</MDFe>" }, ;
{ "<infCte", "</CTe>" }, ;
{ "<infNFe", "</NFe>" }, ;
{ "<infDPEC", "</envDPEC>" }, ;
{ "<infInut", "<inutNFe>" }, ;
{ "<infCanc", "</cancNFe>" }, ;
{ "<infInut", "</inutNFe>" }, ;
{ "<infEvento", "</evento>" }, ;
{ "<infPedidoCancelamento", "</Pedido>" }, ; // NFSE ABRASF Cancelamento
{ "<infRps", "</Rps>" } } // NFSE ABRASF
Aqui está bem claro o bloco necessário pra assinatura, aonde começa e aonde termina.
Se tem algum documento novo, só precisa alterar aí.
O detalhe importante é a ordem: por exemplo, MDFE tem tag NFE por isso vém primeiro, senão vai ser considerado NFE.
Novo projeto
Enviado: 27 Jul 2015 20:39
por JoséQuintas
Tudo passa por estes métodos pra comunicação:
Código: Selecionar todos
METHOD XmlSoapPost( cUF, cCertificado, cProjeto ) CLASS SefazClass
METHOD XmlSoapEnvelope( cUF, cProjeto ) CLASS SefazClass
METHOD MicrosoftXmlSoapPost() CLASS SefazClass
Enquanto aqui é uma única rotina, na hbnfe tem isso em cada comunicação.
E isso pra NFE, CTE, MDFE, CCE, etc.
Por incrível que pareça, complicou pra usar isso na hbnfe.
É que tem XML que ela cria pela metade, completando em outro lugar com a outra metade.
E mesmo assim, de uma metade pra outra, lendo e gravando do disco, nas pastas conforme configuração.
Aparentemente uma complicação desnecessária.
E acaba complicando entender qual é exatamente cada XML.
Por essas e outras, melhor trabalhar em separado, até decidir como integrar ao projeto, e até mesmo se vai precisar integrar.
Aqui não precisa de nenhuma. (quem vai precisar é quem usa, e pode decidir do jeito que quiser).
Novo projeto
Enviado: 27 Jul 2015 23:09
por fladimir
Ok José, vou baixar e testar e te falo.
Obrigado.
Novo projeto
Enviado: 28 Jul 2015 16:34
por JoséQuintas
O primeiro teste básico seria este, precisa da chave e do nome do certificado
Código: Selecionar todos
PROCEDURE Main
LOCAL oSefaz := SefazClass():New()
oSefaz:NfeConsulta( "chave", "nomeDoCertificado" )
? oSefaz:cXmlRetorno
RETURN
Novo projeto
Enviado: 28 Jul 2015 22:25
por JoséQuintas
Atualizado consulta status pra 3.10.
Testei em SP e ok.
Só mudei a linha com a versão.
Código: Selecionar todos
METHOD NFeStatus( cUF, cCertificado, cAmbiente ) CLASS SefazClass
...
::cVersaoXml := "3.10"
Pra usar:
Código: Selecionar todos
PROCEDURE Main
LOCAL oSefaz := SefazClass():New()
oSefaz:NfeStatus( "SP", "NomeCertificado", "1" )
? oSefaz:cXmlRetorno
RETURN
Como eu disse antes, é uma classe curta e grossa, para a parte que interessa.
É enviar XML e receber XML, sem nem precisar arquivo em disco.
E pra atualizar, é alterar algumas letras.
Para o status foi fácil descobrir as letras a alterar.
Novo projeto
Enviado: 28 Jul 2015 22:53
por fladimir
Testei aki antes do teu ultimo post e o Seleciona Certificado esta Ok, o Consulta Status NFe da erro.
Código: Selecionar todos
na Linha 696: oServer:Open( "POST", ::cWebService, .F.)
o ::cWebService ficou "https://nfe.fazenda.ms.gov.br/producao/services2/NfeStatusServico2" devido ter escolhido "MS"
o XML Enviado é:
Código: Selecionar todos
<?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:Header><nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><cUF>50</cUF><versaoDados>2.00</versaoDados></nfeCabecMsg></soap12:Header><soap12:Body><nfeDadosMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><consStatServ versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe"><tpAmb>1</tpAmb><cUF>50</cUF><xServ>STATUS</xServ></consStatServ></nfeDadosMsg></soap12:Body></soap12:Envelope>
o Retorno é:
Novo projeto
Enviado: 28 Jul 2015 23:16
por JoséQuintas
Apesar da mensagem de erro, dá pra ver 2.00 nessa quarta linha.
Altere primeiro no método NfeStatus() pra 3.10, que foi o que postei acima.
Enquanto isso vou fazer um teste aqui.
Novo projeto
Enviado: 28 Jul 2015 23:20
por JoséQuintas
Aqui ok para MS.
É só mesmo a alteração que mencionei.
Usei o próprio teste.prg que acompanha a classe.
Notas:
O certificado de SP serviu pra isso, pra consultar status em MS.
No seu teste, o webservice simplesmente rejeitou e a mensagem de erro não ajudaria em nada.
Se obrigasse um certificado de MS, eu nem teria como testar.
Desta vez foi rápido resolver, aliás, tava resolvido antes.... rs
Novo projeto
Enviado: 28 Jul 2015 23:35
por fladimir
mesmo com a alteração o erro mencionado persiste, será q não é algo q preciso registar (DLL etc?) apesar do ACBr estar funcionando aki.
Novo projeto
Enviado: 29 Jul 2015 00:02
por JoséQuintas
É ACBR com capicom?
Pra comunicação e assinatura, é Capicom e Xml5.
E o nome correto do certificado, qualquer coisa use o teste.prg, que ele deixa selecionar certificado.
E pra isso, já usa a capicom.
Xml5
Novo projeto
Enviado: 29 Jul 2015 00:06
por fladimir
É ACBR com capicom?
Sim
Pra comunicação e assinatura, é Capicom e Xml5.
Não mexi em nada, como o ACBr funciona com Capicom penso q o projeto tb deva funcionar...
E o nome correto do certificado, qualquer coisa use o teste.prg, que ele deixa selecionar certificado.
E pra isso, já usa a capicom.
Estou compilando o teste executando escolhendo via Teste o certificado e depois vou no Consulta Status NFe e da o Erro no componente SOAP
Não estou entendendo, como ai funciona aki tinha q funcionar.
Novo projeto
Enviado: 29 Jul 2015 00:08
por JoséQuintas
Também o XML 5.0. Acabou entrando a alteração antes do seu post, tá anexo.
O W7 64 bits tem registro diferente pra programas 32 bits e 64 bits.
Dá uma olhada no readme.txt se precisar.
Em todo caso:
Código: Selecionar todos
Windows 32 bits: copiar as DLLs para c:\windows\system32
Windows 64 bits: copiar as DLLs pra c:\windows\syswow64
Dentro da pasta pra onde foram copiados os arquivos:
(porque cada uma tem um regsvr32.exe diferente)
regsvr32 capicom.dll
regsvr32 msxml5.dll
regsvr32 msxml5r.dll
Novo projeto
Enviado: 29 Jul 2015 00:17
por fladimir
ja tinha instalado, mas em todo caso baixei as q vc mandou e substitui e desregistrei e registrei novamente conforme readme.txt
o Erro permaneceu.
Não sei o q pode ser, amanhã vou fazer o seguinte vou testar em uma maquina XP q tenho aki (virtual) zerada e retorno com os resultados.
Obrigado
[]´s
Novo projeto
Enviado: 29 Jul 2015 00:19
por JoséQuintas
Apesar da classe não estar preparada para o formato do retorno, pra retirar esse envelope, aqui mostrou este retorno.
Código: Selecionar todos
Erro SOAP: XML retorno não está no padrão <?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Header><nfeCabecMsg xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><cUF>50</cUF><versaoDados>3.10</versaoDados></nfeCabecMsg></soapenv:Header><soapenv:Body><nfeStatusServicoNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2"><retConsStatServ xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10"><tpAmb>1</tpAmb><verAplic>MS201503300900</verAplic><cStat>107</cStat><xMotivo>Servico em Operacao</xMotivo><cUF>50</cUF><dhRecbto>2015-07-28T23:14:41-04:00</dhRecbto><tMed>1</tMed></retConsStatServ></nfeStatusServicoNF2Result></soapenv:Body></soapenv:Envelope>