kaleu62/notafiscalsp

与圣保罗市政府的Web服务集成,使用千万发票API发行NFS和NTFS

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

This package is auto-updated.

Last update: 2024-08-29 05:23:05 UTC


README

Latest Stable Version Total Downloads License

本项目是一个与圣保罗市政府(千万发票)的票据系统集成模块,可实现如发票发行和查询等服务的自动化。

必需的扩展

  • Soap
  • openssl

有用的参考

实例化类

要实例化类,需要提供CNPJ、发行者证书和密码。在证书路径的情况下,可以使用'.pfx'或'.pem'文件。

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

当实例化库时,它会发出一个请求以获取市镇登记(IM),但也可以作为参数传递。

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

发票(NFs NFe)

获取CNPJ的基本信息

此方法返回与CNPJ相关的市镇登记和表示是否可以发行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'); 

获取批次的基本信息

返回仅包含发送批次时间的等基本信息

$response = $nfSP->informacaoLote();

查询发票

返回一个或多个发票的详细信息(每请求限制50个发票)

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

*有关同时查询多个发票的更多详细信息,请参阅Wiki

按时间段查询收到的发票

返回在特定时间段内收到的发票 (每页50个发票)

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

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

- 如果不输入结束日期,则仅返回初始日期的记录

- 如果未提供页码,则默认值为1

按时间段查询发出的发票

返回在特定时间段内发出的发票 (每页50个发票)

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

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

- 如果不输入结束日期,则仅返回初始日期的记录

- 如果未提供页码,则默认值为1

查询批次

返回特定批次的具体信息

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

*有关更多使用细节,请访问Wiki

取消发票

取消一个或多个发票 (每请求限制50个发票)

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

发出发票

$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);

发送批次

批次发送多个RPS类型的对象,在一个请求中

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

异步发送批次

批次ASYN使用另一个端点,在票据系统不稳定或维护期间可能很有用,使用相同的请求,但返回一个可以在以后查询的协议号

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

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

NFTS

查询NFTS

    $nfSP->consultarNfts('454565')

发出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);

取消NFTS

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

响应的基本方法

getResponse

返回包含API响应信息的数组

  $response->getResponse();

getXmlInput

返回发送到API的XML(请求)

  $response->getXmlInput();

getXmlOutput

返回从API接收的XML(响应)

  $response->getXmlOutput();

getSuccess

检查操作的执行成功

  $response->getSuccess();

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

用于引用已存在的发票,不需要填写所有属性,只需要NumeroNfe即可。

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

用于在发票的发行和接收中按时间段进行查询,如果不更改任何属性,将返回当前日期的默认值。

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

用于发行新发票的对象