Exemplo n.º 1
0
 /**
  * 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();
 }
Exemplo n.º 2
0
 /**
  * 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();
 }
Exemplo n.º 3
0
 /**
  * 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;
 }
Exemplo n.º 4
0
 /**
  * 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;
 }
Exemplo n.º 5
0
 /**
  * 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;
 }
Exemplo n.º 6
0
 /**
  * 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;
 }
Exemplo n.º 7
0
 /**
  * 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;
 }
Exemplo n.º 8
0
 /**
  * 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;
 }