/** * 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; }