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

④ 查红票

红冲提交成功不等于红票到手。用这个接口把红票的号码和 PDF 拿回来——和开票 ①→② 是完全一样的套路。

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

接口

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

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

请求参数

字段必填大白话说明
seller_taxpayer_num必填销方税号
order_id二选一★原蓝票的订单号(不是红票的)。红票挂在原蓝票的订单下
order_sn二选一原蓝票的通道受理号

请求示例

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

返回

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

返回参数(data)

字段大白话说明
(字段与②查开票结果完全一致)只是查回来的是红票:金额和税额为负数
status★红票开具状态:1 开票中 / 2 开票失败 / 3 开票成功
ticket_sn★红票号码
ticket_date红票开票日期
amount_with_tax含税金额,★负数
amount_without_tax不含税金额,★负数
tax_amount税额,★负数
pdf_url★红票 PDF 下载地址(开灵自有地址,24 小时有效)
ofd_url红票 OFD 下载地址
xml_url红票 XML 下载地址
tax_bureau_url税局端下载页地址

返回示例(成功)

{
  "code": "CYT_00000",
  "msg": "success",
  "data": {
    "order_id": "",
    "order_sn": "7499487274632001743",
    "status": 3,
    "message": "开票成功",
    "ticket_date": "2026-08-29",
    "ticket_sn": "26117200000004866582",
    "ticket_code": "0",
    "check_code": "",
    "amount_with_tax": "-1",
    "amount_without_tax": "-0.88",
    "tax_amount": "-0.12",
    "is_red_washed": 1,
    "pdf_url": "https://openapi.kailingteck.com/api/v1/invoice/forward/file/0c3b402072d48ffd17689e6830ca6280__26117200000004866582.pdf",
    "ofd_url": "https://openapi.kailingteck.com/api/v1/invoice/forward/file/133b6ebc09eef0fb91aa45dbef731493__26117200000004866582.ofd",
    "xml_url": "",
    "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
  }
}

异常与报错

情形含义与处理
CYT_10001 查无此票★最常见,且不是故障:红冲还没走完。③返回 state=1 只是受理,红票要几秒到几分钟才出来,隔几秒再查即可,不要当成通道异常而中断轮询
查回来的是蓝票本接口已固定按红票查(内部把 is_red 置 1),如果你直接调②,记得自己传 is_red=1
status=2红冲失败,读 message 拿原因

回调推送字段

前端怎么用

// ③提交红冲后,轮询本接口拿红票
const r = await post('/api/v1/invoice/forward/red-query', { order_id, seller_taxpayer_num });
if (r.data.status === 3) download(r.data.pdf_url);   // 金额是负数

★传的是原蓝票的订单号,不是红票的——红票挂在原蓝票订单下。不想轮询就用③里的 callback_url,红票开好会主动推给你——★这个回调和②查开票结果是同一个接口、同一个地址,蓝票推 notify_type=invoice.blue、红票推 invoice.red,你的服务端一个入口就够,不用做两套。本接口不计费。