Ir para conteúdo
  • Cadastre-se

Siepi

Membros
  • Total de ítens

    122
  • Registro em

  • Última visita

Tudo que Siepi postou

  1. Siepi

    Dav

    Alguém saberia me informar se é permitida a venda de um DAV de um estabelecimento em outro da rede? Exemplo: Uma pessoa faz um orçamento de manipulado, e pede que ela possa pegar em outra loja que é mais próximo ao seu serviço. O SG dá condição de se consultar qualquer DAV em qualquer das lojas. Mas vender um DAV que foi feito no estabelecimento A no estabelecimento B é permitido?
  2. Regys, funcionou perfeito. Obrigado Esse método não está listado no help, seria interessante atualiza-lo lá. Muito util para quando se tem que assinar um arquivo criado pelo PAF.
  3. Realmente não tem tal método, e seria exatamente isso. Eu criaria o arquivo e logo após grava-lo chamaria o acbrmonitor invocando um método e passando o path do arquivo como parametro para ele assinar como faz com os demais arquivos. Isso tem como ser implementado?
  4. Uai, se tiver, matou meu problema. Vou conferir no help
  5. O meu problema é a montagem do bloco 128 bytes que é pedido e que é assinado. Neste tópico aqui eu perguntei se o ACBR poderia me auxiliar em algo. Mas como não, dei esse por encerrado e abri um para pedir ajuda em relação a eu mesmo assinar. Dá uma olhada, por favor, aqui. Até mesmo para não ficarmos tratando o mesmo assunto em dois tópicos Obrigado pela atenção.
  6. EMBarbosa, é exatamente isso. Estou até quebrando a cabeça em outro tópico com o EAD, pois assinar e criptografar para mim não está sendo o problema, mas o que assinar é o problema. Ficou muito mal explicado no documento do Estado, estou por experimentação, gero e valido no eEcf mas até agora sem sucesso.
  7. Daniel, a assinatura e si está beleza, o meu problema é o tal bloco de 128 bytes que tem que ser assinado. É muito mal explicado na lei como montá-lo. As rotinas em si de assinatura e criptografia estão ok, onde estão sendo aplicadas, o conteúdo que não consigo enxergar com a explicação do documento do Estado. Lá no requisito V do SRE 132 MG001 é dito que: c1) aplicar a função unidirecional MD5 uma única vez na porção do arquivo que compreende entre o seu primeiro byte e os bytes de quebra de linha imediatamente anteriores ao registro EAD, ficando excluído do cálculo do hash o registro EAD. O resultado será um código de 128 bits ou 16 bytes que devem ser inseridos no bloco de dados de 128 bytes que será assinado de acordo com a tabela abaixo: Bloco de dados de 128 bytes que deve ser assinado: Imagem anexada a mensagem bloco128bytes.png onde: - a letra “A” indica o tamanho do hash e deve ser preenchido com valor fixo 16 (em hexadecimal 0x10). - a letra “B” indica o local de preenchimento do hash, sendo que à esquerda fica o byte mais significativo e à direita o menos significativo. - a letra “C” indica os bytes restantes não usados, de preenchimento livre. c2) criar uma chave privada de 1024 bits, equivalente a um número hexadecimal de 256 dígitos, de conhecimento exclusivo da empresa desenvolvedora do PAF-ECF, devendo ser utilizada a mesma chave para todos os PAF-ECF desenvolvidos pela mesma empresa. c3) criptografar o bloco de dados gerado conforme disposto na alínea “a”, utilizando a chave a que se refere a aliena “b” pelo algoritmo RSA de chave pública, sem utilizar nenhuma codificação dos dados além da criptografia RSA, de maneira que o bloco de dados seja recuperado no momento da decriptografia exatamente igual ao detalhado na tabela acima. c4) com o resultado do procedimento descrito na alínea “c3” será obtido um número hexadecimal com até 256 dígitos que deverá ser informado no campo 02 do Registro tipo EAD. Note que da letra B estão preenchido nesse bloco acima 16 posições, mas o md5 por si somente gera uma string com 32 posições. Obrigado pela atenção e se puder me dar um help somente em como montar o tal bloco onde será aplicada a rotina. Abraço
  8. Complementando a informação acima, eu consigo retornar o mesmo conteúdo criptografado com a minha chave privada, usando o openssl_public_decrypt r minha chave pública. Sem problema algum. Quer dizer, está indo e voltando sem perda ou alteração.
  9. Peço ajuda dos prezados no seguinte: Falta apenas a geração do registro do PAF-ECF para eu liberar o nosso sistema. No caso dos meus clientes e de acordo com a MG001, pois atendo apenas Minas, devo ter o registro U1 e o EAD, lembrando que não tenho inscrição estadual e como é alfa, fica tudo branco. Peguei o trecho do componente do ACrEAD que é a function CalcularEAD que vai da liha 738 até 789 para entender a lógica e replicar no php, saindo o seguinte: $data = <<<EOD U106996155000106 02133020017 MULTDATA SISTEMAS LTDA - ME EOD; $pvk = <<<EOD -----BEGIN RSA PRIVATE KEY----- MIICXAIBAAKBgQC4TjPRNaDu14Mc7OhQQ+Pro4WQp0ZXdOyXy83FunyYlM4E981A 9W0PC9dO8CRdOdFZOKd0D1fcqLaUf50FiTROTKjzKRxxd6k34eWjJvr3ArkoiuTA ZorhWrhHZ70zFJG3Nc3vGs4rkm5iury30PC7mMCbz1JVp9BlGU5qX5kWtQIDAQAB AoGAQp8yJ+vk0rFgmbIhf/Iqj2E6xMFSsgZ4B58KMPFqXJVdq3oP3e1ZkNjM6aHw 4yolPMU38sIhFoh+B0vh7MBeAVpOt+DiLWcOCsRSwe2V8/7sh/wgYNSyJ4R/p6+H ujC7Yb7OMVPecwyH8oAsDEzSVxkCXVmfhh5cvjlllu7sdDkCQQDpby9d3G6d8kCr aNNOvcLzSF+YcY/3MK0BpEzRvgW7/GTTK7GJtPiF6VXhn+MmEY0bX8DpgHUF3wrw /CdvFIBLAkEAyh85ALgAKD0o2lC9xd6nOUxbqsz1CEAHicepw5V5M2+f3TLpwLwa vvEUdFPfZkROrYPikf9EOWTSRzqtvjBk/wJAfARoA9PSqPNFTEu6x8ClTB8NOq5K sCcaIx8o+N2dqkvjPRWfkuukhXB8Agyx302/y+VJVkS6502iQHmWcbtQlQJAcaxh qK/TFs5evXmPYUs5jRYOr96ZKEyqcKikJ2VXRsBOjl7l7AlemWiIcmwBRkjAXwG/ WRDRU94KDRlJQZ+CDQJBAL/3LZ6xZFQZUbiIfwwlaiPzVmTSkrEVnmeSwCsGGMro mQkHIpVM+FF4jdOBcKKliexdFX+qsqRH265FvTZrME8= -----END RSA PRIVATE KEY----- EOD; $md5File = openssl_digest($data, 'md5'); $hex = dechex(16); $file = str_pad($hex . $md5File, 128, 0, STR_PAD_RIGHT); $rsc = openssl_get_privatekey($pvk); openssl_private_encrypt($file, $signature, $rsc, OPENSSL_NO_PADDING); file_put_contents('c:\Multpaf\arquivosdigitais\ead.txt', $data . chr(10) . 'EAD' . strtoupper(bin2hex($signature)) . chr(10)); Então explicando o que fiz, baseado no ACBrEAD CalculaEAD carrego o conteúdo do arquivo que quero assinar na variável $data (sem assinatura). carrego o conteúdo da minha chave privada em $pvk faço um md5 do $data que é o conteúdo do arquivo. crio um hexa do número decimal 16 com a função dechex, o conteúdo é sempre 10. crio a variável $file que é o hex de 16 mais o md5 o conteúdo do arquivo e preencho com 0 a esquerda até o comprimento de 128, ficando: 000000000000000000.....1082b996e081a5cc4c21db940c7562232c (128 caracteres) para se formar o bloco que será criptografado. Uso o openssl_get_privatekey para criar o resource da chave privada que vou usar a seguir. Uso o openssl_private_encrypt para criptografar o $file, com a minha private key que vai me gerar $signature Depois dou uma saída em ead.txt com signature convertido para hex e dou um upper, junto com a literal EAD e com $data que é o primeiro conteúdo sem a assinatura, sempre com chr(10) para LF. Anexo está o arquivo gerado, mas o acbrvalidadorpafecf sempre dá que a assinatura é invalida. Já coloquei tirei quebra de linha, pas a direita a esquerda dos bytes mais significativos. Alguém me dá uma luz se os passos são estes mesmos e poderia me descrever a função CalcularEAD para eu ver se entendi direito como ela se desenrola no Delphi. ead.txt
  10. Siepi

    Acbrmonitor E Ead

    Prezados, o arquivo registros do PAF, terei que gerar e assinar. O ACBrMonitor me auxilia em algo nesse processo? Não pergunto sobre arquivos MF, MFD, Sintegra etc, pois estes já são gerados e assinados pelo ACBrMonitor. Minha pergunta é sobre o arquivo da alínea c) Registros do PAF-ECF, do item 1, do requisito V da SRE132 de Minas Gerais (MG001) Se o ACBrMonitor não tem, poderiam me indicar alguma coisa no forum, eu busquei mas sem sucesso.
  11. E complementando, parou o erro do retorno faltando linhas. Mando 48 comandos, voltam os 18 sem problema.
  12. Daniel, maravilha. Agora eu notei que ele cria o retorno.tmp e deixa ele. Quando terminou o processamento, renomeou para retorno.txt,como está explicado no comentário no fonte. Aí funfou igual sopa de minhoca. Quanto a porta estar como Porta=Procurar, reiniciei minha máquina e passou a funcionar, vai entender. Vou monitorar a questão da quantidade do retorno e qualquer coisa posto aqui. Uma dúvida, quando sair uma oficial na parte de downloads, essa modificação estará nela? Obrigado e boa noite.
  13. Eu utilizo na configuração de porta deixando como PROCURAR no ini. Funciona normal na versão oficial que tenho que é a 0.10.8.1 Vou configurar uma porta fixa, COM1, e depois posto o teste.
  14. Confirmei aqui e era confusão minha quanto a leitura ou não da impressora. Obrigado pela atençao
  15. Vou jantar e daqui a pouco retorno. coloco aqui o acbrmonitor.ini caso seja util ACBrMonitor.ini
  16. Daniel, com o exe novo, para cada comando ele deu ERRO: Communication error 6: Identificador inválido.
  17. Daniel, para nao causar confusão, o vídeo não foi com o seu exe, vou testa-lo e te falo. Abraço
  18. Senhores seguem o vídeo como prometido. Notem que não existem nenhuma aplicação trabalhando junto. Apenas peguei o arquivo que o Daniel gerou acima o ent.txt, renomeei para remessa.txt e colei na pasta remessa. Enquanto o acbrmonitor vai mandando os comando, antes de finalizar, já é gravado no pasta retorno o retorno.txt e notem que as vezes aparece um retorno.tmp tb. http://youtu.be/OJujj7aD_sU
  19. Novamente alinhando. Eu relatei um problema de retorno faltando comandos, intermitente. Relatei que notei que o retorno.txt vai sendo gerado mesmo antes do processamento completo do remessa.txt que aomeu ver não deveria acontecer, pois o arquivo remessa.txt como não foi totalmente processado, não pode retornar nada até sua finalização. Então são dois problemas distintos. O segundo eu consigo simular com mais facilidade. Vou gravar um vídeo, com o windows explorer aberto em duas janelas, o acbrmonitor aberto tb e vou colar o arquivo numa janela na pasta remessa e vocês verão que enquanto o acbrmonitor vai mandando os comandos para a impressora, um retorno.txt é gravado na pasta e não deveria acontecer. Mais tarde posto o vídeo.
  20. Não, justamente para não encavalar. A comunicação sempre faço de forma sequencial, mando outro arquivo quando tenho resposta do que enviei antes. Se vc pegar o remessa.txt que mandei ou o do Daniel, e gravar na pasta vc notará que o acbrmonitor antes da impressora lançar todos os itens, enquanto o acbrmonitor está lançando os comando para a impressora, ele já gerou o retorno.txt na pasta e não deveria. Deveria gerar somente após terminar o remessa.txt. Creio ser isso que possa estar causando o problema. Pelo menos o comentario no fonte contradiz o que está ocorrendo. Pois o acbr deveria executar tudo para depois gerar o retorno.txt
  21. Escrevo o arquivo inteiro como remessa.tmp Depois de escrito inteiro renomeio para txt, que é o arquivo que o acbrmonitor está aguardando.
  22. Para ilustrar o que eu faço. Escrevo na pasta c:\Multpaf\ecfmonitor\integracao\remessa\remessa.txt (pasta somente para esse arquivo) aguardo o arquivo c:\Multpaf\ecfmonitor\integracao\retorno\retorno.txt (pasta somente para esse arquivo) Quando eu escrevo, entro num loop e vou lendo, sem bloqueio, se existe o retorno.txt e quantas linhas ele tem e só quando ele possui a mesma quantidade de linhas que eu mandei no remessa.txt, que no exemplo lá do início do tópico são 48 linhas, é que eu aceito ele como completo. A mesma prevenda, hora funciona, hora não. Creio que tenha a ver com a quantidade de comandos que mandei na remessa, pois eu vejo que o acbrmonitor gera o retorno.txt, mesmo mandando itens para a impressora e ele deveria escrever retorno.txt somente no final, após ter processado todo o remessa.txt com os 48 vendeItem que mandei.
  23. Daniel, pelo que entendi lendo o comentário do fonte que diz: { Primeiro salva em Temporário para que a gravação de todos os Bytes ocorra antes que a aplicação controladora do ACBrMonitor tente ler o arquivo de Resposta incompleto } , ele gera o tmp já na pasta e no final renomearia correto? Mas o que acontece quando vão diversos comandos na remessa? a cada um ele colocaria txt e depois voltaria para tmp e depois para txt novamente?
  24. Prezados, conforme foi solicitado, continuei observando para verificar algum padrão na ocorrência do erro e o único padrão é que quando se é gerado um arquivo .tmp alternando-se com o arquivo .txt é que ocorre o erro. E somente ocorre quando existem diversos comandos em sequencia na mesma remessa.txt Como falei, trabalho com pre-venda e envio o remessa.txt anexo acima, algumas vezes o retorno.txt que é gerado, vem com as 48 linhas esperadas, que são as respostas de cada comando que estava no remessa e não é visto o retorno.tmp sendo gerado na pasta. Agora, quando vejo o retorno.tmp sendo gerado pelo acbrmonitor, em todas as vezes ele gerou com linhas a menos que a remessa e eu me baseio justamente na quantidade de linhas retornadas para saber se o comando inteiro da remessa foi ou não finalizado. Agora pergunto, porque o mesmo arquivo de remessa, hora o acbrmonitor gera o retorno.txt de uum vez, hora eu vejo ele gerando 2, ou 3 vezes um retorno.tmp. Mas volto a repetir, sempre a mesma remessa. e com arquivos de remessa pequenos, as vezes ocorre mas com muito menos frequencia. Enfim, espero contar com a ajuda dos colegas.
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.