④ 查红票
红冲提交成功不等于红票到手。用这个接口把红票的号码和 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,你的服务端一个入口就够,不用做两套。本接口不计费。
