TF Fiscal
开发文档

NF-e 验证

XML 验证

提交 NF-e XML 原文;同步返回一级结论与票面数据,并启动 SEFAZ 核验。

POST/openapi/v3/consultas/nf-e/xml

需要 tokentimestampsign 三个签名头,参见认证与签名

提交 NF-e XML 原文,同步返回一级结论与解析出的票面数据;一级通过后自动进入二级 SEFAZ 核验,最终结论经 invoice.verify.completed webhook 推送(见 NF-e 验证)。

HTTP 200 表示请求受理成功,不代表发票通过验证。 XML 格式合法但校验不通过仍返回 200,结论在 validation 块中。请勿以 HTTP 状态码判断验证结果。

参数

请求头

  • Content-Typestring必填

    application/xmltext/xml

  • forceRevalidateboolean可选

    可选,默认 false。传 true 时即使已有可复用的终态结论也强制重验。不参与签名。 见下方“幂等与重验”。

响应

200

请求受理成功。解析出的票面数据加上带一级结论的 validation 块。包含校验不通过的情况:请检查 validation.validationStatusvalidation.errors

  • tipostring

    单据类型。

    取值:NF-eNFC-e
  • modelostring

    单据模型。

    取值:5565
  • statusstring

    SEFAZ 税务状态。

    取值:AutorizadaCanceladaDenegadaInutilizadaNaoEncontradaDesconhecida
  • statusDescriptionstring

    status 的本地化描述,随请求语言(见 NF-e 验证 的“响应语言”)。

  • ambienteEmissaostring

    单据的发行环境。

    取值:ProducaoHomologacao
  • numerostring

    发票号 nNF,无前导零。

  • seriestring

    系列号。

  • dataEmissaostring

    开票时间 dhEmi,ISO-8601 带时区偏移,票面原文(如 2026-07-23T11:20:05-03:00)。

  • chaveAcessostring

    44 位访问密钥。

  • emitenteobject

    开票方。

  • destinatarioobject

    收票方。

  • itensarray

    商品行。

  • dataAutorizacaostring | null

    SEFAZ 授权时间 dhRecbto(ISO-8601);提交的 XML 无协议节点时为 null。

  • protocoloobject | null

    授权协议;无协议节点时为 null。

  • valorTotalnumber

    整单折后净额 vNF,2 位小数。

  • validationobject

    一级结论块。仅此端点返回。

错误

错误码HTTP
10015000400

请求体为空。请在 body 中发送 XML。

10015001400

超过 1 MB。真实单张 NF-e 不会超过此限制;检查是否包了一层或二次编码。

10015002400

检测到 DTD(<!DOCTYPE)。请去除 DTD;作为 XXE 防护直接拒绝。

10015003400

编码非 UTF-8。提交前请转为 UTF-8。

请求体与签名

  • 推荐提交完整的 nfeProc 授权全文(含 protNFe 协议节点);也接受裸 NFe:无协议节点仅产生 warning,照常受理。
  • 硬约束上限 1 MB、仅 UTF-8、禁止 DTD(含 <!DOCTYPE 直接拒绝)。
  • 签名:body 参与签名前须去除全部 CR 与 LF,而实际发送的请求体保持原样:
text
sign = md5Hex(app_secret + "/openapi/v3/consultas/nf-e/xml" + 去CRLF后的XML + timestamp)

forceRevalidate 头不参与签名。完整规则见 认证与签名

金额口径

行级 itens[].valorTotal折前毛额(vProd),根级 valorTotal折后净额(vNF),两者之差即整单折扣。

一级校验错误

以 HTTP 200 返回,位于 validation.errors[]。这些不是传输错误:请求成功、单据不合格。除 PROTOCOL_MISSING(warning)外均为阻断项(终态 REJECTED)。

errors[].code数字码含义
XML_MALFORMED10015100XML 语法非法
XSD_INVALID10015101不符合 NF-e 4.00 XSD 版式
SIGNATURE_INVALID10015102数字签名验证失败(内容被篡改,或签名时证书已过期)
SIGNATURE_CERT_MISMATCH10015103签名证书 CNPJ 与开票方不符
ACCESS_KEY_INVALID10015104chave 结构 / 校验位非法
ACCESS_KEY_MISMATCH10015105chave 分段与票面字段不一致
PROTOCOL_MISMATCH10015106协议块与票内容不自洽
PROTOCOL_MISSING10015107无协议节点(warning,不阻断
XML_VERSION_UNSUPPORTED10015108版式版本非 4.00

二级结论(webhook)

一级通过后,最终结论invoice.verify.completed webhook 推送;请求头、载荷与接收端要求见 NF-e 验证。这些不是 HTTP 错误。

validationStatus终态?处置
VALIDATED可放行(发货、结算等)
REJECTED不可放行;reason 说明 SEFAZ 判定(已取消 / 否决 / 作废 / 查无 / 协议不符)
VALIDATION_ERROR平台侧核验失败,非发票判定;稍后带 forceRevalidate: true 重新提交

幂等与重验

  • XML 验证以 chave 为幂等键:验证进行中重复提交返回当前进度;终态结论 24 小时内复用(不重复消耗核验资源)。
  • 强制重验:加请求头 forceRevalidate: true(不参与签名)。chave 查询 为固定 GET 形状,无重验通道;需强制重验请通过本端点重新提交。
  • 一级阻断的 REJECTED 无二级对象,重验须重新提交 XML。