Classe principal CORE do sistema , contêm todos os métodos necessários para a comunicação com o SEFAZ , configuração e gestão dos dados.
MÉTODOS
function __construct()
* Método construtor da classe
* Este método utiliza o arquivo de configuração (config.php) localizado no diretorio config
* para montar os diretórios e várias propriedades internas da classe, permitindo
* automatizar melhor o processo de comunicação com o SEFAZ.
*
* #################################
* PASTA ENTRADAS
* #################################
* $entradasDir="../../NFE_$ambiente/entradas/"
* As NFe's geradas pelo ERP devem ser colocadas neste diretorio para posterior assinatura.
* Ao detectar um documentos nesta pasta o sistema ira verificar o numero
* da nota e procurar por equivalentes nas pastas de reprovadas e rejeitadas
* caso encontre alguma com o mesmo numero irá remover-las dessas pastas.
* Isto funciona para que possamos reemitir as NFe que posuiam erros, e
* que foram corrigidos, mantendo o sistema limpo.
* Em seguida irá processar esses arquivos com a assinatura.
*
* #################################
* PASTA ASSINADAS
* #################################
* $assinadasDir="../../NFE_$ambiente/assinadas/";
* As NFe's já assinadas colocadas nesta pasta e estarão disponíveis para a validação.
*
* #################################
* PASTA VALIDADAS
* #################################
* $validadasDir="../../NFE_$ambiente/validadas/";
* As NFe's já assinadas são verificadas contra o esquema xsd e as validadas são
* colocadas nesta pasta para posterior envio ao SEFAZ.
*
* #################################
* PASTA REJEITADAS
* #################################
* $rejeidadasDir="../../NFE_$ambiente/rejeitadas/";
* As NFe's já assinadas e que não passaram pela validação (rejeitadas) são colocadas neste
* diretorio para que sejam corrigidas. As NFe's são rejeitadas quando, após terem sido
* testadas e houverem erros em sua estrutura. O sistema deverá informar o operador da
* ocorrência dessa rejeição e seu motivo e nada mais será feito com estas NFe's até que
* uma nova NFe com o mesmo número desta que foi rejeitada seja colocada na pasta de entrada
* e neste caso a NFe rejeitada deverá ser removida.
*
* #################################
* PASTA ENVIADAS
* #################################
* $enviadasDir="../../NFE_$ambiente/enviadas/";
* Após a NFe haver sido enviada ao SEFAZ com sucesso ela é removida da pasta VALIDADAS
* e colocada nesta pasta e o arquivo do recibo do SEFAZ é colocado na pasta TEMPORARIAS.
*
* #################################
* PASTA TEMPORARIAS
* #################################
* $temporarioDir="../../NFE_$ambiente/temporarias/";
* Nesta pasta são colocados todos os arquivos temporários e de debug
* estes arquivos serão removidos periódicamente
*
* #################################
* PASTA APROVADAS
* #################################
* $aprovadasDir="../../NFE_$ambiente/enviadas/aprovadas/";
* As NFe's consultadas quanto ao seu status junto ao SEFAZ e aprovadas (status 100)
* são complementadas com a tag do protocolo e colocadas nesta pasta em subdiretorios
* que indicam o ano e mês da emissão da NFe ex. 200910. Isto é feito apenas para
* melhorar a visibilidade e o acesso as NFe por data de emissão e facilitar o backup.
*
* #################################
* PASTA DENEGADAS
* #################################
* $denegadasDir="../../NFE_$ambiente/enviadas/denegadas/";
* As NFe's consultadas quanto ao seu status junto e denegadas (status 110)
* são complementadas com a tag do protocolo e colocadas nesta pasta em subdiretorios
* que indicam o ano e mês da emissão da NFe ex. 200910.
* Isto é feito apenas para melhorar a visibilidade e o acesso as NFe por data de emissão
* e facilitar o backup.
*
* #################################
* PASTA REPROVADAS
* #################################
* $reprovadasDir="../../NFE_$ambiente/enviadas/rereprovadas/";
* As NFe's consultadas quanto ao seu status e rejeitadas (status > 110)
* são movidas para este subdiretorio, para posterior analise e correção.
* Neste diretorio também é colocado no retorno do SEFAZ que indica o motivo da rejeição,
* para facilitar a apresentação dessa informação ao usurário, nada mais será feito
* com essas NFe !!! até que uma nova NFe com o mesmo numero seja criada e colocada
* na pasta de ENTRADAS e neste caso essa NFe e a resposta da SEFAZ serão removidas.
*
* #################################
* PASTA CANCELADAS
* #################################
* $canceladasDir="../../NFE_$ambiente/canceladas/";
* As respostas positivas as solicitações de cancelamento de NFe's
* são colocadas neste diretorio em subpastas identificadas com ANOMES ex. 200910
* Isto é feito apenas para melhorar a visibilidade e o acesso dos cancelamentos
* das NFe por data de emissão e facilitar o backup.
*
* #################################
* PASTA INUTILIZADAS
* #################################
* $inutilizadasDir="../../NFE_$ambiente/inutilizadas/";
* As respostas positivas as solicitações de inutilização de faixa de numeros de NFe's
* são colocadas neste diretorio em subpastas identificadas com ANOMES ex. 200910
* Isto é feito apenas para melhorar a visibilidade e o acesso as inutilizações de numeros
* das NFe por data de emissão e facilitar o backup.
*
* #################################
* PASTA RECEBIDAS
* #################################
* $recebidasDir="../../NFE_$ambiente/recebidas/";
* Nesta pasta devem ser colocadas as NFe's recebidas de terceiros.
*
* #################################
* PASTA CONSULTADAS
* #################################
* $consultadas="../../NFE_$ambiente/consultadas/";
* As NFe's recebidas de terceiros e já consultadas para verificar sua validade
* na SEFAZ serão colocadas em subpastas identificadas pelo ANOMES nesta pasta.
* Isto é feito apenas para melhorar a visibilidade e o acesso das consultas das entradas
* das NFe por data de emissão e facilitar o backup.
*
* #################################
* PASTA PDF
* #################################
* $pdf="../../NFE_$ambiente/pdf/";
* Nesta pasta serão colocados dos arquivos pdf que serão mantidos no sistema.
* Normalmente não é necessário o uso desta pasta!!!
*
* #################################
* PASTA CERTIFICADOS
* #################################
* $certDir='../certs/';
* Nesta pasta devem ser colocados os certificados padrão A1, é recomentdado que o
* certificado seja nomeado apelas com letras minusculas e incluir em seu nome a data de
* validade do mesmo (ex. cert_empresa_20100414.pfx) isto ajuda na manipulação dos certificados.
*
* #################################
* PASTA CONFIGURAÇÃO
* #################################
* $configDir = '../config/';
* Nesta pasta devera estar o arquivo de configuração do sistema
* "config.php" e o arquivo xml que contêm os padrões de acesso aos URL da SEFAZ de todos os
* estados "urlWebServicesNFe.xml".
* Além disso este diretorio també será utilizado para armazenar o arquivo de
* controle do numero de lotes de envio de NFe ao SEFAZ "lotes.php".
*
* #################################
* PASTA BIBLIOTECAS
* #################################
* $libDir='../libs/';
* Esta pasta contêm as bibliotecas e classes do sistema
*
* #################################
* PASTA ESQUEMAS
* #################################
* $schemas='../schemas/'";
* Esta pasta contêm os esquemas de construção e validação dos arquivos de
* comunicação xml com o SEFAZ.
* Estes arquivos devem ser mantidos atualizados!!! Podem ocorrer revisões nestes
* padrões que deverão ser refletidos nessta pasta e no próprio sistema.
*
* #################################
* PASTA IMAGENS
* #################################
* $images='../images/';
* Esta pasta contêm as imagens (jpg, gif, png, etc.) utilizadas pelo sistema
* a principal imagem é o logo da empresa que deve estar no formato JPG.
public function statusServico()
* Verifica o status do servico da SEFAZ
* $this->cStat = 107 OK
* cStat = 108 sitema paralizado momentaneamente, aguardar retorno
* cStat = 109 sistema parado sem previsao de retorno, verificar status SCAN
public function consultaCadastro($UF,$CNPJ='',$IE='',$CPF='')
* Solicita dados de situaçao de Cadastro, somente funciona para
* cadastros de empresas localizadas no mesmo estado do solicitante e os dados
* retornados podem não ser os mais atuais. Não é recomendado seu uso ainda.
public function addProt($nfefile, $protfile)
* Este método adiciona a tag do protocolo a NFe, preparando a mesma
* para impressão e envio ao destinatário.
public function validXML($docXml, $xsdFile)
* Verifica o xml com base no xsd
* Esta função pode validar qualquer arquivo xml do sistema de NFe
* Há um bug no libxml2 para versões anteriores a 2.7.3
* que causa um falso erro na validação da NFe devido ao
* uso de uma marcação no arquivo tiposBasico_v1.02.xsd
* onde se le {0 , } substituir por *
public function signXML($docxml, $tagid='')
* Assinador TOTALMENTE baseado em PHP para arquivos XML
* este assinador somente utiliza comandos nativos do PHP para assinar
* os arquivos XML
public function sendLot($aNFe,$idLote)
* Envia lote de Notas Fiscais para a SEFAZ.
* Este método pode enviar uma ou mais NFe para o SEFAZ, desde que,
* o tamanho do arquivo de envio não ultrapasse 500kBytes
public function getProtocol($recibo)
* Solicita resposta do lote de Notas Fiscais pelo numero do recibo
* Caso $this->cStat == 105 Tentar novamente mais tarde
public function getNFeProtocol($idNFe)
* Este método obtem o protocolo da NFe pelo Id da mesma (chave de acesso de 44 digitos)
public function loadSEFAZ($spathXML,$sAmbiente,$sUF)
* Função para extrair o URL, nome do serviço e versão dos webservices das SEFAZ de
* todos os Estados da Federação do arquivo urlWebServicesNFe.xml
*
* O arquivo xml é estruturado da seguinte forma :
* <WS>
* <UF>
* <sigla>AC</sigla>
* <homologacao>
* <Recepcao service='nfeRecepcao' versao='1.10'>http:// .....
* ....
* </homologacao>
* <producao>
* <Recepcao service='nfeRecepcao' versao='1.10'>http:// ....
* ....
* </producao>
* </UF>
* <UF>
* ....
* </WS>
public function loadCerts()
* Carrega o certificado pfx e gera as chaves privada e publica no
* formato pem para uso do SOAP e registra as variaveis de ambiente
* Esta função deve ser invocada antes das outras do sistema que
* dependam do certificado.
* Além disso esta função também verifica a validade do certificado.
* Os certificados padrão A1 (que são usados pelo sistema) tem validade
* limitada à 1 ano e caso esteja vencido a função retornará FALSE.
*
* Resultado
* A função irá criar o certificado digital (chaves publicas e privadas)
* no formato pem e grava-los no diretorio indicado em $this->certsDir
* com os nomes :
* privatekey.pem
* publickey.pem
* Estes arquivos tabém serão carregados nas variáveis da classe
* $this->pathCert (com o caminho completo para o arquivo publickey.pem)
* $this->pathKey (com o caminho completo para o arquivo privatekey.pem)
* Dependencias
* $this->pathCerts
* $this->nameCert
* $this->passKey
public function validCerts($cert)
* Validaçao do cerificado digital, além de indicar
* a validade, este metodo carrega a propriedade
* mesesToexpire da classe que indica o numero de
* meses que faltam para expirar a validade do mesmo
* esta informação pode ser utilizada para a gestão dos
* certificados de forma a garantir que sempre estejam validos
private function __cleanCerts($certFile)
* Retira as chaves de inicio e fim do certificado digital
* para inclusão do mesmo na tag assinatura do xml
private function __convertTime($DH)
* Converte o campo data time retornado pelo webservice
* em um timestamp unix
public function listDir($dir,$fileMatch)
* Método para obter todo o conteudo de um diretorio, que atendam
* ao critério indicado.
public function __sendSOAP($param,$urlsefaz,$service)
* Estabelece comunicaçao com servidor SOAP da SEFAZ, usando as chaves publica e privada
* parametrizadas na construção da classe.
private function __getNumLot()
* Obtêm o numero do último lote de envio, do arquivo "config/numloteenvio.xml"
private function __putNumLot($num)
Grava o numero do lote de envio usado no arquivo "config/numloteenvio.xml"
* @param numeric $num Inteiro com o numero do lote enviado
* @return boolean TRUE sucesso ou FALSO erro