/** * Prepara os dados para processar o arquivo do webservice * * @param string $sArquivo * @return bool * @throws Exception */ public function preparaDados($sArquivo) { try { // Foi comentado o if de verificação pois estava ocorrendo um problema na emissão e retornava um arquivo em branco. // Somente em ambiente de desenvolvimento //if (APPLICATION_ENV == 'development') { $oDomDocument = new DOMDocument(); $oDomDocument->loadXml($sArquivo); $oData = new Zend_Date(); $this->sNomeArquivo = "/RecepcionarLote-{$oData->getTimestamp()}.xml"; $this->sCaminhoArquivo = TEMP_PATH; /** * Verifica se o caminho do arquivo não existe recria a pasta */ if (!file_exists($this->sCaminhoArquivo)) { mkdir($this->sCaminhoArquivo, 0777); } /** * Escreve os dados no arquivo */ $this->sCaminhoNomeArquivo = $this->sCaminhoArquivo . $this->sNomeArquivo; $aArquivo = fopen($this->sCaminhoNomeArquivo, 'w'); fputs($aArquivo, print_r($sArquivo, TRUE)); fclose($aArquivo); //} $oValidacao = new DBSeller_Helper_Xml_AssinaturaDigital($sArquivo); /** * Validação digital do arquivo */ if (!$oValidacao->validar()) { throw new Exception($oValidacao->getLastError()); } $oUsuario = Administrativo_Model_Usuario::getByAttribute('cnpj', $oValidacao->getCnpj()); if (!is_object($oUsuario)) { throw new Exception('Usuário contribuinte não existe!', 157); } /** * Busca usuário contribuinte através do usuário cadastrado */ $aUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getByAttributes(array('usuario' => $oUsuario->getId(), 'cnpj_cpf' => $oUsuario->getCnpj())); if (!is_object($aUsuarioContribuinte[0])) { throw new Exception('Usuário contribuinte não encontrado!', 160); } /** * Seta os dados do contribuinte */ $this->oDadosUsuario = $oUsuario; $this->oContribuinte->sCpfCnpj = $aUsuarioContribuinte[0]->getCnpjCpf(); $this->oContribuinte->iCodigoUsuario = $oUsuario->getId(); $this->oContribuinte->iIdUsuarioContribuinte = $aUsuarioContribuinte[0]->getId(); /** * Atualiza os dados do contribuinte na sessão */ $oSessao = new Zend_Session_Namespace('nfse'); $oSessao->contribuinte = Contribuinte_Model_Contribuinte::getById($this->oContribuinte->iIdUsuarioContribuinte); return TRUE; } catch (Exception $oErro) { throw new Exception($oErro->getMessage(), $oErro->getCode()); } }
/** * Valida a estrutura do XML informado * @param $sXml * @return mixed */ private function validaXML($sXml) { $sNomeTempArquivo = TEMP_PATH . "/CancelarNfse-" . time() . ".xml"; /* gravo o xml enviado */ $fp = fopen($sNomeTempArquivo, "w"); fwrite($fp, $sXml); fclose($fp); $oXml = simplexml_load_string($sXml); $oIdentificacaoNfse = NULL; /** * Verifica estrutura padrão do XML de envio */ if (empty($oXml->CancelarNfseEnvio) || empty($oXml->CancelarNfseEnvio->Pedido)) { $this->adicionarInconsistencia('E160'); } else { $oPedido = $oXml->CancelarNfseEnvio->Pedido; $oIdentificacaoNfse = $oPedido->InfPedidoCancelamento; $oAssinatura = $oPedido->Signature; /** * Verifica a tag do número da nota */ if (empty($oIdentificacaoNfse->IdentificacaoNfse->Numero)) { $this->adicionarInconsistencia('E77'); } else { if (strlen($oIdentificacaoNfse->IdentificacaoNfse->Numero) != 15) { $this->adicionarInconsistencia('E160'); } } /** * Verifica a tag do CNPJ */ if (empty($oIdentificacaoNfse->IdentificacaoNfse->Cnpj)) { $this->adicionarInconsistencia('E46'); } /** * Verifica a tag da inscricao municipal */ if (empty($oIdentificacaoNfse->IdentificacaoNfse->InscricaoMunicipal)) { $this->adicionarInconsistencia('E40'); } /** * Verifica a tag do código municipal */ if (empty($oIdentificacaoNfse->IdentificacaoNfse->CodigoMunicipio)) { $this->adicionarInconsistencia('E64'); } /** * Verifica a tag do motido de cancelamento */ if (empty($oIdentificacaoNfse->CodigoCancelamento)) { $this->adicionarInconsistencia('E160'); } /** * Validação digital do arquivo */ if (!empty($oAssinatura)) { $oValidacao = new DBSeller_Helper_Xml_AssinaturaDigital($sXml); if (!$oValidacao->validar()) { $this->adicionarInconsistencia('E1'); } } } return $oIdentificacaoNfse; }