Erro ao gerar xml com NFePHP - Duplicando node det
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>

Discussão (0)
Carregando comentários...