跳到正文
开灵科技 - 北京开灵科技有限公司API百宝箱

② 查开票结果

拿状态、发票号码和票文件。★票的 PDF / OFD / XML 三种格式都在这个接口返回,不需要再调别的接口下载。

属「正向开票 · 腾讯联用」——开票通道的签名与加密全在开灵中台,你只调这一个。

接口

POST  https://openapi.kailingteck.com/api/v1/invoice/forward/query

鉴权:X-App-Key + X-Timestamp(Unix 秒) + X-Sign(= sha256(appKey + 时间戳 + 报文原文 + appSecret) 小写十六进制)。与开灵其它接口完全一致。

请求参数

字段必填大白话说明
seller_taxpayer_num必填销方税号(统一社会信用代码,15/17/18/20 位,不含字母 I O S V Z)。★字段名就是 seller_taxpayer_num,写成 taxpayer_id、tax_no 都不行——写错时上游回的是「税号不能为空」,明明传了却说没传,极易误判
order_id二选一你侧订单号(①开票时传的那个)。与 order_sn 不能同时为空
order_sn二选一①返回的通道受理号。★注意不能只传 invoice_id
is_red选填查哪种票:0 蓝票(默认)/ 1 红票。★查红票必须传 1,否则查不到。也可以直接用 ④ 查红票接口,那个已经帮你固定成 1 了

请求示例

{
  "order_id": "ORD20260829001",
  "seller_taxpayer_num": "91110119MABQDU249D"
}

返回

统一信封 code/msg/requestId/timestamp/data,业务字段都在 data 里。code 为 CYT_00000 表示调用成功。

返回参数(data)

字段大白话说明
order_id你侧订单号。与 order_sn 不会同时为空
order_sn通道受理号(上游侧的订单唯一标识)
status★开票状态:0 无效 / 1 开票中 / 2 开票失败 / 3 开票成功 / 4 作废中 / 5 作废失败 / 6 作废成功。★数电票没有作废,4~6 见不到
message开票描述。失败时这里是原因
ticket_date开票日期
ticket_sn★发票号码(开成功才有)
ticket_code发票代码。★数电票没有发票代码,这里返回空或 0,属正常
check_code校验码。★数电票没有校验码,返回空,属正常
amount_with_tax含税金额(元)
amount_without_tax不含税金额(元)
tax_amount税额(元)
is_red_washed是否已被红冲:0 未红冲 / 1 已红冲
pdf_url★发票 PDF 下载地址(开灵自有地址,24 小时有效)
ofd_url发票 OFD 下载地址(数电票才有)
xml_url发票 XML 下载地址(数电票才有)
tax_bureau_url税局端下载页地址,该页面含 PDF / OFD / XML 三个下载入口
buyer_info购方信息回显

返回示例(成功)

{
  "code": "CYT_00000",
  "msg": "success",
  "data": {
    "order_id": "",
    "order_sn": "7499487274632001743",
    "status": 3,
    "message": "开票成功",
    "ticket_date": "2026-08-29",
    "ticket_sn": "26117200000004866581",
    "ticket_code": "0",
    "check_code": "",
    "amount_with_tax": "1",
    "amount_without_tax": "0.88",
    "tax_amount": "0.12",
    "is_red_washed": 0,
    "pdf_url": "https://openapi.kailingteck.com/api/v1/invoice/forward/file/51f659315f9a0f7a648f571087144cfa__26117200000004866581.pdf",
    "ofd_url": "https://openapi.kailingteck.com/api/v1/invoice/forward/file/c91c46f3045b6ba3e80f127a963327a5__26117200000004866581.ofd",
    "xml_url": "https://openapi.kailingteck.com/api/v1/invoice/forward/file/4ea8bb05896f1c1e982de6c07b1e0ea1__26117200000004866581.xml",
    "tax_bureau_url": "",
    "buyer_info": {
      "title_type": "1",
      "buyer_title": "个人",
      "buyer_taxpayer_num": "",
      "buyer_address": "",
      "buyer_phone": "",
      "buyer_bank_name": "",
      "buyer_bank_account": "",
      "buyer_email": ""
    },
    "mock": false
  }
}

返回示例(失败)

{
  "code": "CYT_00000",
  "data": {
    "status": 2,
    "message": "蓝票开票失败:具体原因见此字段",
    "ticket_sn": "0",
    "pdf_url": ""
  }
}

异常与报错

情形含义与处理
税号不能为空(但你明明传了)★销方税号的字段名写错了。必须叫 seller_taxpayer_num,不是 taxpayer_id 也不是 tax_no。上游收不到这个字段就报「为空」,不会告诉你是名字错了
appkey未被 xxx 授权★销方企业还没把开票能力授权给开灵平台的应用。不是参数问题、也不是接入方能自行解决的,请联系开灵,由销方企业在乐企平台完成授权
找不到对应的发票信息订单号不对,或①开票根本没受理成功
status 一直是 1还在开票中。建议间隔 3~5 秒轮询,设最大次数,别写死循环
status=2开票失败,读 message 拿原因。常见:金额校验、税收编码、税盘未绑定
票文件链接打不开链接 24 小时有效,过期重新调本接口即可拿到新链接

回调推送字段

前端怎么用

// 轮询直到 status === 3
const r = await post('/api/v1/invoice/forward/query', { order_id, seller_taxpayer_num });
if (r.data.status === 3) download(r.data.pdf_url);

不想轮询的话,在①开票时配好 callback_url,开票结果会主动推给你——★这个回调和④查红票是同一个接口、同一个地址,蓝票红票都走它,用 notify_type 区分。票文件已由开灵转存,给到的是开灵自有下载地址,不暴露上游。