TF Fiscal
开发文档

NFC-e

代商家开具 NFC-e 零售发票(模型 65):接入流程、与 NF-e 的选择、主体配置、各州差异与小票打印。

能力概述与接入流程

NFC-e(模型 65,Nota Fiscal de Consumidor Eletrônica)是巴西的消费者电子发票,用于州内、卖给最终消费者的零售:门店现场销售、外卖与同城配送、店外现场销售。它与 NF-e 用同一套报文版式,但授权地址、二维码、取消时限与校验规则都不同。主体注册、证书关联、Webhook 登记与 NF-e 共用。

步骤接口说明
1 注册主体POST /openapi/v2/empresas与 NF-e 相同,新增可选 emissaoNFeConsumidor 段开通 NFC-e;已注册的主体带 id 重提即更新
2 关联证书POST /openapi/v1/empresas/{empresaId}/certificadoDigital与 NF-e 相同,同一张 A1 证书
3 登记回调POST /openapi/v1/webhooks重新注册 Webhook,eventos 加上 nfce.* 事件;NFC-e 不在缺省订阅里,结果推到同一回调地址
4 开票POST /openapi/v2/empresas/{empresaId}/nfce缺省异步;收银台可用同步模式当场拿结果
5 查询GET /openapi/v2/empresas/{empresaId}/nfce/{nfceId}状态、二维码、小票与 XML 下载链接
6 取消POST .../nfce/{nfceId}/cancelar授权后 30 分钟内
7 替代取消POST .../nfce/{nfceId}/cancelar-substituicao正常票与离线应急票重复时取消正常票,168 小时内

鉴权与 NF-e 完全相同,见认证与签名。

前提

  • 主体已审批通过、证书可用,否则 10022002。
  • 主体用 emissaoNFeConsumidor 段为当前环境开通了 NFC-e,否则 10022001。
  • 主体有州注册号 IE,并已在所在州开通 NFC-e。多数州对有 IE 的企业自动开通;SP 须每个营业场所单独开通,PR 的生产环境须先向州税务局申请,TO、RN、GO 须先具备 NF-e 开票资格。
  • 请求里的 ambienteEmissao 必须与主体当前环境一致,否则 10022003。

NFC-e 与 NF-e 怎么选

场景开什么
门店现场卖给个人消费者NFC-e
外卖、同城或州内配送卖给个人消费者NFC-e(须识别消费者并填地址),或 NF-e
互联网下单、跨州发货只能 NF-e
买方是 ICMS 纳税人只能 NF-e
单票金额超过 R$200.000只能 NF-e
退货、补充、调整、引用其他票只能 NF-e

平台不会把不符合 NFC-e 规则的请求自动改开 NF-e,而是返回 10022004 说明原因。

主体注册:emissaoNFeConsumidor 配置段

注册开票主体请求体新增可选段,其余字段不变:

json
"emissaoNFeConsumidor": {
"ambienteProducao": {
"sequencialNFe": 1,
"serieNFe": "1",
"csc": { "id": "000001", "codigo": "A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6" }
}
}
字段类型必填说明
ambienteProducaoobject是号段与安全码。号段同时用于测试与生产环境,安全码只用于生产环境
sequencialNFeinteger是下一张票号。平台从该号起连续取号;号段只升不降,更新时传入的号低于当前号则保持当前号
serieNFestring是NFC-e 系列号。1 到 3 位数字,与 NF-e 系列号区分,890 到 899 为官方保留号段不能用;建议每个收银终端或销售渠道一个系列
cscobject否安全码。只有二维码 v2 需要,只在生产环境生效;平台缺省用 v3,二维码 v2 由平台为主体切换,开放接口无法切换版本;遇到 10022009 请联系平台
csc.idstring是安全码编号。1 到 6 位数字,在州税务门户生成安全码时一并取得
csc.codigostring是安全码内容。16 到 36 位字母数字;平台加密保存,不回显
  • 传了即开通 NFC-e,注册响应 nfceHabilitado=true。测试环境不用单独配置:同一份号段测试与生产共用。
  • 更新:带主体 id 重提即覆盖本段。只换安全码时照原样带上 sequencialNFe 与 serieNFe,号段不会被调低。
  • 安全码由州税务门户发放。在州门户停用旧码后,须用本接口更新为新码,否则开票会被 SEFAZ 拒绝(462 / 463)。

