Пример #1
0
 /**
  * zPutQRTag
  * Monta a URI para o QRCode e coloca a tag 
  * no xml já assinado
  * @param Dom $dom
  * @return string
  * NOTA: O Campo QRCode está habilitado para uso a partir de 
  *       01/10/2015 homologação
  *       03/11/2015 Produção
  */
 protected function zPutQRTag(Dom $dom, $saveFile)
 {
     //pega os dados necessários para a montagem da URI a partir do xml
     $nfe = $dom->getNode('NFe');
     $ide = $dom->getNode('ide');
     $dest = $dom->getNode('dest');
     $icmsTot = $dom->getNode('ICMSTot');
     $signedInfo = $dom->getNode('SignedInfo');
     $chNFe = $dom->getChave('infNFe');
     $cUF = $dom->getValue($ide, 'cUF');
     $tpAmb = $dom->getValue($ide, 'tpAmb');
     $dhEmi = $dom->getValue($ide, 'dhEmi');
     $cDest = '';
     if (!empty($dest)) {
         //pode ser CNPJ , CPF ou idEstrageiro
         $cDest = $dom->getValue($dest, 'CNPJ');
         if ($cDest == '') {
             $cDest = $dom->getValue($dest, 'CPF');
             if ($cDest == '') {
                 $cDest = $dom->getValue($dest, 'idEstrangeiro');
             }
         }
     }
     $vNF = $dom->getValue($icmsTot, 'vNF');
     $vICMS = $dom->getValue($icmsTot, 'vICMS');
     $digVal = $dom->getValue($signedInfo, 'DigestValue');
     $token = $this->aConfig['tokenNFCe'];
     $idToken = $this->aConfig['tokenNFCeId'];
     $versao = '100';
     //pega a URL para consulta do QRCode do estado emissor
     //essa url está em nfe_ws3_mode65.xml
     //carrega serviço
     $servico = 'NfeConsultaQR';
     $siglaUF = $this->zGetSigla($cUF);
     $this->zLoadServico('nfe', $servico, $siglaUF, $tpAmb);
     if ($this->urlService == '') {
         $this->errors[] = "A consulta por QRCode não está disponível na SEFAZ {$siglaUF}!!!";
         return $dom->saveXML();
     }
     $url = $this->urlService;
     //usa a função zMakeQRCode para gerar a string da URI
     $qrcode = $this->zMakeQRCode($chNFe, $url, $tpAmb, $dhEmi, $vNF, $vICMS, $digVal, $token, $cDest, $idToken, $versao);
     if ($qrcode == '') {
         return $dom->saveXML();
     }
     //inclui a TAG NFe/infNFeSupl com o qrcode
     $infNFeSupl = $dom->createElement("infNFeSupl");
     $nodeqr = $infNFeSupl->appendChild($dom->createElement('qrCode'));
     $nodeqr->appendChild($dom->createCDATASection($qrcode));
     $signature = $dom->getElementsByTagName('Signature')->item(0);
     $nfe->insertBefore($infNFeSupl, $signature);
     $dom->formatOutput = false;
     $xmlSigned = $dom->saveXML();
     //salva novamente o xml assinado e agora com o QRCode
     if ($saveFile) {
         $anomes = date('Ym', DateTime::convertSefazTimeToTimestamp($dhEmi));
         $filename = "{$chNFe}-nfe.xml";
         $this->zGravaFile('nfe', $tpAmb, $filename, $xmlSigned, 'assinadas', $anomes);
     }
     //retorna a string com o xml assinado e com o QRCode
     return $xmlSigned;
 }