Example #1
0
 /**
  * zDigCheck
  * @param DOMDocument $dom
  * @param string $tagid
  * @return boolean
  * @throws Exception\RuntimeException
  */
 private function zDigCheck($dom, $tagid = '')
 {
     $node = $dom->getNode($tagid, 0);
     if (empty($node)) {
         throw new Exception\RuntimeException("A tag < {$tagid} > não existe no XML!!");
     }
     if (!$this->zSignatureExists($dom)) {
         $msg = "O xml não contêm nenhuma assinatura para ser verificada.";
         throw new Exception\RuntimeException($msg);
     }
     //carregar o node em sua forma canonica
     $tagInf = $node->C14N(true, false, null, null);
     //calcular o hash sha1
     $hashValue = hash('sha1', $tagInf, true);
     //converter o hash para base64 para obter o digest do node
     $digestCalculado = base64_encode($hashValue);
     //pegar o digest informado no xml
     $digestInformado = $dom->getNodeValue('DigestValue');
     //compara os digests calculados e informados
     if ($digestCalculado != $digestInformado) {
         $msg = "O conteúdo do XML não confere com o Digest Value.\n\n                Digest calculado [{$digestCalculado}], digest informado no XML [{$digestInformado}].\n\n                O arquivo pode estar corrompido ou ter sido adulterado.";
         throw new Exception\RuntimeException($msg);
     }
     return true;
 }
Example #2
0
 /**
  * zReadDistDFeInteresse
  * @param DOMDocument $dom
  * @param boolean $descompactar
  * @return array
  */
 protected static function zReadDistDFeInteresse($dom)
 {
     $aResposta = array('bStat' => false, 'versao' => '', 'cStat' => '', 'xMotivo' => '', 'dhResp' => '', 'ultNSU' => 0, 'maxNSU' => 0, 'aDoc' => array());
     $tag = $dom->getNode('retDistDFeInt');
     if (!isset($tag)) {
         return $aResposta;
     }
     $aDocZip = array();
     $docs = $tag->getElementsByTagName('docZip');
     foreach ($docs as $doc) {
         $xml = gzdecode(base64_decode($doc->nodeValue));
         $aDocZip[] = array('NSU' => $doc->getAttribute('NSU'), 'schema' => $doc->getAttribute('schema'), 'doc' => $xml);
     }
     $aResposta = array('bStat' => true, 'versao' => $tag->getAttribute('versao'), 'cStat' => $dom->getValue($tag, 'cStat'), 'xMotivo' => $dom->getValue($tag, 'xMotivo'), 'dhResp' => $dom->getValue($tag, 'dhResp'), 'ultNSU' => $dom->getValue($tag, 'ultNSU'), 'maxNSU' => $dom->getValue($tag, 'maxNSU'), 'aDoc' => $aDocZip);
     return $aResposta;
 }
 /**
  * zGetProt
  * @param DOMDocument $dom
  * @param DOMDocument $tag
  * @return array
  */
 private static function zGetProt($dom, $tag)
 {
     $aProt = array();
     $protMDFe = $tag->getElementsByTagName('protMDFe')->item(0);
     $infProt = $dom->getNode('infProt');
     if (empty($infProt)) {
         return $aProt;
     }
     $aProt = array('versao' => $protMDFe->getAttribute('versao'), 'tpAmb' => $dom->getValue($infProt, 'tpAmb'), 'verAplic' => $dom->getValue($infProt, 'verAplic'), 'chMDFe' => $dom->getValue($infProt, 'chMDFe'), 'dhRecbto' => $dom->getValue($infProt, 'dhRecbto'), 'nProt' => $dom->getValue($infProt, 'nProt'), 'digVal' => $dom->getValue($infProt, 'digVal'), 'cStat' => $dom->getValue($infProt, 'cStat'), 'xMotivo' => $dom->getValue($infProt, 'xMotivo'));
     return $aProt;
 }