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 配置段
注册开票主体请求体新增可选段,其余字段不变:
"emissaoNFeConsumidor": {"ambienteProducao": {"sequencialNFe": 1,"serieNFe": "1","csc": { "id": "000001", "codigo": "A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6" }}}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
ambienteProducao | object | 是 | 号段与安全码。号段同时用于测试与生产环境,安全码只用于生产环境 |
sequencialNFe | integer | 是 | 下一张票号。平台从该号起连续取号;号段只升不降,更新时传入的号低于当前号则保持当前号 |
serieNFe | string | 是 | NFC-e 系列号。1 到 3 位数字,与 NF-e 系列号区分,890 到 899 为官方保留号段不能用;建议每个收银终端或销售渠道一个系列 |
csc | object | 否 | 安全码。只有二维码 v2 需要,只在生产环境生效;平台缺省用 v3,二维码 v2 由平台为主体切换,开放接口无法切换版本;遇到 10022009 请联系平台 |
csc.id | string | 是 | 安全码编号。1 到 6 位数字,在州税务门户生成安全码时一并取得 |
csc.codigo | string | 是 | 安全码内容。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 |
ContingenciaPendente | SEFAZ 不可用时离线开出,待补传 | 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,请在提交前自行遵守:
| 州 | 识别门槛 | 配送销售 | 其他 |
|---|---|---|---|
| SP | R$10.000 | 允许,限 SP 境内 | |
| MG | R$10.000 | 只限零售机构 | 安全码测试与生产共用 |
| RJ | R$2.000 | 允许,须填承运方 | 可向州税务局付费申请逾期取消 |
| PR | R$10.000;配送不论金额都须识别 | 允许,州内 | |
| RS | R$10.000;批发兼零售必须识别 | 允许 | |
| SC | R$10.000;买方不能用 CNPJ 识别 | 禁止 | |
| ES | R$10.000 | 只允许餐饮、药店、花店类配送 | 安全码编号固定 000001 |
| GO | R$10.000,只能用 CPF | 允许 | 买方用 CNPJ 识别的须开 NF-e |
| MT | R$1.000 | 只限同一城市 | 可向州税务局付费申请逾期取消 |
| TO | R$3.000,须同时填姓名与地址 | 只限州内 | |
| PE | R$5.000 | 允许 | |
| BA、AL、PB | R$500 | 允许 | AL 配送必须打印小票 |
| 其余州 | R$10.000 | 允许,州内 |
小票打印
- 查询与回调里的小票链接是 80mm 热敏纸版式的 PDF,可直接送打印机。
- 自行排版时,必须包含官方要求的全部信息,把
qrCode编码成二维码,并印上urlConsulta与访问密钥。 - 消费者同意时可以不打印,改为发送访问密钥或电子小票;RJ、ES 与 AL 的配送销售要求打印。
- 测试环境的小票印「EMITIDA EM AMBIENTE DE HOMOLOGAÇÃO – SEM VALOR FISCAL」,测试环境下第一行商品描述也会被平台替换为官方固定文案,集成方无需处理。
联调清单
- 注册主体并传
emissaoNFeConsumidor,响应nfceHabilitado=true。 - 关联证书,重新注册 Webhook 并在
eventos里加上nfce.*事件。 - 用开票页的示例同步开票,拿到
Autorizada,qrCode与linkDanfe有值,下载小票 PDF。 - 用同一
id再提交,返回同一张票,票号不变。 - 用配送示例异步开票,收到
tipo=NFC-e、nfeStatus=Autorizada的回调。 - 30 分钟内取消第 3 步的票,查询为
Cancelada,收到取消回调。 - 反向用例:
presencaConsumidor=OperacaoPelaInternet、配送不传cliente、CFOP 6102 都返回10022004;授权超过 30 分钟后取消返回10022007。
