kaleu62/notafiscalsp

Integração com o WebService da Prefeitura de São Paulo para emissão de NFS e NTFS utilizando a API da nota do milhão

v1.0.10 2022-07-11 15:59 UTC

This package is auto-updated.

Last update: 2024-11-29 06:16:09 UTC


README

Latest Stable Version Total Downloads License

O Projeto se trata de um módulo de integração com o sistema de notas da Prefeitura de São Paulo (Nota do Milhão), possibilitando a automatização de serviços como emissão e consulta de Notas e outros serviços relacionados.

Extensões Necessárias

  • Soap
  • openssl

Referências úteis

Instanciando a Classe

Para instanciar a classe é necessário informar o CNPJ, o Certificado do Emissor e a senha do mesmo. No caso do caminho do Certificado pode ser utilizado o arquivo '.pfx' ou '.pem'

  // Instanciando a Classe
  $nfSP = new NotaFiscalSP([
      'cnpj' => '00000000000000',
      'certificate' => 'path/to/certificate.pfx',
      'certificatePass' => '000000'
  ]);

Ao instanciar a Lib ela faz uma requisiçao para obter a Inscrição Municipal(IM), porém a mesma pode ser passada como parametro.

  // Instanciando a Classe
  $nfSP = new NotaFiscalSP([
      'cnpj' => '00000000000000',
      'certificate' => 'path/to/certificate.pfx',
      'certificatePass' => '000000',
      'im' => '1225'
  ]);

Nota Fiscal (NFs NFe)

Obtendo Informações Base do CNPJ

Esse método retorna a Inscrição Municipal relacionada ao CNPJ e um booleano indicando se o mesmo pode emitir NFe

// Consulta seu próprio CNPJ para verificar a Inscrição Municipal
$response = $nfSP->cnpjInfo(); 
// Consulta um CNPJ para verificar a inscrição municipal e a situação referente a emissão
$response = $nfSP->cnpjInfo('111.222.333-44'); 

Obtendo Informações Basicas do Lote

Retorna apeas informações básicas como horário de envio do lote

$response = $nfSP->informacaoLote();

Consultando Nota Fiscal

Retorna Informaçes detalhadas de uma ou mais Notas (Limite 50 Notas por Requisição)

// Utilize o numero da nota
$response = $nfSP->consultarNf('00056');

*Para maiores detalhes sobre a consulta de várias notas simultaneamente veja o Wiki

Consultando Notas Fiscais Recebidas por Periodo

Retorna Notas recebidas em um periodo especifico (50 Notas por Pagina)

$period = new Period();
$period->setDtInicio('2019-08-05');
$period->setDtFim('2019-08-10');
$period->setPagina(2);

$response = $nfSP->notasRecebidas($period);

- Caso não insira a data Final, serão retornados somente registros da data inicial

- Caso não seja informado o numero da página o valor padrão é 1

Consultando Notas Fiscais Emitidas por Periodo

Retorna Notas emitidas em um periodo especifico (50 Notas por Pagina)

$period = new Period();
$period->setDtInicio('2019-08-05');
$period->setDtFim('2019-08-10');
$period->setPagina(2);

$response = $nfSP->notasEmitidas($period);

- Caso não insira a data Final, serão retornados somente registros da data inicial

- Caso não seja informado o numero da página o valor padrão é 1

Consultando Lote

Retorna Informações detalhadas de um lote especifico

// Utilize o numero do Lote
$response = $nfSP->consultarLote(356);

*Para mais detalhes da utilizaço acesse o Wiki

Cancelando Nota Fiscal

Cancela uma ou mais Notas (Limite 50 Notas por Requisição)

$response = $nfSP->cancelarNota('00568');

Emitindo uma Nota

$rps = new Rps();
$rps->setNumeroRps('00000000');
$rps->setTipoRps(RPSType::RECIBO_PROVENIENTE_DE_NOTA_CONJUGADA);
$rps->setValorServicos(30.80);
$rps->setCodigoServico(2881);
$rps->setAliquotaServicos( 0.029);
$rps->setCnpj('10000000000001');
$rps->setRazaoSocialTomador('RAZAO SOCIAL TOMADOR LTDA');
$rps->setTipoLogradouro('R');
$rps->setLogradouro('NOME DA RUA');
$rps->setNumeroEndereco(001);
$rps->setBairro('VILA TESTE');
$rps->setCidade('3550308'); // São Paulo
$rps->setUf('SP');
$rps->setCep('00000000');
$rps->setEmailTomador('teste@teste.com.br');
$rps->setDiscriminacao('Teste Emissão de Notas pela API');

$response =  $nfSP->enviarNota($rps);

Enviando Lote

O Lote envia diversos objetos do tipo RPS em uma unica requisição

$lote = new Lot();
$lote->setRpsList([$rps1, $rps2, $rps3]);
$response =  $nfSP->enviarLote($lote);

Enviando um Lote Async

O Lote ASYNC utiliza um outro Endpoint e pode ser útil caso o sistema de Notas esteja com alguma instabilidade ou em manutenção, é utilizada a mesma request porém é retornado um número de protocolo que pode ser consultado posteriormente

// Enviar Lote Async
$makeProtocol = $nfSP->enviarLoteAsync($lot);

// Consultar se o lote foi emitido
$lotResult = $nfSP->consultarLoteAsync('1223589');

NFTS

Consultando uma NFTS

    $nfSP->consultarNfts('454565')

Emitindo uma NFTS

// Montando o objeto da NFTS
$nfts = new Nfts();
$nfts->setNumeroDocumento('000000000000');
$nfts->setSerieNFTS('A');
$nfts->setCodigoServico('7099');
$nfts->setValorServicos('150.30');
$nfts->setCnpjPrestador('00000000000100');
$nfts->setDiscriminacao('xxx');
$nfts->setDataPrestacao('2019-09-10');
$nfts->setTipoDocumento('01');
$nfts->setRazaoSocialPrestador('XXXX');
$nfts->setLogradouroPrestador('Avenida x x x');
$nfts->setCidadePrestador('x');
$nfts->setNumeroEnderecoPrestador('250');
$nfts->setBairroPrestador('Vila x');
$nfts->setUfPrestador('SP');
$nfts->setCepPrestador('06000000');

// Emitindo a NFTS
$nfSP->enviarNfts($nfts);

Cancelando uma NFTS

$response = $nfSP->cancelarNfts('00568');

Métodos Básicos do Response

getResponse

Retorna uma array com as informaçes da resposta da API

  $response->getResponse();

getXmlInput

Retorna o XML enviado para API (REQUEST)

  $response->getXmlInput();

getXmlOutput

Retorna o XML Recebido da API (RESPONSE)

  $response->getXmlOutput();

getSuccess

Verifica o sucesso da operação realizada

  $response->getSuccess();

Classe NfSearch (NotaFiscalSP\Entities\Requests\NF\NfSearch)

É a classe utilizada para referenciar uma Nota Fiscal já Existente, não é necessário preencher todas propriedades, apenas o NumeroNfe é o suficiente.

Classe Period (NotaFiscalSP\Entities\Requests\NF\Period)

Utilizada na realização de consultas por periodo nas notas Emitidas e Recebidas, caso não altere nenhuma das propriedades retorna uma busca com os valores Padrões para data Atual

Classe Rps (NotaFiscalSP\Entities\Requests\NF\Rps)

Objeto utilizado para emissão de novas notas