端点

端点用途
开具 NFC-e异步受理返回 HTTP 200 无内容;同步模式返回结果或 202;按 id 幂等
查询 NFC-e状态、二维码、小票与 XML 链接、入参回显
取消 NFC-e授权后 30 分钟内,异步
替代取消取消与离线应急票重复的正常票,168 小时内,异步

状态与回调

状态含义回调事件
AguardandoAutorizacao已受理,等待 SEFAZ无
Autorizada已授权nfce.authorized
Negada被 SEFAZ 驳回,或平台后台处理失败nfce.rejected
Cancelada已取消nfce.canceled
ContingenciaPendenteSEFAZ 不可用时离线开出,待补传nfce.contingency_issued

取消被 SEFAZ 拒绝时票仍为 Autorizada,推送 nfce.cancel_rejected。离线票补传授权后再推一次 nfce.authorized,补传被拒推 nfce.rejected。回调载荷与 NF-e 相同,tipo 为 NFC-e,另带二维码内容 nfeQrCode,见 Webhooks。这些事件须在 Webhook 注册的 eventos 里显式订阅。

离线应急

SEFAZ 不可用且本州允许时,平台自动以离线应急方式开出 NFC-e(访问密钥第 35 位为 9),状态 ContingenciaPendente,小票可以当场打印交付。SEFAZ 恢复后平台自动补传;同一笔交易若同时有已授权的正常票,平台会自动替代取消正常票。特殊情况可调用替代取消自行处理。

各州差异

已知差异如下,可能随州法规变化。其中识别门槛、SC 禁止配送、GO 与 SC 买方不能用 CNPJ 识别,平台在受理时按开票主体所在州检查,不符合当场返回 10022004;其余各项由 SEFAZ 在授权时检查,不符合会被驳回为 Negada,请在提交前自行遵守:

州识别门槛配送销售其他
SPR$10.000允许,限 SP 境内
MGR$10.000只限零售机构安全码测试与生产共用
RJR$2.000允许,须填承运方可向州税务局付费申请逾期取消
PRR$10.000;配送不论金额都须识别允许,州内
RSR$10.000;批发兼零售必须识别允许
SCR$10.000;买方不能用 CNPJ 识别禁止
ESR$10.000只允许餐饮、药店、花店类配送安全码编号固定 000001
GOR$10.000,只能用 CPF允许买方用 CNPJ 识别的须开 NF-e
MTR$1.000只限同一城市可向州税务局付费申请逾期取消
TOR$3.000,须同时填姓名与地址只限州内
PER$5.000允许
BA、AL、PBR$500允许AL 配送必须打印小票
其余州R$10.000允许,州内

小票打印

  • 查询与回调里的小票链接是 80mm 热敏纸版式的 PDF,可直接送打印机。
  • 自行排版时,必须包含官方要求的全部信息,把 qrCode 编码成二维码,并印上 urlConsulta 与访问密钥。
  • 消费者同意时可以不打印,改为发送访问密钥或电子小票;RJ、ES 与 AL 的配送销售要求打印。
  • 测试环境的小票印「EMITIDA EM AMBIENTE DE HOMOLOGAÇÃO – SEM VALOR FISCAL」,测试环境下第一行商品描述也会被平台替换为官方固定文案,集成方无需处理。

联调清单

  1. 注册主体并传 emissaoNFeConsumidor,响应 nfceHabilitado=true。
  2. 关联证书,重新注册 Webhook 并在 eventos 里加上 nfce.* 事件。
  3. 用开票页的示例同步开票,拿到 Autorizada,qrCode 与 linkDanfe 有值,下载小票 PDF。
  4. 用同一 id 再提交,返回同一张票,票号不变。
  5. 用配送示例异步开票,收到 tipo=NFC-e、nfeStatus=Autorizada 的回调。
  6. 30 分钟内取消第 3 步的票,查询为 Cancelada,收到取消回调。
  7. 反向用例:presencaConsumidor=OperacaoPelaInternet、配送不传 cliente、CFOP 6102 都返回 10022004;授权超过 30 分钟后取消返回 10022007。