/** * zMontaMessagem * * @param string $pathFile */ protected function zMontaMessagem($pathFile) { $dom = new Dom(); $dom->loadXMLFile($pathFile); $infNFe = $dom->getNode('infNFe', 0); $ide = $infNFe->getElementsByTagName('ide')->item(0); $dest = $infNFe->getElementsByTagName('dest')->item(0); $emit = $infNFe->getElementsByTagName('emit')->item(0); $icmsTot = $infNFe->getElementsByTagName('ICMSTot')->item(0); $razao = $emit->getElementsByTagName('xNome')->item(0)->nodeValue; $nNF = $ide->getElementsByTagName('nNF')->item(0)->nodeValue; $serie = $ide->getElementsByTagName('serie')->item(0)->nodeValue; $xNome = $dest->getElementsByTagName('xNome')->item(0)->nodeValue; $dhEmi = !empty($ide->getElementsByTagName('dhEmi')->item(0)->nodeValue) ? $ide->getElementsByTagName('dhEmi')->item(0)->nodeValue : $ide->getElementsByTagName('dEmi')->item(0)->nodeValue; $data = date('d/m/Y', DateTime::convertSefazTimeToTimestamp($dhEmi)); $vNF = $icmsTot->getElementsByTagName('vNF')->item(0)->nodeValue; $this->aMail[] = !empty($dest->getElementsByTagName('email')->item(0)->nodeValue) ? $dest->getElementsByTagName('email')->item(0)->nodeValue : ''; //pega os emails que existirem em obsCont $infAdic = $infNFe->getElementsByTagName('infAdic')->item(0); if (!empty($infAdic)) { $obsConts = $infAdic->getElementsByTagName('obsCont'); foreach ($obsConts as $obsCont) { if (strtoupper($obsCont->getAttribute('xCampo')) === 'EMAIL') { $this->aMail[] = $obsCont->getElementsByTagName('xTexto')->item(0)->nodeValue; } } } $this->msgHtml = $this->zRenderTemplate($xNome, $data, $nNF, $serie, $vNF, $razao); $this->msgTxt = utf8_encode(Html2Text::convert(utf8_decode($this->msgHtml))); return "NFe n. {$nNF} - {$razao}"; }
/** * readReturnSefaz * Trata o retorno da SEFAZ devolvendo o resultado em um array * @param string $method * @param string $xmlResp * @param mixed $parametro * @return array */ public static function readReturnSefaz($method, $xmlResp) { $dom = new Dom('1.0', 'utf-8'); $dom->loadXMLString($xmlResp); //para cada $method tem um formato de retorno especifico switch ($method) { case 'MDFeRecepcao': return self::zReadRecepcaoLote($dom); break; case 'MDFeRetRecepcao': return self::zReadRetRecepcao($dom); break; case 'MDFeConsultaSituacao': return self::zReadConsultaMDF($dom); break; case 'MDFeStatusServico': return self::zReadStatusServico($dom); break; case 'MDFeRecepcaoEvento': return self::zReadRecepcaoEvento($dom); break; case 'MDFeConsNaoEnc': return self::zReadConsNaoEnc($dom); break; } return array(); }
/** * checkForFault * Verifica se a mensagem de retorno é uma FAULT * Normalmente essas falhas ocorrem devido a falhas internas * nos servidores da SEFAZ * @param NFePHP\Common\Dom\Dom $dom * @return string */ protected static function checkForFault($dom) { $fault = $dom->getElementsByTagName('Fault')->item(0); $reason = ''; if (isset($fault)) { $reason = $fault->getElementsByTagName('Text')->item(0)->nodeValue; } return $reason; }
/** * readReturnSefaz * Trata o retorno da SEFAZ devolvendo o resultado em um array * * @param string $method * @param string $xmlResp * @return array */ public static function readReturnSefaz($method, $xmlResp) { $dom = new Dom('1.0', 'utf-8'); $dom->loadXMLString($xmlResp); if ($reason = self::checkForFault($dom) != '') { return array('Fault' => $reason); } //para cada $method tem um formato de retorno especifico switch ($method) { case 'NfeAutorizacao': return self::zReadAutorizacaoLote($dom); break; case 'NfeRetAutorizacao': return self::zReadRetAutorizacaoLote($dom); break; case 'NfeConsultaCadastro': return self::zReadConsultaCadastro2($dom); break; case 'NfeConsultaProtocolo': return self::zReadConsultaNF2($dom); break; case 'NfeInutilizacao': return self::zReadInutilizacaoNF2($dom); break; case 'NfeStatusServico': //NOTA: irá ser desativado return self::zReadStatusServico($dom); break; case 'RecepcaoEPEC': case 'RecepcaoEvento': return self::zReadRecepcaoEvento($dom); break; case 'NfeDistribuicaoDFe': return self::zReadDistDFeInteresse($dom); break; case 'NfeDownloadNF': return self::zReadDownloadNF($dom); break; case 'CscNFCe': return self::zReadCscNFCe($dom); break; } return array(); }
/** * zMontaMessagem * @param string $pathFile */ protected function zMontaMessagem($pathFile) { $dom = new Dom(); $dom->loadXMLFile($pathFile); $infMDFe = $dom->getNode('infMDFe', 0); $ide = $infMDFe->getElementsByTagName('ide')->item(0); $emit = $infMDFe->getElementsByTagName('emit')->item(0); $tot = $infMDFe->getElementsByTagName('tot')->item(0); $razao = $emit->getElementsByTagName('xNome')->item(0)->nodeValue; $nMDF = $ide->getElementsByTagName('nMDF')->item(0)->nodeValue; $serie = $ide->getElementsByTagName('serie')->item(0)->nodeValue; $dhEmi = !empty($ide->getElementsByTagName('dhEmi')->item(0)->nodeValue) ? $ide->getElementsByTagName('dhEmi')->item(0)->nodeValue : $ide->getElementsByTagName('dEmi')->item(0)->nodeValue; $data = date('d/m/Y', DateTime::convertSefazTimeToTimestamp($dhEmi)); $vCarga = $tot->getElementsByTagName('vCarga')->item(0)->nodeValue; $xNome = ''; $this->msgHtml = $this->zRenderTemplate($xNome, $data, $nMDF, $serie, $vCarga, $razao); $this->msgTxt = utf8_encode(Html2Text::convert(utf8_decode($this->msgHtml))); return "MDFe n. {$nMDF} - {$razao}"; }
/** * identificacao * Identifica o documento * @param type $xml * @return string */ public static function identificacao($xml = '', &$aResp = array()) { if ($xml == '') { return ''; } elseif (is_file($xml)) { $xml = FilesFolders::readFile($xml); } $dom = new Dom('1.0', 'utf-8'); $dom->loadXMLString($xml); $key = ''; $schId = (string) self::zSearchNode($dom, $key); if ($schId == '') { return ''; } $chave = ''; $tpAmb = ''; $dhEmi = ''; if ($schId == 'nfe' || $schId == 'cte' || $schId == 'mdfe') { switch ($schId) { case 'nfe': $tag = 'infNFe'; break; case 'cte': $tag = 'infCte'; break; case 'mdfe': $tag = 'infMDFe'; break; } $chave = $dom->getChave($tag); $tpAmb = $dom->getNodeValue('tpAmb'); $dhEmi = $dom->getNodeValue('dhEmi'); } $aResp['Id'] = $schId; $aResp['tag'] = $key; $aResp['dom'] = $dom; $aResp['chave'] = $chave; $aResp['tpAmb'] = $tpAmb; $aResp['dhEmi'] = $dhEmi; return $schId; }
public function rodoTag($RNTRC = '', $dPrev = '', $lota = '', $CIOT = '') { $identificador = '#1 <rodo> - '; $this->rodo = $this->dom->createElement('rodo'); $this->dom->addChild($this->rodo, 'RNTRC', $RNTRC, true, $identificador . 'Registro nacional de transportadores rodoviários de carga'); $this->dom->addChild($this->rodo, 'dPrev', $dPrev, true, $identificador . 'Data prevista para entrega da carga no recebedor'); $this->dom->addChild($this->rodo, 'lota', $lota, true, $identificador . 'Indicador de lotação'); $this->dom->addChild($this->rodo, 'CIOT', $CIOT, false, $identificador . 'Codigo identificador da operacao de ' . 'transporte'); return $this->rodo; }
/** * zMontaMessagem * * @param string $pathFile */ protected function zMontaMessagem($pathFile) { $dom = new Dom(); $dom->loadXMLFile($pathFile); $infCTe = $dom->getNode('infCte', 0); $ide = $infCTe->getElementsByTagName('ide')->item(0); $dest = $infCTe->getElementsByTagName('dest')->item(0); $emit = $infCTe->getElementsByTagName('emit')->item(0); $vPrest = $infCTe->getElementsByTagName('vPrest')->item(0); $razao = $emit->getElementsByTagName('xNome')->item(0)->nodeValue; $nCT = $ide->getElementsByTagName('nCT')->item(0)->nodeValue; $serie = $ide->getElementsByTagName('serie')->item(0)->nodeValue; $xNome = $dest->getElementsByTagName('xNome')->item(0)->nodeValue; $dhEmi = !empty($ide->getElementsByTagName('dhEmi')->item(0)->nodeValue) ? $ide->getElementsByTagName('dhEmi')->item(0)->nodeValue : $ide->getElementsByTagName('dEmi')->item(0)->nodeValue; $data = date('d/m/Y', DateTime::convertSefazTimeToTimestamp($dhEmi)); $vCT = $vPrest->getElementsByTagName('vTPrest')->item(0)->nodeValue; $this->aMail[] = !empty($dest->getElementsByTagName('email')->item(0)->nodeValue) ? $dest->getElementsByTagName('email')->item(0)->nodeValue : ''; $this->msgHtml = $this->zRenderTemplate($xNome, $data, $nCT, $serie, $vCT, $razao); $cHTT = new Html2Text($this->msgHtml); $this->msgTxt = $cHTT->getText(); return "CTe n. {$nCT} - {$razao}"; }
/** * assinaDoc * @param string $xml * @param string $tipo nfe, cte, ou mdfe * @param string $tag Nome da tag a ser assinada * @param boolean $saveFile APENAS para salvar NFe, CTe ou MDFe * @return string * @throws Exception\InvalidArgumentException * @throws Exception\RuntimeException */ public function assinaDoc($xml = '', $tipo = '', $tag = '', $saveFile = false) { if ($tag == '') { $msg = 'Deve ser indicada uma tag a ser assinada'; throw new Exception\InvalidArgumentException($msg); } if (is_file($xml)) { $xml = Files\FilesFolders::readFile($xml); } $sxml = $this->oCertificate->signXML($xml, $tag); $dom = new Dom(); $dom->loadXMLString($sxml); //$versao = $dom->getElementsByTagName($tag)->item(0)->getAttribute('versao'); //if (! $this->zValidMessage($sxml, $tipo, $versao)) { //$msg = "Falha na validação do $tipo. ".$this->error; // throw new Exception\RuntimeException($msg); //} if ($saveFile && $tipo != '') { $dom = new Dom(); $dom->loadXMLString($sxml); $tpAmb = $dom->getElementsByTagName('tpAmb')->item(0)->nodeValue; $anomes = date('Ym', DateTime::convertSefazTimeToTimestamp($dom->getElementsByTagName('dhEmi')->item(0)->nodeValue)); $chave = $dom->getChave($tag); $filename = "{$chave}-{$tipo}.xml"; $this->zGravaFile($tipo, $tpAmb, $filename, $sxml, 'assinadas', $anomes); } return $sxml; }
/** * verifySignature * Verifica a validade da assinatura digital contida no xml * @param string $docxml conteudo do xml a ser verificado ou o path completo * @param string $tagid tag que foi assinada no documento xml * @return boolean * @throws Exception\InvalidArgumentException * @throws Exception\RuntimeException */ public function verifySignature($docxml = '', $tagid = '') { if ($docxml == '') { $msg = "Não foi passado um xml para a verificação."; throw new Exception\InvalidArgumentException($msg); } if ($tagid == '') { $msg = "Não foi indicada a TAG a ser verificada."; throw new Exception\InvalidArgumentException($msg); } $xml = $docxml; if (is_file($docxml)) { $xml = file_get_contents($docxml); } $dom = new Dom(); $dom->loadXMLString($xml); $flag = $this->zDigCheck($dom, $tagid); $flag = $this->zSignCheck($dom); return $flag; }
/** * verificaValidade * @param string $pathXmlFile * @param array $aRetorno * @return boolean * @throws Exception\InvalidArgumentException */ public function verificaValidade($pathXmlFile = '', &$aRetorno = array()) { $aRetorno = array(); if (!file_exists($pathXmlFile)) { $msg = "Arquivo não localizado!!"; throw new Exception\InvalidArgumentException($msg); } //carrega a NFe $xml = Files\FilesFolders::readFile($pathXmlFile); $this->oCertificate->verifySignature($xml, 'infMDFe'); //obtem o chave da NFe $docnfe = new Dom(); $docnfe->loadXMLFile($pathXmlFile); $tpAmb = $docnfe->getNodeValue('tpAmb'); $chMDFe = $docnfe->getChave('infMDFe'); $this->sefazConsultaChave($chMDFe, $tpAmb, $aRetorno); if ($aRetorno['cStat'] != '100') { return false; } return true; }
/** * addCancelamento * Adiciona a tga de cancelamento a uma CTe já autorizada * NOTA: não é requisito da SEFAZ, mas auxilia na identificação das CTe que foram canceladas * @param string $pathCTefile * @param string $pathCancfile * @param bool $saveFile * @return string * @throws Exception\RuntimeException */ public function addCancelamento($pathCTefile = '', $pathCancfile = '', $saveFile = false) { $procXML = ''; //carrega a CTe $docCTe = new Dom(); if (file_exists($pathCTefile)) { //carrega o XML pelo caminho do arquivo informado $docCTe->loadXMLFile($pathCTefile); } else { //carrega o XML pelo conteúdo $docCTe->loadXMLString($pathCTefile); } $nodeCTe = $docCTe->getNode('CTe', 0); if ($nodeCTe == '') { $msg = "O arquivo indicado como CTe não é um xml de CTe!"; throw new Exception\RuntimeException($msg); } $proCTe = $docCTe->getNode('protCTe'); if ($proCTe == '') { $msg = "A CTe não está protocolada ainda!!"; throw new Exception\RuntimeException($msg); } $chaveCTe = $proCTe->getElementsByTagName('chCTe')->item(0)->nodeValue; //$nProtCTe = $proCTe->getElementsByTagName('nProt')->item(0)->nodeValue; $tpAmb = $docCTe->getNodeValue('tpAmb'); $anomes = date('Ym', DateTime::convertSefazTimeToTimestamp($docCTe->getNodeValue('dhEmi'))); //carrega o cancelamento //pode ser um evento ou resultado de uma consulta com multiplos eventos $doccanc = new Dom(); if (file_exists($pathCancfile)) { //carrega o XML pelo caminho do arquivo informado $doccanc->loadXMLFile($pathCancfile); } else { //carrega o XML pelo conteúdo $doccanc->loadXMLString($pathCancfile); } $retEvento = $doccanc->getElementsByTagName('retEventoCTe')->item(0); $eventos = $retEvento->getElementsByTagName('infEvento'); foreach ($eventos as $evento) { //evento $cStat = $evento->getElementsByTagName('cStat')->item(0)->nodeValue; $tpAmb = $evento->getElementsByTagName('tpAmb')->item(0)->nodeValue; $chaveEvento = $evento->getElementsByTagName('chCTe')->item(0)->nodeValue; $tpEvento = $evento->getElementsByTagName('tpEvento')->item(0)->nodeValue; //$nProtEvento = $evento->getElementsByTagName('nProt')->item(0)->nodeValue; //verifica se conferem os dados //cStat = 135 ==> evento homologado //cStat = 136 ==> vinculação do evento à respectiva NF-e prejudicada //cStat = 155 ==> Cancelamento homologado fora de prazo //tpEvento = 110111 ==> Cancelamento //chave do evento == chave da CTe //protocolo do evneto == protocolo da CTe if (($cStat == '135' || $cStat == '136' || $cStat == '155') && $tpEvento == '110111' && $chaveEvento == $chaveCTe) { $proCTe->getElementsByTagName('cStat')->item(0)->nodeValue = '101'; $proCTe->getElementsByTagName('xMotivo')->item(0)->nodeValue = 'Cancelamento de CT-e homologado'; $procXML = $docCTe->saveXML(); //remove as informações indesejadas $procXML = Strings::clearProt($procXML); if ($saveFile) { $filename = "{$chaveCTe}-protCTe.xml"; $this->zGravaFile('cte', $tpAmb, $filename, $procXML, 'canceladas', $anomes); } break; } } return (string) $procXML; }
/** * zTestaChaveXML * Remonta a chave da NFe de 44 digitos com base em seus dados * Isso é útil no caso da chave informada estar errada * se a chave estiver errada a mesma é substituida * * @param Dom $dom */ private function zTestaChaveXML($dom) { $infNFe = $dom->getElementsByTagName("infNFe")->item(0); $ide = $dom->getElementsByTagName("ide")->item(0); $emit = $dom->getElementsByTagName("emit")->item(0); $cUF = $ide->getElementsByTagName('cUF')->item(0)->nodeValue; $dhEmi = $ide->getElementsByTagName('dhEmi')->item(0)->nodeValue; $cnpj = $emit->getElementsByTagName('CNPJ')->item(0)->nodeValue; $mod = $ide->getElementsByTagName('mod')->item(0)->nodeValue; $serie = $ide->getElementsByTagName('serie')->item(0)->nodeValue; $nNF = $ide->getElementsByTagName('nNF')->item(0)->nodeValue; $tpEmis = $ide->getElementsByTagName('tpEmis')->item(0)->nodeValue; $cNF = $ide->getElementsByTagName('cNF')->item(0)->nodeValue; $chave = str_replace('NFe', '', $infNFe->getAttribute("Id")); $tempData = explode("-", $dhEmi); $chaveMontada = $this->montaChave($cUF, $tempData[0] - 2000, $tempData[1], $cnpj, $mod, $serie, $nNF, $tpEmis, $cNF); //caso a chave contida na NFe esteja errada //substituir a chave if ($chaveMontada != $chave) { $ide->getElementsByTagName('cDV')->item(0)->nodeValue = substr($chaveMontada, -1); $infNFe = $dom->getElementsByTagName("infNFe")->item(0); $infNFe->setAttribute("Id", "NFe" . $chaveMontada); $this->chNFe = $chaveMontada; } }
/** * zTrataProcEvent * @param array $resp */ private static function zTrataProcEvent($resp = array()) { $aResp = array(); $content = $resp['doc']; $dom = new Dom(); $dom->loadXMLString($content); $xmldata = $dom->saveXML(); $xmldata = str_replace('<?xml version="1.0"?>', '<?xml version="1.0" encoding="utf-8"?>', $xmldata); $data = $dom->getNodeValue('dhEvento'); $tsdhevento = DateTime::convertSefazTimeToTimestamp($data); $anomes = date('Ym', $tsdhevento); $tpEvento = $dom->getNodeValue('tpEvento'); $chave = $dom->getNodeValue('chNFe'); if ($tpEvento == '110111') { //confirmado cancelamento, localizar o xml da NFe recebida //na pasta anomes $path = $this->pathNFe . DIRECTORY_SEPARATOR . $this->ambiente . DIRECTORY_SEPARATOR . "recebidas" . DIRECTORY_SEPARATOR . $anomes; $pathFile = $path . DIRECTORY_SEPARATOR . $chave . '-nfe.xml'; self::zCancela($pathFile); $aResp[] = array('tipo' => '-cancNFe.xml', 'chave' => $chave, 'anomes' => $anomes, 'xml' => $xmldata); } elseif ($tpEvento == '110110') { //evento Carta de Correção $aResp[] = array('tipo' => '-cce.xml', 'chave' => $chave, 'anomes' => $anomes, 'xml' => $xmldata); } return $aResp; }
/** * anfavea * Função para transformar o campo cdata do padrão ANFAVEA para * texto imprimível * * @param string $cdata campo CDATA * @return string conteúdo do campo CDATA como string */ private function pAnfavea($cdata = '') { if ($cdata == '') { return ''; } //remove qualquer texto antes ou depois da tag CDATA $cdata = str_replace('<![CDATA[', '<CDATA>', $cdata); $cdata = str_replace(']]>', '</CDATA>', $cdata); $cdata = preg_replace('/\\s\\s+/', ' ', $cdata); $cdata = str_replace("> <", "><", $cdata); $len = strlen($cdata); $startPos = strpos($cdata, '<'); if ($startPos === false) { return $cdata; } for ($x = $len; $x > 0; $x--) { if (substr($cdata, $x, 1) == '>') { $endPos = $x; break; } } if ($startPos > 0) { $parte1 = substr($cdata, 0, $startPos); } else { $parte1 = ''; } $parte2 = substr($cdata, $startPos, $endPos - $startPos + 1); if ($endPos < $len) { $parte3 = substr($cdata, $endPos + 1, $len - $endPos - 1); } else { $parte3 = ''; } $texto = trim($parte1) . ' ' . trim($parte3); if (strpos($parte2, '<CDATA>') === false) { $cdata = '<CDATA>' . $parte2 . '</CDATA>'; } else { $cdata = $parte2; } //carrega o xml CDATA em um objeto DOM $dom = new Dom(); $dom->loadXML($cdata, LIBXML_NOBLANKS | LIBXML_NOEMPTYTAG); //$xml = $dom->saveXML(); //grupo CDATA infADprod $id = $dom->getElementsByTagName('id')->item(0); $div = $dom->getElementsByTagName('div')->item(0); $entg = $dom->getElementsByTagName('entg')->item(0); $dest = $dom->getElementsByTagName('dest')->item(0); $ctl = $dom->getElementsByTagName('ctl')->item(0); $ref = $dom->getElementsByTagName('ref')->item(0); if (isset($id)) { if ($id->hasAttributes()) { foreach ($id->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $texto .= " {$name} : {$value}"; } } } if (isset($div)) { if ($div->hasAttributes()) { foreach ($div->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $texto .= " {$name} : {$value}"; } } } if (isset($entg)) { if ($entg->hasAttributes()) { foreach ($entg->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $texto .= " {$name} : {$value}"; } } } if (isset($dest)) { if ($dest->hasAttributes()) { foreach ($dest->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $texto .= " {$name} : {$value}"; } } } if (isset($ctl)) { if ($ctl->hasAttributes()) { foreach ($ctl->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $texto .= " {$name} : {$value}"; } } } if (isset($ref)) { if ($ref->hasAttributes()) { foreach ($ref->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $texto .= " {$name} : {$value}"; } } } //grupo CADATA infCpl $t = $dom->getElementsByTagName('transmissor')->item(0); $r = $dom->getElementsByTagName('receptor')->item(0); $versao = !empty($dom->getElementsByTagName('versao')->item(0)->nodeValue) ? 'Versao:' . $dom->getElementsByTagName('versao')->item(0)->nodeValue . ' ' : ''; $especieNF = !empty($dom->getElementsByTagName('especieNF')->item(0)->nodeValue) ? 'Especie:' . $dom->getElementsByTagName('especieNF')->item(0)->nodeValue . ' ' : ''; $fabEntrega = !empty($dom->getElementsByTagName('fabEntrega')->item(0)->nodeValue) ? 'Entrega:' . $dom->getElementsByTagName('fabEntrega')->item(0)->nodeValue . ' ' : ''; $dca = !empty($dom->getElementsByTagName('dca')->item(0)->nodeValue) ? 'dca:' . $dom->getElementsByTagName('dca')->item(0)->nodeValue . ' ' : ''; $texto .= "" . $versao . $especieNF . $fabEntrega . $dca; if (isset($t)) { if ($t->hasAttributes()) { $texto .= " Transmissor "; foreach ($t->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $texto .= " {$name} : {$value}"; } } } if (isset($r)) { if ($r->hasAttributes()) { $texto .= " Receptor "; foreach ($r->attributes as $attr) { $name = $attr->nodeName; $value = $attr->nodeValue; $texto .= " {$name} : {$value}"; } } } return $texto; }
public static function extrai($aList, $cnpj = '') { $aResp = array(); $totFat = 0; $totPeso = 0; $totIcms = 0; foreach ($aList as $file) { $dom = null; $ide = null; $emit = null; $dest = null; try { $dom = new Dom(); $dom->loadXMLFile($file); $ide = $dom->getNode('ide'); $emit = $dom->getNode('emit'); $dest = $dom->getNode('dest'); $icmsTot = $dom->getNode('ICMSTot'); $vol = $dom->getNode('vol'); $cStat = $dom->getNodeValue('cStat'); if ($cStat != '100') { self::$nCanc++; } $dhEmi = $dom->getValue($ide, 'dhEmi'); if (empty($dhEmi)) { $dhEmi = $dom->getValue($ide, 'dEmi'); } //echo $file.'___'.$dhEmi.'<br>'; $tsEmi = DateTime::convertSefazTimeToTimestamp($dhEmi); $data = ''; if (is_numeric($tsEmi)) { $data = date('d/m/Y', $tsEmi); } $emitCNPJ = $dom->getValue($emit, 'CNPJ'); $emitRazao = $dom->getValue($emit, 'xNome'); $destRazao = $dom->getValue($dest, 'xNome'); $vNF = $dom->getValue($icmsTot, 'vNF'); $vNFtext = $vNF; if (is_numeric($vNF)) { $vNFtext = 'R$ ' . number_format($vNF, '2', ',', '.'); } $serie = $dom->getNodeValue('serie'); $nProt = $dom->getNodeValue('nProt'); $nome = $emitRazao; if ($emitCNPJ == $cnpj) { $nome = $destRazao; } $email = $dom->getValue($dest, 'email'); $aObscont = $dom->getElementsByTagName('obsCont'); if (count($aObscont) > 0) { foreach ($aObscont as $obsCont) { $xCampo = $obsCont->getAttribute('xCampo'); if ($xCampo == 'email') { $email .= ";" . $dom->getValue($obsCont, 'xTexto'); } } } if (substr($email, 0, 1) == ';') { $email = substr($email, 1, strlen($email) - 1); } $vICMS = $dom->getValue($icmsTot, 'vICMS'); $totIcms += $vICMS; $valorFat = 0; if ($vICMS != 0 && $cStat == '100') { $valorFat = $vNF; } $totFat += $valorFat; $pesoL = $dom->getValue($vol, 'pesoL'); if ($pesoL != '') { $totPeso += $pesoL; } $aResp[] = array('nNF' => $dom->getValue($ide, 'nNF'), 'serie' => $serie, 'data' => $data, 'nome' => $nome, 'natureza' => $dom->getValue($ide, 'natOp'), 'cStat' => $cStat, 'vNF' => $vNFtext, 'nProt' => $nProt, 'email' => $email); } catch (RuntimeException $e) { $aResp[] = array('nNF' => '000000', 'serie' => '000', 'data' => '000', 'nome' => 'FALHA', 'natureza' => "{$file}", 'cStat' => '', 'vNF' => 0, 'nProt' => '', 'email' => ''); } } return array('totFat' => $totFat, 'totPeso' => $totPeso, 'totIcms' => $totIcms, 'aNF' => $aResp); }
/** * zGetInfo * Busca informações do XML * para uso no sefazEPEC * @param string $xml * @return array */ protected function zGetInfo($xml) { $dom = new Dom(); $dom->loadXMLString($xml); $ide = $dom->getNode('ide'); $emit = $dom->getNode('emit'); $dest = $dom->getNode('dest'); $enderDest = $dest->getElementsByTagName('enderDest')->item(0); $icmsTot = $dom->getNode('ICMSTot'); $resp = array('chave' => $dom->getChave('infNFe'), 'dhCont' => $dom->getValue($ide, 'dhCont'), 'xJust' => $dom->getValue($ide, 'xJust'), 'cOrgaoAutor' => $dom->getValue($ide, 'cUF'), 'tpAutor' => '1', 'dhEmi' => $dom->getValue($ide, 'dhEmi'), 'tpNF' => $dom->getValue($ide, 'tpNF'), 'IE' => $dom->getValue($emit, 'IE'), 'UF' => $dom->getValue($enderDest, 'UF'), 'CNPJ' => $dom->getValue($dest, 'CNPJ'), 'CPF' => $dom->getValue($dest, 'CPF'), 'idEstrangeiro' => $dom->getValue($dest, 'idEstrangeiro'), 'IEdest' => $dom->getValue($dest, 'IE'), 'vNF' => $dom->getValue($icmsTot, 'vNF'), 'vICMS' => $dom->getValue($icmsTot, 'vICMS'), 'vST' => $dom->getValue($icmsTot, 'vST')); return $resp; }
/** * Gera as tags para o elemento: "Entrega" (Informações ref. a previsão de entrega) * #69 * Nível: 2 * Os parâmetros para esta função são todos os elementos da tag "Entrega" do tipo elemento (Ele = E|CE|A) e nível 3 * * @return \DOMElement */ private function zEntregaTag() { $this->entrega = $this->dom->createElement('Entrega'); return $this->entrega; }