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, em tese essa url
*NÃO É uma WebService, é simplismente uma página para
*consulta do QRCode via parametros GET, percebe-se que
*em todas as SEFAZ o endereço de consulta do QRCode se
*difere do padrão de endereço das WS.
*Esse é um serviço para ser utilizado pelo consumidor...
*NOTA: Sem o endereço de consulta não é possível gerar o QR-Code!!!
*/
//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;
}