Ir para conteúdo
  • Cadastre-se

guilhermesmc

Membros
  • Total de ítens

    28
  • Registro em

  • Última visita

Tudo que guilhermesmc postou

  1. char* __stdcall GetPortaSAT(char *numSerie, int numSessao, char *codAtivacao); char* __stdcall GetMapaPortasSAT(char *codAtivacao); int __stdcall AbreSerialSAT(int commPort, int nBaudRate, int nBits, int nParity, int nStopBits); os parametros nBaudRate, nBits, nParity e nStopBits podem ser informados todos como 0 pois são ignorados pela DLL.
  2. Tive esse problema por utilizar caracteres especiais na descrições dos produtos.
  3. Que nem eu disse anteriormente, eu fiz isso pois sei a infra que eu tenho. Realmente não aconselho essa opção para clientes que não tem uma infra adequada. (No break para os servidores/switchs, redundâncias e etc) Atualmente rodo 40 checkouts em 2 lojas utilizando somente servidores de sat e o único problema que tive até hoje foi com os equipamentos. Um outro potencial cenário favorável ao servidor de sat é quando o cliente opta por utilizar a NFCe e dai o servidor de sat encaixa na contingência.
  4. Minha solução: Eu trabalho com numeros de cupom "virtuais" e utilizo o numero do cfe somente para fins fiscais. Cada documento emitido no pdv (venda, canc, fechamento op e etc), utiliza um numero sequencial do pdv, e é este que eu envio ao tef.
  5. O único sat que é viável utilizar mais de 1 na mesma maquina é o da kryptus.
  6. Segue exemplo funcionando da consulta.
  7. Ele pede mas não valida, aqui se eu der um cancelar na tela de seleção de certificado ele acessa normalmente...
  8. Faz umas 2 semanas que já estou utilizando normalmente.
  9. Daniel, não discordo do seu ponto de vista e inclusive reconheço que não é qualquer cliente que pode fazer isso... Eu fiz pois sou o desenvolvedor e o cliente, então eu sei a infra que eu tenho e o que da ou não da para fazer, tanto que na filial em que utilizo os sats direto nos pdvs, é devido a loja estar em reforma e não ter a confiabilidade necessária para utilizar os servidores. A única coisa que eu fiz foi dar meus 2 cents sobre o assunto para quem quiser mexer com isso. Obs: Por isso mesmo que eu tenho 3 servidores totalizando 10 sats e não somente um servidor, afinal, quem tem 1 não tem nada rs.
  10. A questão da redundância paralela é simplesmente isso: O servidor roda com 4 sats em paralelo no mesmo servidor, logo consegue processar 4 vendas por vez (balanceamento) e no caso de um dos sats parar os outros 3 continuam processando (redundância). Cada sat roda em um processo separado que o servidor gerencia, logo se um processo travar ou crashar os outros continuam funcionando. Cada processo tem um loop onde ele tenta pegar uma venda para processar. Processo que ele efetua: Existe uma tabela onde o servidor grava os xmls recebidos dos pdvs. Cada processo com o seu sat tenta dar um update na tabela colocando o numero de serie dele em um dos campos, por mais que os 4 tentem ao mesmo tempo o banco de dados só vai deixar um conseguir dar esse update. Se ele não conseguir, tenta com outro xml no banco. Se ele conseguir ele grava no banco o numero de sessão que ele irá utilizar para processar a venda (qualquer problema o numero de sessão está lá para ser utilizado no ConsultarUltimoNumeroSessao). Ele envia a venda, pega o retorno do sat e grava no banco. Durante todo esse processo o pdv estava conectado ao servidor consultando o "status" da venda enviada. Após o processamento o servidor retorna ao pdv o resultado (xml retornado ou erro retornado). O servidor só deixa conectar N sockets ao mesmo tempo, onde N = número de sats ativos e desbloqueados. No caso do client no pdv, ele tenta conectar no primeiro servidor, se não conseguir (servidor offline ou com todos os sockets em uso) vai pro segundo e assim vai. Uma vez que ele conseguir enviar o xml e pegar o identificador referente à aquele xml, ele continua com aquele servidor até o termino do processo. Espero ter ajudado... Abs
  11. NFCE utilizada em modo offline: falta de conexão com a sefaz e também no caso de falta de conexão interna do estabelecimento (ex: todos os switchs/hubs queimaram)? No caso de SP o contribuinte que optar por utilizar a NFCE vai comprar um SAT para cada checkout também já que não existe contingência offline? Pra que utilizar NFCE em primeiro lugar? Ou compraria 1/2/3 SATs compartilhados para o estab inteiro só de backup no caso de queda da conexão/sefaz? Dependendo da quantidade de checkouts, do dia e da quantidade de máquinas POS que um varejo tem, fica praticamente impossível trabalhar nesse cenário. Qual a possibilidade real de 2/3 switchs darem problema no mesmo dia? Que eu equipe todos os pdvs com uma conexão de rede secundária (ex wifi), qual será meu gasto perto de ~1200/pdv por um aparelho que se vier a apresentar algum problema não tem conserto.
  12. Com 60% pra mais de vendas em TEF depende muito se a pessoa tem dinheiro ou não na falta do mesmo. Quanto à NFCE, desculpe minha falta de familiaridade com o projeto... mas é o pdv que comunica diretamente com a sefaz e no caso de falta de conexão emite em contingência ou tem um servidor que faz o processamento online/contingênciado para os checkouts?
  13. Se "o" switch morre, morre o TEF, a NFCE e assim vai... Investir em infra de rede não é algo necessário só para esse cenário, mas como vários outros também. Concordo que existe esse risco, por mais baixo que seja, por isso coloquei os caixas pares em um switch e os impares em outro. Em outra filial eu tenho caixas com SATs locais que funcionam 100% offline.
  14. Bom vou deixar os meus 2 cents aqui. Estou trabalhando com SATs compartilhados desde junho de 2015, e no atual momento estou rodando uma loja de 23 checkouts com 4 aparelhos redundantes-paralelos resultando em um montante de mais de 260 mil cupons emitidos desde então. A diferença do sistema que eu desenvolvi tanto na parte do servidor quanto na parte do checkout é a questão da redundância paralela, os 4 sats do servidor funcionam em paralelo, tanto para balanceamento de carga quanto para backup. Na parte do checkout, eu tenho 3 servidores, um com 4 sats (o primário) e 2 servidores backup com 3 sats cada (secundário e terciário), que o pdv faz um "loop" até achar um servidor online que tenha sats "ociosos" (no meu cenário de 23 checkouts é muito raro que aconteça uma venda no servidor secundário por exemplo, a incidência de finalizações no mesmo instante é muito rara). Além de ter uma redução considerável nos custos, a administração dos aparelhos ficou muito fácil, já que periodicamente o servidor consulta status dos aparelhos, logs e etc. Na questão de infra as alterações que fiz foram: Comprei um switch a mais e metade dos pdvs ficaram no switch original e a outra metade no novo switch. Um dos servidores fica ligado em um dos switchs dos caixas. Obs: Só para constar, o paralelismo-redundante só é possível com equipamentos da Kryptus, nenhum outro fabricante consegue tratar mais que um sat por máquina de forma confiável.
  15. Eu recomendaria o SAT da Kryptus, é o único que não utiliza emulação Serial para comunicar com o SAT, utilizar a usb diretamente é muito mais estável. Estou com vários sats deles ligados direto, comunicando no mínimo a cada 30 segundos com a "AC", 24h por dia e a grande maioria deles não teve um retorno sequer de timeout/falha de comunicação. Praticamente todos já efetuaram mais de 40 mil vendas cada.
  16. SAT da Kryptus, nenhum problema, estável e rápido. Sem contar que ele não utiliza uma porta "COM" emulada... o que o torna muito mais robusto e confiável na parte de comunicação.
  17. Estou rodando 8 checkouts no modo servidor e até agora não tive problema nenhum... a unica alteração na infra foi a adição de um switch adicional, deixando metade dos checkouts em um e a outra metade no outro. Se o cliente não tem infra pode até ser uma péssima ideia... agora se tem, não vejo problema algum.
  18. Alguem conseguiu utilizar? independente dos dados que eu envio a resposta sempre vem vazia. Nem crítica aos dados enviados a sefaz está fazendo.
  19. Acredito que para isso que existe a função ConsultarNumeroSessao...
  20. Daniel acredito que não seja esse o problema não... até porque você teria muito lixo de memória junto com a string e não conseguiria utilizar o retorno. Não trabalho com delphi, porém no caso a variável do tipo PAnsiChar é um ponteiro para uma string correto? talvez tentar copiar o conteúdo para outro lugar e não utilizar o ponteiro original após o retorno da função. Talvez algumas DLLs estão retornando ponteiros estáticos, e enquanto a AC está utilizando aquele ponteiro a DLL pode estar escrevendo nele novamente.
  21. Você esta utilizando explicitamente SHA256 para gerar a variavel encrypted? Se não me engano SHA não tem nenhuma variação que gera somente 128 bytes. MD5 gera 128 bytes.
  22. Utilizando o meu código aqui eu consigo chegar nos 344 bytes que a sefaz pede: Exemplo gerado pelo código postado acima: "YOXBBoAVZ/RnlTautWW0DzTgao15SQR8cyZ1cGJrvx6v+Ap6pH5oiOzIoPk3BBfp6KmTHOEyVTE6E80x/VZvMAyeCyvEm57wmFrUMmL7JcDTqbAvQFpEm71licVRsGaa0WVppko6SYHC58TTqqgpDZWU4q1gjkAJOn7VERyIJDlTXJe3uWrlyvH3z2iyd1ooa7gA4N/IVLzEOTk5ByosiNg+T3MUftNioo8McdhGNNSNk/kxZG2d0cCFw71YaiiyR2g1JGFH4bgH7bAC6vD8r4nECkZKVsyN7cHoSwcoAo3dbT6+TvWVToXgze2EU4w3Plq3BMxYmOJN0i31KWXMQw==" A variavel data fica com 28 bytes. A variavel hash fica com 32 bytes. A variavel encrypted fica com 256 bytes. E o resultado fica com 344 bytes.
  23. Não sei se ajuda alguem porém aqui vai o código em C# que eu utilizo para gerar a assinatura. private void ReloadCerts() { var store = new System.Security.Cryptography.X509Certificates.X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly); this.certs = new List<X509Certificate2>(); this.cmbCertificado.Properties.Items.Clear(); var _certs = store.Certificates .Find(X509FindType.FindByTimeValid, DateTime.Now, true) .Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, true); foreach (var cert in _certs) { if (cert.HasPrivateKey) { this.certs.Add(cert); this.cmbCertificado.Properties.Items.Add(cert.GetNameInfo(X509NameType.SimpleName, false)); } } } private void btnGerar_Click(object sender, EventArgs e) { if (this.cmbCertificado.SelectedIndex >= 0) { var cert = this.certs[this.cmbCertificado.SelectedIndex]; //if (cert.Verify()) { var data = Encoding.UTF8.GetBytes(this.txtCNPJSoftwareHouse.Text + this.txtCNPJContribuinte.Text); RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PrivateKey; // cert = certificado X509 var sha = new SHA256Managed(); var hash = sha.ComputeHash(data); var encrypted = csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA256")); this.txtAssinatura.Text = Convert.ToBase64String(encrypted); } } }
  24. Exemplo funcional em C#.net: var data = Encoding.UTF8.GetBytes(CNPJSoftwareHouse + CNPJContribuinte); RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PrivateKey; // cert = certificado X509 var sha = new SHA256Managed(); var hash = sha.ComputeHash(data); var encrypted = csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA256")); var assinaturaFinal = Convert.ToBase64String(encrypted);
×
×
  • 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.