Bom Pessoal obrigado por todas as respostas, gostaria de adicionar aqui a minha experiencia com o node.js e o Electron nesses ultimos 3 dias. E como eu acredito que muitos persistem nessa história, normalmente nós que não temos muita experiencia.
Consegui comunicação com o SAT via electron, vou deixar alguns passos aqui para quem nunca foi para esse lado da força, o teste que recomendo é com o emulador SAT da SEFAZ, e quero colocar aqui para deixar alguma explicação prática.
Em meu caso, como uso o windows, tive que instalar a versão 32bits do Node.js, pois a DLL do emulador da SEFAZ é disponibilizada apenas em 32bits, ou eu não encontrei uma de 64bits, porque 32bits? Cara, perdi um tempinho tentando rodar 32bits no 64bits hauhuauha, esquece essa vida. Instala o node.js 32 bits.
Acesse via CMD o diretorio app. (Para consumir a DLL no node.js me recomendaram o node-ffi e então eu usei ele:)
> npm install ref
Recomendo uma leitura sobre o node-ffi
https://github.com/node-ffi/node-ffi Crie um arquivo na pasta app nomeando como main.js (ou qqr nome que vc queira dar pra ele, ex: exemplo,js) com o seguinte codigo:
//------------------------------ inicio
const ffi = require('ffi'); // Carrega a modulo ffi
const ref = require('ref'); // Carrega...
var sat = ffi.Library('SAT.dll', { // SAT.dll é a DLL que a sefaz disponibiliza, deixa na mesma pasta (diretorio) ou coloque o caminho da dll
'ConsultarSAT': ['string', ['int']], // Comando para constultar o SAT se esta operante, string pois o que retorna é string, e o int é porque vc envia um inteiro qué é um numero // de sessao enviado pelo Aplicativo Comercial (você)
'ConsultarStatusOperacional': ['string', ['int', 'string']] // Deixei como exemplo aqui, string pois a resposta é uma string, alias acredito que todos são string, int pois vc envia
// o numero de sessao e string é o código de ativação do SAT
});
var session = Math.floor(Math.random() * 999999); // Isso aí gera o um numero inteiro aleatorio de 6 digitos
var ConsultarSAT = sat.ConsultarSAT(session); // faço a consulta
console.log(ConsultarSAT); // E aí a resposta
//--------------------- fim
Se der tudo certo a resposta será algo parecido com isso:
815113|08000|SAT-CFe em opera??o.||
O que eu não queria fazer era ter que aprender mais uma liguagem e começar algo do zero, tenho um PDV construido as pressas que roda com Codeigniter jQuery Bootstrap mariaDB e bla bla bla. Percebi que a curva de aprendizado do node.js é curta e para quem esta acostumado com o composer melhor ainda.
Como a Veterano Roberto expressa, realmente o PHP não foi feito pra isso( mas gente sabe disso, mas insiste rs.)
Adaptar é gambiarra rs. O node se entende melhor com C++, .NET e etc pelo pouco que li. e quanto o Electron, o electron é um Chromium Minimal, funciona como um tipo de renderizador. O electron pode empacotar sua aplicação para distribuição, enfim. Não vou entrar a fundo nisso. o que eu queria mostrar é a comunicação com o SAT.
Decidi que o PHP vai ficar apenas no backend (retaguarda) pois ali ele é perfeito como api ou webservice e os PDVs irão migrar para o node.js, mas porque o node e não JAVA ou .NET ou Object Pascal? Preciso economizar com mão de obra e como estou começando (ou recomeçando), talvez em um futuro o tal PDV migre para uma linguagem DESKTOP quando puder ter programadores em cada área e sua especialização. Ou o DESKTOP deixará de exisistir, sei lá hehehe.
Ainda quero usar o PHP para gerar o XML do SAT? Não, não compensa o trabalho de carregar de um para outro PHP <=> node.js
E se eu tiver que gerar NFe no PDV? Ou eu faço isso em node.js, ou eu mando pro servidor fazer isso pra mim, enviar para o servidor, e supondo uma queda de rede local ou internet, irá gerar problemas, precisa de internet para NFe? Bom, aí tem a contigência offline e bla bla bla.
Bom, é mais ou menos por aí, e se mais uma vez eu estiver fazendo cácá, Me salve! Valeu!