Ir para conteúdo
  • Cadastre-se

guilhermesmc

Membros
  • Total de ítens

    28
  • Registro em

  • Última visita

Posts postados por guilhermesmc

  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. 14 horas atrás, pacnet disse:

    Só complementando o cenário caótico de um cliente com 3 caixas, uma infra cara pois ele em hipótese alguma podera ficar sem energia eletrica sendo assim uma central de nobreaks ou um nobreak parrudo para manter os caixa e o servidor de SAT, o custo só com isso já fica imensamente maior que um SAT para cada PDV, indo mais longe ainda, cai um raio na rede eletrica mesmo com nobreaks bons e aterramento já vi varios equipamentos queimar ao mesmo tempo, pelas leis do universo que regem o mundo da informatica, em um cenário onde temos um modem para INTERNET  e um SAT, se cair um raio vai com certeza queimar os dois, agora com 3 SATs pouco provavel queimar os 3.

    Resumindo é um tiro no pé, pois o cenário descrito acima não acontece as 8:00 Hs da manhã e sim as 17:55 Hs onde não se tem onde comprar mais nada, a não ser que para não correr esse risco o desenvolvedor compre alguns equipamentos SAT reserva sem custo para o seu cliente pois já faz com um só equipamento para economizar, sendo assim o prejuizo sera seu se nada grave acontecer, mas se acontecer o cliente ainda vai jogar na sua cara que a ideia foi dele mas o técnico no assunto é você que deveria explanar todos esses detalhes para ele antes da implantação e que ele não se importa em gastar desde que o comercio dele não pare.

    A ideia é ótima, mas os problemas que podem surgir são maiores.

    (P.S. Imagina o trabalho com analise e desenvolvimento, as horas gastas para desenvolver o servidor que funcione perfeito... para o primeiro pau que der seus clientes falar tira essa porcaria e coloca um SAT para cada caixa.)

     

     

    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.

  3. 18 horas atrás, tailan disse:

    Boa Tarde,

    Alguém que implementou o SAT compartilhado, como tratou a situação do TEF que possui o seguinte problema, você precisa informar no TEF o número do documento fiscal, e precisa das informações do TEF para emitir o CF-e? Ou seja, se tiver apenas um SAT por terminal, basta pegar o ultimo número mais um, mas como garantir o numero do documento fiscal se o SAT processa remotamente e compartilhado com outros terminais?

    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.

  4. 1 hora atrás, Daniel Simoes disse:

    Mais um ponto de preocupação (além do Switch e cabos de rede)... se a máquina do Servidor SAT para... TODOS os caixas morrem...

    Sei que não é simples desenvolver um servidor desse nível...e deve ser muito bacana ver ele funcionando... mas sinceramente... acho que isso é "economia a base da porcaria"... eu não entro nessa conversa do Cliente... Seu cliente pode achar que está economizando... mas no dia que der um problema em um dos componentes cruciais...e ele ter prejuízos e reclamações,  ele vai querer achar um culpado... mesmo que o motivo seja a queima dos equipamentos por descarga elétrica...

    Bom... acho que já deixei claro meu ponto de vista... vou parar de monitorar esse tópico...

     

    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.

    • Curtir 1
  5. 12 minutos atrás, josehenriquebr disse:

    Guilherme eu estou nesse cenário também de SAT num servidor de aplicação, tenho uma aplicação concentradora do SAT ( que deve ser ligado por USB, se tivessem projetado com comunicação TCP/IP seria muito melhor ). E os PDVs falam com o servidor que conversa com o SAT. 

    Ainda tenho que verificar uma maneira de manter 2 (ou mais) servidores SAT e fazer o fail over e balanceamento desses ( aceito sugestões ), trabalho numa rede de varejo atacado, nossas lojas tem mais de 30 checkouts, e já me foi instruído para usar o máx de PDVs por SAT, isso terá um custo menor de equipamentos, mesmo com o custo de ter uma rede redundante , e um wifi como contingencia.

    Até agora testamos em homologação com 3 PDVs e na produção devemos entrar com o 2 PDV paralelo essa semana.

    Fiquei curioso quando disse  "questão da redundância paralela"

    Ainda temos alguns pontos para acertar, porém a facilidade é ter o ambiente cliente no PDV e deixar pronto também o ambiente Servidor, assim numa catástrofe geral, o aparelho SAT pode ser conectado ao checkout e o mesmo irá funcionar off line.( seria uma terceira contingencia).

     

    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

  6. 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.

     

  7. 1 minuto atrás, Juliomar Marchetti disse:

    vamos lá sem o TEF ainda assim ele consegue vender??? tem dinheiro né?

    NFC-e emite em contingência??? não dá???

    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?

  8. 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.

    • Curtir 1
  9. 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.

     

    sats_dc.png

  10. 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.

     

    sats_dc.png

    • Curtir 1
  11. Em 10/7/2015, 3:46:32, Daniel Simoes disse:

    Na minha opinião... Servidor SAT é uma péssima ideia... Ainda mais em um estabalecimento com 20 checkouts...

    Se o Hub cair, também cairão todos os caixas... Ou seja, eles nunca poderão rodar off-line...

    Para um estabelecimento desse porte,  compartilhar SAT me parece uma economia desnecessária e perigosa...

    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.

  12. 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.

  13. Estou usando exatamente o seu código , 

    Sim eu sei do MD5, mas me diz uma coisa qual o valor que o seu HashSizeValue da variável CSP, retorna?

    o meu está retornando 0

    Mas estranho que a variavel HASH está recebendo 32 (bytes) * 8 (bit) = 256bits

    Só que quando assino ao invés de assinar com os 256bits ele assina com 128bits

     

     

    csp.KeySize = 2048;

    hash.HashSize = 256;

  14. Usando o código do Guilhermesmc, consegui selecionar o certificado A3 e gerar a chave.

    porém ela também ficou com 172 bytes, quando fiz com openssl, deu o mesmo resultado 172 bytes!

    Bem, acho que é isso...

    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.

  15. 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);
    
    				}
    			}
    		}
    
    • Curtir 1
  16. 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.