Jump to content
@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.

Share this post


Link to post
Share on other sites

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

 

Mas já olhou isso?

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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?

 

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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); ?>

 

Share this post


Link to post
Share on other 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.

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By asacap1000
      Galera já não sei mais onde procurar, estou configurando o processo de login com certificação digital porém não consigo ler o retorno. No site da Certisign explica em java e .Net mas utilizo em minha aplicação da intranet tudo em PHP como eu teria que fazer. Segue exemplo que eles fornecem em .Net
       
      <form action="https://autenticador.certisign.com.br/CertisignLogin/certificado/login" method="get"> <input type="hidden" value="209" id="id" name="id"> <input type="hidden" value="CHAVE CRIPTOGRAFICA INICIAL" id="nome" name="nome"> <input type="hidden" value="http://www.seusite.com.br/suaAplicacao/retorno" id="retorno" name="retorno"> <div> <input type="image" src="images/ico-certisign_30x30.png" alt="Submit" id="btnLoginCertisign"> </div> </form> O de cima envia até aí tudo bem
       
      Abaixo o retorno que é o que não consigo fazer em PHP
       
      string retorno = Request["cb"]; string encryptionKey = "<conteúdo da chave criptográfica descarregada na etapa 2>"; retorno = CryptoLogin.Instance.DecryptText(retorno,encryptionKey);</conteúdo> A variável retorno deverá mostrar as informações como o exemplo aaixo.
       
      CertificadoBean: { emissor: Certisign Autoridade Certificadora TESTE, nome: "PROPRIETARIO DO CERTIFICADO DE TESTE", cpf: "001.002.003-44", cnpj: "", OAB: "", validade: "2015-05-27 20:59:59", emissao: "2014-05-27 21:00:00", email: "proprietario.teste@certisign.com.br", certificadoBase64: "MIIFmDCCBICgAwI...... BAQUFADCCARAx" }  
    • By Camilavip
      Queria saber como fazer esse select e quando eu trazer um estado ele já puxa as cidades contidos nele, e ao escolher a cidade ele trazer os bairros. Consegui pela internet mas só com estados e cidades. no caso em 2 níveis, e eu precisaria em 3, faço pelo mysqli
       
      Em estados no banco está assim
      CREATE TABLE `estados` ( `id_estado` int(10) NOT NULL, `estado` varchar(30) NOT NULL ) ENGINE=Aria DEFAULT CHARSET=latin1; -- -- Extraindo dados da tabela `estados` -- INSERT INTO `estados` (`id_estado`, `estado`) VALUES (1, 'Rio de Janeiro'), (2, 'Minas Gerais'); Cidades
      CREATE TABLE `cidades` ( `id_cidade` int(10) NOT NULL, `id_estado` int(10) NOT NULL, `cidade` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Extraindo dados da tabela `cidades` -- INSERT INTO `cidades` (`id_cidade`, `id_estado`, `cidade`) VALUES (1, 1, 'Rio de Janeiro'), (2, 2, 'Belo Horizonte'); E bairros
      CREATE TABLE `bairros` ( `id_bairro` int(10) NOT NULL, `id_cidade` int(10) NOT NULL, `bairro` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Extraindo dados da tabela `bairros` -- INSERT INTO `bairros` (`id_bairro`, `id_cidade`, `bairro`) VALUES (1, 1, 'Centro'), (2, 1, 'Tijuca'), (3, 1, 'Leblon'), (4, 2, 'Pampulha');  
    • By danilo759
      Estou com uma dúvida, em uma tabelinha é cadastrado a data em uma coluna e a hora em outra coluna, então para "juntar" podemos usar CONCAT() no SELECT. Tudo certo...
       
      SELECT id, CONCAT(data_ini, ' ', hora_ini) as inicio FROM tabela

      Retorna como esperado:

       

      Minha dúvida é, se eu quiser exibir o horário de término para ficar assim como seria a consulta? Lembrando que não existe as colunas data_final e horario_final.

      2020-09-13 03:00:00 2020-09-13 04:00:00
      2020-09-13 04:00:00 2020-09-13 05:00:00
      2020-09-13 05:00:00 ....
    • By Alex Oliveira Dos Santos
      Boa tarde, após pesquisar muito e passar 2 dias tentando resolver estou aqui pedindo um super help.
      Estou utilizando a classe NfePhp mas ao gerar o xml, o mesmo amontoa os nós xml "det" tudo um dentro do outro, e eu não faço ideia do porque e como corrigir, por postar o arquivo que monto e o xml gerado, além de uma imagem ilustrativa do problema:
       
       
       
      <?php /** * Created by Alex O. Santos. * Date: 30/09/2019 * Time: 10:29 */ //namespace Classes; //use NFePHP\NFe\Make; use NFePHP\NFe; use NFePHP\NFe\Make; use NFePHP\NFe\Tools; use NFePHP\Common\Certificate; //use stdClass; class GerarNFE { private $config; private $tools; public function __construct($config) { $this->config = $config; $configJson = json_encode($config);//adicionado novo 29-06-2020 $certificadoDigital = file_get_contents("asasasasa.pfx"); $password = '123456'; $this->tools = new Tools($configJson, Certificate::readPfx($certificadoDigital, $password)); //$xmlAssinado = $tools->signNFe($xml); } public function GerarNFE(){ //cria a nota vazia $nfe = new Make(); /** INF NFE **/ $std = new \stdClass(); $std->versao = '4.00'; //versão do layout //$std->Id = 'NFe35150271780456000160550010000000021800700082'; //se o Id de 44 digitos não for passado será gerado automaticamente $std->pk_nItem = null; //deixe essa variavel sempre como NULL $nfe->taginfNFe($std); /** IDE **/ $std = new \stdClass(); $std->cUF = 42;//codigo uf ibge $std->cNF = rand(11111111, 99999999);// 80070008 aleatorio $std->natOp = 'Venda de mercadoria adquirida ou recebida de terceiros';//natureza de operação $std->indPag = 0; //NÃO EXISTE MAIS NA VERSÃO 4.00 $std->mod = 55; $std->serie = 1; $std->nNF = 2;//numero da nota $std->dhEmi = date("Y-m-d\TH:i:sP");//2015-02-19T13:48:00-02:00 $std->dhSaiEnt = date("Y-m-d\TH:i:sP");//estava null $std->tpNF = 1;//entrada ou saida $std->idDest = 1;//dentro ou fora do estado *** 1=Operação interna, 2=Operação interestadual, 3=Operação com exterior $std->cMunFG = 4204608;//criciuma conforme ibge $std->tpImp = 1;//2=paisagem ou 1=retrato $std->tpEmis = 1;//normal ou contingencia $std->cDV = 3;//digito verificador $std->tpAmb = 2;//1 = Produção[É o ambiente designado para documentos com valor fiscal]. 2= Homologação[É o ambiente de testes]. $std->finNFe = 1;//complementar ou normal ou ajuste $std->indFinal = 1;//se é consumidor final ou nao $std->indPres = 1;//nao esta presente presencial ou nao $std->procEmi = 0;//sempre zero aplicativo contribuite(erp) $std->verProc = '1.0.0';//versão do erp $std->dhCont = null;//data e hora que entrou em contingencia $std->xJust = null;//justificativa se entrou em contingencia $nfe->tagide($std); /** EMITENTE **/ $std = new \stdClass(); $std->xNome = "NET BIBLIAS COMERCIO DE ARTIGOS EVANGELICOS LTDA-ME";//razão social $std->xFant = "NET BIBLIAS COMERCIO DE ARTIGOS EVANGELICOS LTDA-ME";//nome fantasia $std->IE = "258591137";//obrigatório $std->IEST = ""; $std->IM = "";//OPCIONAL $std->CNAE = "";//OPCIONAL $std->CRT = "1";//regime tributário? $std->CNPJ = "16604805000184"; //indicar apenas um CNPJ ou CPF $std->CPF = ""; $nfe->tagemit($std); /** ENDEREÇO EMITENTE **/ $std = new \stdClass(); $std->xLgr = "Rua Carlos Otaviano Seara"; $std->nro = "349"; $std->xCpl = "";//nao é mais necessário $std->xBairro = "Nossa Senhora da Salete"; $std->cMun = "4204608"; $std->xMun = "Criciúma"; $std->UF = "SC"; $std->CEP = "88813410"; $std->cPais = "1058"; $std->xPais = "Brasil"; $std->fone = "48999689698"; $nfe->tagenderEmit($std); /** DESTINATÁRIO **/ $std = new \stdClass(); $std->xNome = "Alex Olivera Santos"; $std->indIEDest = "2";//1=tem ie 2=nao tem ie @@@Luiz esta como 9 $std->IE = ""; $std->ISUF = "";//manaus $std->IM = "";//inscricao municipal obrigatorio $std->email = "alexsc2011@gmail.com"; $std->CNPJ = ""; //indicar apenas um CNPJ ou CPF ou idEstrangeiro $std->CPF = "04587351911"; $std->idEstrangeiro = null;///acho que é passaporte ou null $nfe->tagdest($std); /** ENDEREÇO DESTINATÁRIO **/ $std = new \stdClass(); $std->xLgr = "Rua Roberto Burlemax"; $std->nro = "118"; $std->xCpl = ""; $std->xBairro = "Ceará"; $std->cMun = "4204608"; $std->xMun = "Criciúma"; $std->UF = "SC"; $std->CEP = "88815092"; $std->cPais = "1058"; $std->xPais = "Brasil"; $std->fone = "62994430218"; $nfe->tagenderDest($std); //inicio foreach de produtos /** PRODUTOS **/ $std = new \stdClass(); $std->item = 1; //item da NFe //contador com count++ incrementando a cada passada, começar com 1 $std->cProd = "4634";// $std->cEAN = "SEM GTIN";//codigo de barras caixa (obrigatório?) $std->xProd = "OLEO DE UNcaO 60 ML";//interrno sistema $std->NCM = "15122990";// $std->cBenef = ""; //incluido no layout 4.00 $std->EXTIPI = ""; $std->CFOP = "6102";//codigo da saida se é saida se é entrada pra outro estado etc $std->uCom = "UND";// $std->qCom = "2.0000";//quantidade??? $std->vUnCom = "6.9900000000";//valor do produto???? $std->cEANTrib = "SEM GTIN";//codigo de barras item separado $std->uTrib = "UND";// $std->qTrib = "1.0000";//quantidade $std->vUnTrib = "13.98";// anterior $std->vUnTrib = "13.9800000000" $aa = $std->qTrib; $bb = $std->vUnTrib; $teste = $aa * $bb; $std->vProd = $teste;//"13.98";// $std->vFrete = "47.66";// $std->vSeg = ""; $std->vDesc = ""; $std->vOutro = ""; $std->indTot = 1;//integrar item ao resultado da nota (padrão) $nfe->tagprod($std); /** IMPOSTO **/ $std = new \stdClass(); $std->item = 1; //item da NFe mesmo id de cima do produto $std->vTotTrib = 4.00;//pegar do ibpt api total de imposto do produto? $nfe->tagimposto($std); /** ICMS **/ $std = new \stdClass(); $std->item = 1; //item da NFe $std->orig = 0;//0=nacional 1=importado $std->CST = "00"; //faltou igualar luiz??? CSOSN <CSOSN>103</CSOSN> $std->modBC = 0; //return $std->vProd;// TESTE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $std->vBC = $teste; $std->pICMS = "18.00";//percentual de imposto $std->vICMS = $std->vBC * $std->pICMS / 100;//valor base icns $nfe->tagICMS($std); // aqui só vai montar se for interstadual $std = new \stdClass(); $std->item = 1; //item da NFe seguir o mesmo do produto for $std->vBCUFDest = 13.98;//valor unitário precoBase ??? $std->vBCFCPUFDest = 0.00; $std->pFCPUFDest = 0.0000; $std->pICMSUFDest = 18.0000;//18 é padrao pra todos??? $std->pICMSInter = 7.00;//estava 12.00 $std->pICMSInterPart = 100.0000; $std->vFCPUFDest = 0.00; $std->vICMSUFDest = 0.00; $std->vICMSUFRemet = 0.00; $nfe->tagICMSUFDest($std); // fim aqui só monta se for interstadual $std = new \stdClass(); $std->item = 1; $std->cEnq = '999'; $std->CST = '50'; $std->vIPI = 0; $std->vBC = 0; $std->pIPI = 0; $nfe->tagIPI($std); /** PIS **/ $std = new \stdClass(); $std->item = 1; //item da NFe $std->CST = '01';// $std->vBC = $teste;// nota luiz esta 0.00 ??? $std->pPIS = "0.0000";// $std->vPIS = $std->vBC * ($std->pPIS / 100);// ou shekinah "0.00" ??? ;u padrão $std->vProd $std->qBCProd = null; $std->vAliqProd = null; $nfe->tagPIS($std); $std = new \stdClass(); $std->item = 1; $std->vCOFINS = 0; $std->vBC = 0; $std->pCOFINS = 0; $nfe->tagCOFINSST($std); /** COFINS **/ $std = new \stdClass(); $std->item = 1; //item da NFe $std->CST = '01';//estava 50 $std->vBC = 0.00;// $teste; para o caso de apenas um item, senao somar tudo, valor pago pelo cliente Luiz esta 0.00 ??? $std->pCOFINS = 0.0000; $std->vCOFINS = 0.00;//$std->vBC * ($std->pCOFINS / 100) estava assim $std->qBCProd = null; $std->vAliqProd = null; $nfe->tagCOFINS($std); /** IPI **/ // fim monta o foreach de cada produto //inicio foreach de produtos /** PRODUTOS **/ $std = new \stdClass(); $std->item = 2; //item da NFe //contador com count++ incrementando a cada passada, começar com 1 $std->cProd = "4634";// $std->cEAN = "SEM GTIN";//codigo de barras caixa (obrigatório?) $std->xProd = "OLEO DE UNcaO 60 ML";//interrno sistema $std->NCM = "15122990";// $std->cBenef = ""; //incluido no layout 4.00 $std->EXTIPI = ""; $std->CFOP = "6102";//codigo da saida se é saida se é entrada pra outro estado etc $std->uCom = "UND";// $std->qCom = "2.0000";//quantidade??? $std->vUnCom = "6.9900000000";//valor do produto???? $std->cEANTrib = "SEM GTIN";//codigo de barras item separado $std->uTrib = "UND";// $std->qTrib = "1.0000";//quantidade $std->vUnTrib = "13.98";// anterior $std->vUnTrib = "13.9800000000" $aa = $std->qTrib; $bb = $std->vUnTrib; $teste = $aa * $bb; $std->vProd = $teste;//"13.98";// $std->vFrete = "47.66";// $std->vSeg = ""; $std->vDesc = ""; $std->vOutro = ""; $std->indTot = 2;//integrar item ao resultado da nota (padrão) $nfe->tagprod($std); /** IMPOSTO **/ $std = new \stdClass(); $std->item = 2; //item da NFe mesmo id de cima do produto $std->vTotTrib = 4.00;//pegar do ibpt api total de imposto do produto? $nfe->tagimposto($std); /** ICMS **/ $std = new \stdClass(); $std->item = 2; //item da NFe $std->orig = 0;//0=nacional 1=importado $std->CST = "00"; //faltou igualar luiz??? CSOSN <CSOSN>103</CSOSN> $std->modBC = 0; //return $std->vProd;// TESTE XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX $std->vBC = $teste; $std->pICMS = "18.00";//percentual de imposto $std->vICMS = $std->vBC * $std->pICMS / 100;//valor base icns $nfe->tagICMS($std); // aqui só vai montar se for interstadual $std = new \stdClass(); $std->item = 2; //item da NFe seguir o mesmo do produto for $std->vBCUFDest = 13.98;//valor unitário precoBase ??? $std->vBCFCPUFDest = 0.00; $std->pFCPUFDest = 0.0000; $std->pICMSUFDest = 18.0000;//18 é padrao pra todos??? $std->pICMSInter = 7.00;//estava 12.00 $std->pICMSInterPart = 100.0000; $std->vFCPUFDest = 0.00; $std->vICMSUFDest = 0.00; $std->vICMSUFRemet = 0.00; $nfe->tagICMSUFDest($std); // fim aqui só monta se for interstadual $std = new \stdClass(); $std->item = 2; $std->cEnq = '999'; $std->CST = '50'; $std->vIPI = 0; $std->vBC = 0; $std->pIPI = 0; $nfe->tagIPI($std); /** PIS **/ $std = new \stdClass(); $std->item = 2; //item da NFe $std->CST = '01';// $std->vBC = $teste;// nota luiz esta 0.00 ??? $std->pPIS = "0.0000";// $std->vPIS = $std->vBC * ($std->pPIS / 100);// ou shekinah "0.00" ??? ;u padrão $std->vProd $std->qBCProd = null; $std->vAliqProd = null; $nfe->tagPIS($std); $std = new \stdClass(); $std->item = 2; $std->vCOFINS = 0; $std->vBC = 0; $std->pCOFINS = 0; $nfe->tagCOFINSST($std); /** COFINS **/ $std = new \stdClass(); $std->item = 2; //item da NFe $std->CST = '01';//estava 50 $std->vBC = 0.00;// $teste; para o caso de apenas um item, senao somar tudo, valor pago pelo cliente Luiz esta 0.00 ??? $std->pCOFINS = 0.0000; $std->vCOFINS = 0.00;//$std->vBC * ($std->pCOFINS / 100) estava assim $std->qBCProd = null; $std->vAliqProd = null; $nfe->tagCOFINS($std); // fim monta o foreach de cada produto /** TOTAIS **/ $std = new \stdClass(); $std->vBC = $teste; $std->vICMS = '0.00'; $std->vICMSDeson = ''; $std->vFCP = ''; //incluso no layout 4.00 $std->vBCST = ''; $std->vST = ''; $std->vFCPST = ''; //incluso no layout 4.00 $std->vFCPSTRet = ''; //incluso no layout 4.00 $std->vProd = $teste; $std->vFrete = ''; $std->vSeg = ''; $std->vDesc = ''; $std->vII = ''; $std->vIPI = ''; $std->vIPIDevol = ''; //incluso no layout 4.00 $std->vPIS = ''; $std->vCOFINS = ''; $std->vOutro = ''; $std->vNF = ''; $std->vTotTrib = '0.00'; $nfe->tagICMSTot($std); /** TRANSPORTADORA **/ $std = new \stdClass(); $std->modFrete = 1; $nfe->tagtransp($std); /** VOLUME **/ $std = new \stdClass(); $std->item = '1'; //indicativo do numero do volume $std->qVol = '2';//QTD VOLUME $std->esp = 'caixa'; $std->marca = 'OLX'; $std->nVol = '11111'; /*$std->pesoL = 10.50; $std->pesoB = 11.00;*/ $nfe->tagvol($std); /** PAGAMENTO **/ $std = new \stdClass(); $std->vTroco = null; //incluso no layout 4.00, obrigatório informar para NFCe (65) $nfe->tagpag($std); /** DETALHE DO PAGAMENTO **/ $std = new \stdClass(); $std->tPag = '14';//forma de pgto $std->vPag = 200.00; //Obs: deve ser informado o valor pago pelo cliente $std->CNPJ = '12345678901234'; $std->tBand = '01'; $std->cAut = '3333333'; $std->tpIntegra = 1; //incluso na NT 2015/002 $std->indPag = '0'; //0= Pagamento à Vista 1= Pagamento à Prazo $nfe->tagdetPag($std); /** INFORMAÇÕES ADICIONAIS **/ $std = new \stdClass(); $std->infAdFisco = 'informacoes para o fisco'; $std->infCpl = 'informacoes complementares'; $nfe->taginfAdic($std); /** MONTA A NF-E **/ $result = $nfe->montaNFe(); /** **/ //$result = $nfe->monta(); /** **/ //$result = $nfe->monta(); /** **/ //$xml = $nfe->getXML(); /** **/ //$chave = $nfe->getChave(); //var_dump($result); if($nfe->montaNFe()){ return $nfe->getXML();//funfando }else{ echo 'Erro ao gerar NF-e'; var_dump($nfe); return ; }/**/ } public function sign($xml){ try { $xmlAssinado = $this->tools->signNFe($xml); return $xmlAssinado; } catch (\Exception $e) { exit('erro: '.$e->getMessage().' ::: '.$xml); } //return var_dump($this->tools->signNFe($xml)); } } resultado xml gerado
      <!--?xml version="1.0" encoding="UTF-8"?--> <nfe xmlns="http://www.portalfiscal.inf.br/nfe"><infnfe id="NFe42200916604805000184550010000000021777050308" versao="4.00"><ide><cuf>42</cuf><cnf>77705030</cnf><natop>Venda de mercadoria adquirida ou recebida de terceiros</natop><mod>55</mod><serie>1</serie><nnf>2</nnf><dhemi>2020-09-10T17:51:52-03:00</dhemi><dhsaient>2020-09-10T17:51:52-03:00</dhsaient><tpnf>1</tpnf><iddest>1</iddest><cmunfg>4204608</cmunfg><tpimp>1</tpimp><tpemis>1</tpemis><cdv>8</cdv><tpamb>2</tpamb><finnfe>1</finnfe><indfinal>1</indfinal><indpres>1</indpres><procemi>0</procemi><verproc>1.0.0</verproc></ide><emit><cnpj>16604805000184</cnpj><xnome>NET BIBLIAS COMERCIO DE ARTIGOS EVANGELICOS LTDA-ME</xnome><xfant>NET BIBLIAS COMERCIO DE ARTIGOS EVANGELICOS LTDA-ME</xfant><enderemit><xlgr>Rua Carlos Otaviano Seara</xlgr><nro>349</nro><xbairro>Nossa Senhora da Salete</xbairro><cmun>4204608</cmun><xmun>Criciúma</xmun><uf>SC</uf><cep>88813410</cep><cpais>1058</cpais><xpais>Brasil</xpais><fone>48999689698</fone></enderemit><ie>258591137</ie><crt>1</crt></emit><dest><cpf>04587351911</cpf><xnome>NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL</xnome><enderdest><xlgr>Rua Roberto Burlemax</xlgr><nro>118</nro><xbairro>Ceará</xbairro><cmun>4204608</cmun><xmun>Criciúma</xmun><uf>SC</uf><cep>88815092</cep><cpais>1058</cpais><xpais>Brasil</xpais><fone>62994430218</fone></enderdest><indiedest>2</indiedest><email>alexsc2011@gmail.com</email></dest><det nitem="1"><det nitem="2"><det nitem="1"><prod><cprod>4634</cprod><cean>SEM GTIN</cean><xprod>OLEO DE UNcaO 60 ML</xprod><ncm>15122990</ncm><cfop>6102</cfop><ucom>UND</ucom><qcom>2.0000</qcom><vuncom>6.9900000000</vuncom><vprod>13.98</vprod><ceantrib>SEM GTIN</ceantrib><utrib>UND</utrib><qtrib>1.0000</qtrib><vuntrib>13.98</vuntrib><vfrete>47.66</vfrete><indtot>1</indtot></prod><imposto><vtottrib>4.00</vtottrib><icms><icms00><orig>0</orig><cst>00</cst><modbc>0</modbc><vbc>13.98</vbc><picms>18.0000</picms><vicms>2.52</vicms></icms00></icms><ipi><cenq>999</cenq><ipitrib><cst>50</cst><vbc>0.00</vbc><pipi>0.0000</pipi><vipi>0.00</vipi></ipitrib></ipi><pis><pisaliq><cst>01</cst><vbc>13.98</vbc><ppis>0.0000</ppis><vpis>0.00</vpis></pisaliq></pis><cofins><cofinsaliq><cst>01</cst><vbc>0.00</vbc><pcofins>0.0000</pcofins><vcofins>0.00</vcofins></cofinsaliq></cofins><cofinsst><vbc>0.00</vbc><pcofins>0.0000</pcofins><vcofins>0.00</vcofins></cofinsst><icmsufdest><vbcufdest>13.98</vbcufdest><vbcfcpufdest>0</vbcfcpufdest><pfcpufdest>0.0000</pfcpufdest><picmsufdest>18.0000</picmsufdest><picmsinter>7.00</picmsinter><picmsinterpart>100.0000</picmsinterpart><vfcpufdest>0</vfcpufdest><vicmsufdest>0</vicmsufdest><vicmsufremet>0</vicmsufremet></icmsufdest></imposto></det><det nitem="2"><prod><cprod>4634</cprod><cean>SEM GTIN</cean><xprod>OLEO DE UNcaO 60 ML</xprod><ncm>15122990</ncm><cfop>6102</cfop><ucom>UND</ucom><qcom>2.0000</qcom><vuncom>6.9900000000</vuncom><vprod>13.98</vprod><ceantrib>SEM GTIN</ceantrib><utrib>UND</utrib><qtrib>1.0000</qtrib><vuntrib>13.98</vuntrib><vfrete>47.66</vfrete><indtot>2</indtot></prod><imposto><vtottrib>4.00</vtottrib><icms><icms00><orig>0</orig><cst>00</cst><modbc>0</modbc><vbc>13.98</vbc><picms>18.0000</picms><vicms>2.52</vicms></icms00></icms><ipi><cenq>999</cenq><ipitrib><cst>50</cst><vbc>0.00</vbc><pipi>0.0000</pipi><vipi>0.00</vipi></ipitrib></ipi><pis><pisaliq><cst>01</cst><vbc>13.98</vbc><ppis>0.0000</ppis><vpis>0.00</vpis></pisaliq></pis><cofins><cofinsaliq><cst>01</cst><vbc>0.00</vbc><pcofins>0.0000</pcofins><vcofins>0.00</vcofins></cofinsaliq></cofins><cofinsst><vbc>0.00</vbc><pcofins>0.0000</pcofins><vcofins>0.00</vcofins></cofinsst><icmsufdest><vbcufdest>13.98</vbcufdest><vbcfcpufdest>0</vbcfcpufdest><pfcpufdest>0.0000</pfcpufdest><picmsufdest>18.0000</picmsufdest><picmsinter>7.00</picmsinter><picmsinterpart>100.0000</picmsinterpart><vfcpufdest>0</vfcpufdest><vicmsufdest>0</vicmsufdest><vicmsufremet>0</vicmsufremet></icmsufdest></imposto></det><total><icmstot><vbc>13.98</vbc><vicms>0.00</vicms><vicmsdeson>0.00</vicmsdeson><vfcp>0.00</vfcp><vbcst>0.00</vbcst><vst>0.00</vst><vfcpst>0.00</vfcpst><vfcpstret>0.00</vfcpstret><vprod>13.98</vprod><vfrete>95.32</vfrete><vseg>0.00</vseg><vdesc>0.00</vdesc><vii>0.00</vii><vipi>0.00</vipi><vipidevol>0.00</vipidevol><vpis>0.00</vpis><vcofins>0.00</vcofins><voutro>0.00</voutro><vnf>109.30</vnf></icmstot></total><transp><modfrete>1</modfrete><vol><qvol>2</qvol><esp>caixa</esp><marca>OLX</marca><nvol>11111</nvol></vol></transp><pag><detpag><indpag>0</indpag><tpag>14</tpag><vpag>200.00</vpag><card><tpintegra>1</tpintegra><cnpj>12345678901234</cnpj><tband>01</tband><caut>3333333</caut></card></detpag></pag><infadic><infadfisco>informacoes para o fisco</infadfisco><infcpl>informacoes complementares</infcpl></infadic></det></det></infnfe></nfe>  

    • By iguulima
      Ola a todos,
      Estou com uma dúvida e ja tentei de tudo que estão dentro das minhas limitações de conhecimento. Tenho um laço de repetição While sendo executado e quero que uma Variavel seja executada apenas uma vez dentro desse laço. Existe essa possibilidade. Obrigado a todos. Segue o código:

       
      <?php $consult = $row['id']; $sql = "SELECT * FROM upload_data WHERE USER_CODE = '$consult' ORDER BY id ASC"; $resultadoimg = mysql_query($sql); $numero_registros = mysql_num_rows($resultadoimg); while($registrosimg = mysql_fetch_array($resultadoimg)) { ?> <li data-target="#carousel-custom" data-slide-to="0" <?php ele precisa ser executado uma unica vez aqui?>><img src="" alt=""></li> <?php } ?>  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.