kaleu62 / notafiscalsp
与圣保罗市政府的Web服务集成,使用千万发票API发行NFS和NTFS
v1.0.10
2022-07-11 15:59 UTC
Requires
- ext-dom: *
- ext-soap: *
- greenter/xmldsig: ^5.0
- robrichards/xmlseclibs: ^3.0
- spatie/array-to-xml: ^2.8
Requires (Dev)
- phpunit/phpunit: >=7.0
Suggests
- ext-mbstring: *
README
本项目是一个与圣保罗市政府(千万发票)的票据系统集成模块,可实现如发票发行和查询等服务的自动化。
必需的扩展
- Soap
- openssl
有用的参考
- 在发行发票时,买方城市的字段将被填充为IBGE的代码,并可以在https://cidades.ibge.gov.br/brasil/sp/sao-paulo网站上查询。
实例化类
要实例化类,需要提供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)
用于发行新发票的对象