NF-e 验证
chave 查询
按 44 位访问密钥返回票面数据;提交过验证的 chave 另附当前的验证结论。
GET
/openapi/v3/consultas/nf-e/{chave}需要
token、timestamp、sign 三个签名头,参见认证与签名。路径参数
chave* | string | 访问密钥 |
* 必填字段
200
票面数据。结构与 XML 验证 相同;只有经它提交过的 chave 带
validation 块。tipo | string | 单据类型 |
modelo | string | 单据模型码 |
status | string | 税务状态 |
statusDescription | string | 状态说明 |
ambienteEmissao | string | 开票环境 |
numero | string | 发票号 |
serie | string | 系列号 |
dataEmissao | string | 开具时刻 |
tipoOperacao | string | 操作类型(tpNF),从开票方看货物的方向 |
chaveAcesso | string | 访问密钥 |
| object | 开票方 |
| object | 收票方 |
| array | 商品行 |
dataAutorizacao | string | 授权时刻 |
| object | 授权协议 |
valorTotal | number | 整单净额 |
| object | 当前的验证结论 |
给定 app_secret = sk_live_9f8e7d6c5b4a、chave 35260764962869000108550990001366171195929648、timestamp = 1784906308,签名字符串为(GET,body 为空串;chave 在 path 内):
text
sign_input = "sk_live_9f8e7d6c5b4a"+ "/openapi/v3/consultas/nf-e/35260764962869000108550990001366171195929648"+ ""+ "1784906308"sign = md5Hex(sign_input)
平台按下面的层级依次查找,命中即返回。
此前提交验证过
平台留存了 XML 验证的记录,返回票面全量数据,另附 validation 块,validationStatus 为当前状态。
平台开出的票
从授权 XML 解析出票面全量数据,不带 validation 块。
陌生 chave
按平台策略经官方数据源取授权全量数据,不带 validation 块。
全部未命中
HTTP 400,10015004。chave 本身不合法则返回 10015104,不查任何数据源。
json
{ "code": 10015004, "message": "Invoice not found: 35260764962869000108550990001366171195929648" }
- 轮询兜底:经 XML 验证提交过的 chave,
validation块里的validationStatus是当前状态(PENDING_SEFAZ、VALIDATING或最终结论)。invoice.verify.completedwebhook 未送达时用它取结论。 - 后台复核:该 chave 最近一次 SEFAZ 答复超过 24 小时时,查询会自动安排一次新的二级核验(已是
Cancelada、Denegada、Inutilizada的票状态不会再变,不复核)。这次响应的validationStatus即为VALIDATING,新结论作为一条新事件经 webhook 推送。 - 不能强制重验:本端点无法强制复核,需要时请通过 XML 验证 带
forceRevalidate: true头重新提交 XML。
tipo单据类型
| 取值 | 含义 |
|---|---|
| NF-e | 电子发票,用于企业间交易与发货销售 |
| NFC-e | 消费者电子发票,用于现场零售 |
modelo单据模型码
| 取值 | 含义 |
|---|---|
| 55 | NF-e |
| 65 | NFC-e |
status税务状态
| 取值 | 含义 |
|---|---|
| Autorizada | SEFAZ 已授权且没有取消事件 |
| Cancelada | 已取消,含替代性取消 |
| Denegada | SEFAZ 否决 |
| Inutilizada | 号码已作废 |
| NaoEncontrada | SEFAZ 查无此票,可能是同步延迟 |
| Desconhecida | 无法从 SEFAZ 应答判定 |
ambienteEmissao开票环境
| 取值 | 含义 |
|---|---|
| Producao | 正式环境 |
| Homologacao | 税务局测试环境,票无法律效力 |
tipoOperacao操作类型
| 取值 | 含义 |
|---|---|
| Saida | 货物从开票方发出(tpNF=1),如销售发货 |
| Entrada | 货物进入开票方(tpNF=0),如消费者退货、进口 |
validation.validationStatus验证状态
首次同步响应只会是 PENDING_SEFAZ 或 REJECTED;其余经 invoice.verify.completed webhook 推送,也会出现在复用响应与 chave 查询中。
| 取值 | 含义 |
|---|---|
| PENDING_SEFAZ | 一级通过,排队等待 SEFAZ 核验 |
| REJECTED | 不通过,终态。一级因阻断错误,二级因 SEFAZ 状态(已取消、否决、作废、查无、协议不符);不可放行 |
| VALIDATING | 二级进行中,正在向 SEFAZ 查询 |
| VALIDATED | SEFAZ 确认真实且状态正常;终态,可放行 |
| VALIDATION_ERROR | 平台侧技术失败,不是对发票的判定;与其他结论一样 24 小时内复用,稍后带 forceRevalidate: true 重新提交 |
validation.errors[].code一级问题码
除 PROTOCOL_MISSING 进 warnings[] 外都是阻断项,直接 REJECTED。括号里是对应的数字码。
| 取值 | 含义 |
|---|---|
| XML_MALFORMED | XML 语法非法(10015100) |
| XSD_INVALID | 不符合 NF-e 4.00 官方版式(10015101) |
| SIGNATURE_INVALID | 数字签名无效:内容被改或签名时证书已过期(10015102) |
| SIGNATURE_CERT_MISMATCH | 签名证书 CNPJ 与开票方不符(10015103) |
| ACCESS_KEY_INVALID | 访问密钥结构或校验位非法(10015104) |
| ACCESS_KEY_MISMATCH | 访问密钥分段与票面字段不一致(10015105) |
| PROTOCOL_MISMATCH | 授权协议与票面不自洽(10015106) |
| PROTOCOL_MISSING | 无授权协议;提示,不阻断(10015107) |
| XML_VERSION_UNSUPPORTED | 版式版本非 4.00(10015108) |
| 错误码 | HTTP | |
|---|---|---|
| 10015104 | 400 | chave 非法(长度 / 字符 / 校验位)。本地直接拒绝,不发起查询。 |
| 10015004 | 400 | 各数据源均查无此票。平台与官方数据源均无该 chave;请与开票方核实。不要与二级结论里的税务状态 NaoEncontrada(SEFAZ 答复 217)混淆。 |
