ToolsNFePHP

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