Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

@gilsones

PHP + Java (NF-e)

Recommended Posts

Pessoal, preciso criar um sistema web (intranet) que faça todo o serviço de NFe, porém já estou ciente que com PHP sozinho é impossível.

 

Queria saber se é possível criar um modulo/componente(?) em JAVA que ficará no servidor junto com o sistema, e fazer com que o PHP se comunique com ele para então, gerar o XML assinado.

 

É possível essa comunicação? Caso não, alguém teria m alguma outra solução?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu realmente não manjo do mundo fiscal (nem tenho vontade na realidade)

 

Mas já olhou isso?

https://github.com/nfephp-org/nfephp

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, @gilsones disse:

...porém já estou ciente que com PHP sozinho é impossível.

:smirk:

Ai tu desvaloriza o poder do PHP e comunidade,  e deixa em evidencia a falta de conhecimento sobre!

Gabriel já postou o pack mais popular no github, mas é só da uma olhada na Wiki

 

https://github.com/nfephp-org/nfephp/wiki
https://github.com/nfephp-org/nfephp/wiki/Assinando-um-XML-de-NFe

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 04/04/2017 at 21:15, Williams Duarte disse:

:smirk:

Ai tu desvaloriza o poder do PHP e comunidade,  e deixa em evidencia a falta de conhecimento sobre!

Gabriel já postou o pack mais popular no github, mas é só da uma olhada na Wiki

 

https://github.com/nfephp-org/nfephp/wiki
https://github.com/nfephp-org/nfephp/wiki/Assinando-um-XML-de-NFe

 

Eu conheço as limitações do PHP, e também conheco o NfePHP. Ele só funciona com certificado A1. Com PHP é impossivel assinar um XML usando certificado A3.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

42 minutos atrás, @gilsones disse:

e também conheco o NfePHP

Qual o motivo de utilizar php nesse caso?

Integração com alguma loja online?

 

Nesse caso não seria melhor fazer direto em Java então e apenas consumir um WebService/API feito php para a comunicação do E-commerce?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
37 minutos atrás, @gilsones disse:

 

Eu conheço as limitações do PHP, e também conheco o NfePHP. Ele só funciona com certificado A1. Com PHP é impossivel assinar um XML usando certificado A3.

Em qual momento você falou que é um A3?

Não e mais fácil usar a linguagem correta?

Porque até outras linguagens é limitada em relação a web, assim como o php é com baixo nivel, o problema é que querem que o php, linguagem interpretada, seja ao mesmo tempo copilada!

Outro detalhe é que até navegador mais popular não da mais suporte.

https://www.java.com/pt_BR/download/faq/chrome.xml

Se conseguir algo, o primeiro passo é com javascript apontando para o PHP.

Node.js por exemplo.

https://github.com/LacunaSoftware/RestPkiSamples/tree/master/NodeJS

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

19 horas atrás, Williams Duarte disse:

Em qual momento você falou que é um A3?

 

Também não disse que era somente pra A1. Se não falei o tipo de certificado, obviamente é geral desse contexto.

 

20 horas atrás, gabrieldarezzo disse:

Qual o motivo de utilizar php nesse caso?

 

13 horas atrás, Osmar L Lima disse:

Navegadores populares logo não darão mais suporte para Java, alguns serviços como o eSAJ já estão mudando para outra solução. Mas dê uma olhada neste link: https://github.com/nfephp-org/nfephp/wiki/Certificado-Modelo-A3

 

Tenho um ERP em PHP. Minha ideia era deixar o certificado no servidor, criar um arquivo em Java que faça toda a mágica, e acessar esse arquivo via exec() do PHP.

Será que funciona ou tô falando besteira? rsrs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, certificado A3 é físico, é impossível realizar a emissão de uma nota com certificado A3 online. Para tal, é necessário um software instalado na máquina do cliente... Emissão de notas fiscais online (protocolo http) só são possíveis com certificado A1, digo por experiência própria, já desenvolvi 2 sistemas de emissão de nota e tentei toda gambiarra possível para emitir pelo A3 online e cheguei a conclusão de que: não dá e se desse, não valeria o serviço.

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 horas atrás, Mateus Silva disse:

Amigo, certificado A3 é físico, é impossível realizar a emissão de uma nota com certificado A3 online. Para tal, é necessário um software instalado na máquina do cliente... Emissão de notas fiscais online (protocolo http) só são possíveis com certificado A1, digo por experiência própria, já desenvolvi 2 sistemas de emissão de nota e tentei toda gambiarra possível para emitir pelo A3 online e cheguei a conclusão de que: não dá e se desse, não valeria o serviço.

 

Então cara, mas como disse nas mensagens anteriores, quem faria toda a mágica seria o Java que estará no servidor, juntamente com a chave. O PHP só acionaria o arquivo Java via exec();
Tipo:
 

<?php exec("java -jar arquivo.jar argumentos", $saida); ?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realmente existe uma dificuldade em implementar sistemas em PHP para emissão de NFe que aceitem certificados A3. Na verdade, essa dificuldade existe para sistemas web em geral, não apenas em PHP, pois a dificuldade não vem de limitações da linguagem mas sim do fato de que em um certificado A3 a chave privada encontra-se no dispositivo criptográfico do usuário e, por projeto, nunca sai de lá. Sendo assim, é imprescindível a utilização de código no frontend, sendo que esse código pode já fazer tudo (aplicação desktop) ou só uma parte (código JavaScript cooperando com backend em PHP, por exemplo). Esse assunto é detalhado neste artigo.

 

Isso não quer dizer que seja impossível implementar um sistema em PHP para emissão de NFe. Aliás, justamente por ser difícil, essa característica torna-se um grande diferencial, pois a maioria dos sistemas do mercado só aceita A1, sendo que muitos usuários preferem tirar A3 porque só precisa renovar a cada 3 anos.

 

No passado, essa parte no frontend era feita com Java Applets. Entretanto, os navegadores passaram a não aceitar mais esse tipo de complemento, sendo que atualmente essa tecnologia não funciona mais nem em Chrome nem em Firefox.

 

Uma boa alternativa para fazer a parte do frontend é o Web PKI, que é uma extensão nativa para navegadores que possibilita o acesso aos certificados da máquina do usuário a partir do JavaScript da página. Esta demonstração mostra o uso da extensão em cooperação com código no backend para assinar uma NFe fictícia.

 

Quanto à parte do backend, você pode tentar fazer em PHP puro usando OpenSSL ou utilizar uma solução que te auxilie nisso. Recomendo testar o Rest PKI, que faz a parte do backend e usa o Web PKI no frontend. Existe um projeto no GitHub pronto para ser executado que mostra essa combinação:

 

https://github.com/LacunaSoftware/RestPkiSamples/tree/master/PHP

 

O Rest PKI é cobrado por transação, mas o fabricante (Lacuna Software) faz contratos especiais para viabilizar o uso para emissão de NFe. Inclusive, o uso é gratuito até 50 notas por mês.

 

Outra solução para backend PHP que coopera com o Web PKI no frontend é o SetaPDF-Signer.

 

Disclamer: Sou desenvolvedor na Lacuna Software.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.