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

反向开票 · 接口全集

腾讯系

面向报废产品回收场景:商户完成向自然人(散户)的收购后,通过接口完成转账付款、企业代缴个税(可选)、反向开具蓝字数电发票, 并可查询进度、下载票面、以及在开票有误/退货时发起全额红冲。 本组共 8 个接口,覆盖企业开通校验 → 提交开票 → 收款二维码 → 状态查询 → 取消 → 发票下载 → 蓝票冲红 → 冲红查询的完整生命周期。本组接口资金通道为腾讯系(微众银行/微信运营账号)。

业务流程 · 泳道图

一票报废收购从开通校验 → 提交开票 → 收款二维码 → 状态查询 → 下载发票 → 蓝票冲红的完整生命周期。蓝色粗线 = 你方系统实际要调的业务接口;细线 = 开灵平台内部替你转发腾讯方、以及腾讯方内部处理。

回收企业(受票方)开灵平台(网关)开票通道 · 腾讯系① 查企业开通状态company_query三态就绪 → 可开票② 提交转账 + 开票transfer_apply · 计费1:1 转发腾讯方返回 order_no(订单号)③ 取收款二维码transfer_qrcode二维码 → 自然人微信扫码收款通道内:转账付款 → 缴税 → 开蓝字数电票④ 轮询查状态transfer_status终态成功 + 发票号码⑥ 下载发票invoice_download平台代理下载链接(24h)⑦ 蓝票冲红 → ⑧ 查冲红red_invoice / red_invoice_status红字发票号码

说明:⑤ 取消申请(cancel_transfer)为异常分支——仅在缴税前可撤销,已开票的改走蓝票冲红。所有查询类接口免费,仅② 提交转账+开票计费。

🤖 AI 接入包(给外部系统的 AI 直接写对接代码)

把下面这份接入包丢给贵方的 AI(Claude / Cursor / 通义 等),它就能按本平台规范、用你指定的编程语言写出可直接运行的对接代码——覆盖鉴权签名 + 全部 8 个接口的字段/示例 + 代理下载 + 错误处理。

接入包地址:https://openapi.kailingteck.com/api/skill/reverse(纯 Markdown,可直接被程序抓取)。

调用地址

接口方法地址
查询企业开通状态POSThttps://openapi.kailingteck.com/api/v1/invoice/reverse/company_query
提交转账和开票申请POSThttps://openapi.kailingteck.com/api/v1/invoice/reverse/transfer_apply
获取转账和开票申请的二维码POSThttps://openapi.kailingteck.com/api/v1/invoice/reverse/transfer_qrcode
查询转账和开票申请的状态POSThttps://openapi.kailingteck.com/api/v1/invoice/reverse/transfer_status
取消转账和开票申请POSThttps://openapi.kailingteck.com/api/v1/invoice/reverse/cancel_transfer
下载发票POSThttps://openapi.kailingteck.com/api/v1/invoice/reverse/invoice_download
发起蓝票冲红POSThttps://openapi.kailingteck.com/api/v1/invoice/reverse/red_invoice
查询冲红状态POSThttps://openapi.kailingteck.com/api/v1/invoice/reverse/red_invoice_status

请求体为 JSON,Content-Type: application/json,UTF-8 编码。

鉴权(与发票查验接口同一套)

每次请求携带三个请求头:X-App-Key(平台分配)、X-Timestamp(Unix 秒级时间戳,与服务器时差须在 ±300 秒内)、X-Sign = SHA256(app_key + timestamp + body + app_secret) 的 16 进制小写。

# 签名:sign = SHA256(app_key + timestamp + body + app_secret) 的 16 进制小写
BODY='{"order_no":"20260112000004"}'
TS=$(date +%s)
SIGN=$(printf '%s' "${APP_KEY}${TS}${BODY}${APP_SECRET}" | shasum -a 256 | cut -d' ' -f1)

curl -X POST https://openapi.kailingteck.com/api/v1/invoice/reverse/transfer_status \
  -H "Content-Type: application/json" \
  -H "X-App-Key: ${APP_KEY}" \
  -H "X-Timestamp: ${TS}" \
  -H "X-Sign: ${SIGN}" \
  -d "$BODY"

计费说明

  • 提交转账和开票申请:按开票金额(total_amount 价税合计)乘以合同约定费率计费,申请受理成功(code=0 返回订单号)才计费,失败不计费;
  • 其余 7 个接口(开通校验/二维码/状态查询/取消/下载/蓝票冲红/冲红查询):均免费,不限次数,蓝票冲红不单独计费;
  • 费用从账户余额中扣减,可在商户中心实时查看每笔费用与余额。

接口一:查询企业开通状态

开票前置校验。回收企业(销方)须完成企业注册审核、乐企开通、微众银行开户三关方可开票。建议在提交开票前先调用本接口,确认三态均为「已开通(=2)」再发起开票,并从返回中取得 bank_account(付款行账号)与 issuer_id(开票员)。

请求参数

参数名称类型必填最大长度(字节)描述
taxpayer_nostring是20企业税号(统一社会信用代码/纳税人识别号)

响应参数(data)

参数名称类型必返描述
company_statusint是企业注册状态:1=正在审核;2=已审核(仅审核通过的企业才能开票)
leqi_statusint是乐企开通状态:0=未开通;1=正在审核;2=已开通;4=乐企接入失败
bank_statusint是微众银行开通状态:0=未开通;1=正在审核;2=已开通;3=需要支付授权
bank_accountstring否微众银行账号,开通成功后返回(即为提交开票时 buyer_bank_account 的来源)
issuer_listarray否开票员列表,乐企开通成功后返回(见下方 issuer 字段详情)

issuer_list 字段详情

参数名称类型必返描述
issuer_idstring是开票员 ID(提交开票申请时 issuer_id 的来源)
namestring是开票员名称,形如「张** 0012」

请求示例

{
    "taxpayer_no": "914403001234567890"
}

响应示例

{
    "code": 0,
    "data": {
        "company_status": 2,
        "leqi_status": 2,
        "bank_status": 2,
        "bank_account": "999967735837012345678",
        "issuer_list": [
            { "issuer_id": "1985991047072530434", "name": "张** 0012" }
        ]
    },
    "message": null
}

开票硬前提:company_status=2 且 leqi_status=2 且 bank_status=2。bank_status=3(需支付授权)时,须企业方先完成微众银行支付授权。

接口二:提交转账和开票申请

当完成报废产品收购,商户为自然人反向开具发票时,调用此接口完成转账申请及蓝字发票开具申请。

请求参数

参数名称类型必填最大长度(字节)描述
request_idstring是128唯一标识一个开票请求,防止重复创建订单
buyer_taxpayer_nostring是20购买方统一社会信用代码/纳税人识别号
buyer_bank_accountstring是50购买方开户银行账号
seller_namestring是300销方姓名
seller_phonestring是60销方手机号
seller_id_cardstring是20销方身份证号
seller_bank_namestring否120销方开户银行
seller_bank_accountstring否120销方开户银行账号
invoicing_typeint是4开票类型:3=报废产品收购(增值税专用发票);4=报废产品收购(增值税普通发票)
total_amountdecimal是18,2总价税合计
tax_amountdecimal是18,2总税额
net_amountdecimal是18,2不含税总金额
issuer_idstring是64开票员 ID(来自「查询企业开通状态」的 issuer_list)
itemsarray是1开票项目明细(见下方 items 字段详情)
is_enterprise_taxbool否1是否启用企业代缴个税
transfer_channelint否4转账渠道:0=微众银行;1=微信运营账号

items 字段详情

参数名称类型必填最大长度(字节)描述
categorystring是120商品和服务税收分类
tax_class_codestring是19商品和服务税收分类合并编码
goods_short_namestring是120商品服务简称
goods_namestring是600项目名称
goods_specs_modelstring否150规格型号
goods_unitstring是300单位(蓝票必填)
goods_quantitydecimal是12,10数量
goods_pricedecimal是12,10单价
goods_tax_ratedecimal是10,6税率
goods_total_amountdecimal是18,2含税金额

响应参数(data)

参数名称类型必返描述
order_nostring是订单号,后续查询/二维码/取消/下载/冲红均以此为唯一凭据

请求示例

{
    "request_id": "32fea2b28b3c4caeac7cf6173c9c15da",
    "buyer_taxpayer_no": "914403001234567890",
    "buyer_bank_account": "9999677358370100212121",
    "seller_name": "张三",
    "seller_phone": "18568641234",
    "seller_id_card": "41234567890123456789",
    "seller_bank_name": "中国工商银行股份有限公司",
    "seller_bank_account": "888867735837012345678",
    "invoicing_type": 4,
    "total_amount": 1.10,
    "tax_amount": 0.01,
    "net_amount": 1.09,
    "issuer_id": "1985991047072530434",
    "items": [
        {
            "category": "废铜",
            "tax_class_code": "1110201000000000000",
            "goods_short_name": "废铜",
            "goods_name": "废铜",
            "goods_specs_model": "",
            "goods_unit": "斤",
            "goods_quantity": 2,
            "goods_price": 0.55,
            "goods_tax_rate": 0.01,
            "goods_total_amount": 1.1
        }
    ]
}

响应示例

{
    "code": 0,
    "data": {
        "order_no": "20260112000004"
    },
    "message": null
}

request_id 由贵方生成并保证唯一,同一 request_id 重复提交不会重复创建订单(幂等)。

接口三:获取转账和开票申请的二维码

提交申请后,凭订单号获取收款二维码,供自然人(销方)微信扫码确认收款。返回为 base64 编码的 PNG 图片,前端可直接以 data:image/png;base64,<qrcode> 渲染。

请求参数

参数名称类型必填最大长度(字节)描述
order_nostring是32订单号(提交申请接口返回)

响应参数(data)

参数名称类型必返描述
qrcodestring是base64 编码的二维码 PNG 图片

请求示例

{
    "order_no": "20260112000004"
}

响应示例

{
    "code": 0,
    "data": {
        "qrcode": "iVBORw0KGgoAAAANSUhEUgAAAAsAAAALCAYAAAB..."
    },
    "message": null
}

接口四:查询转账和开票申请的状态

提交申请后,凭订单号调用此接口查询该笔业务在转账、缴税、开票各环节的实时状态与最终结果。

请求参数

参数名称类型必填最大长度(字节)描述
order_nostring是32订单号(提交申请接口返回)

响应参数(data)

参数名称类型必返描述
order_statusint是订单状态:1=待付款;4=已完成;5=已取消;7=已失效
tax_statusint是缴税状态:1=待缴税;2=缴税中;3=缴税成功;4=已取消
invoice_statusint是开票状态:1=未开具;2=开具中;3=开具成功;4=开具失败;5=已取消
invoice_nostring否发票号码
pay_timestring否付款时间,格式 yyyy-MM-dd HH:mm
receipt_timestring否收款时间,格式 yyyy-MM-dd HH:mm
invoice_timestring否开票日期,格式 yyyy-MM-dd HH:mm:ss
tax_timestring否缴税时间,格式 yyyy-MM-dd HH:mm:ss
invoice_error_messagestring否开票失败原因
transfer_error_messagestring否转账失败原因

请求示例

{
    "order_no": "20260112000004"
}

响应示例

{
    "code": 0,
    "data": {
        "invoice_error_message": null,
        "invoice_no": "26367200000123456789",
        "invoice_status": 3,
        "invoice_time": "2026-01-13 00:05:56",
        "order_status": 4,
        "pay_time": "2026-01-13 00:05:32",
        "receipt_time": "2026-01-13 00:06:30",
        "tax_status": 3,
        "tax_time": "2026-01-13 00:06:07",
        "transfer_error_message": null
    },
    "message": null
}

建议轮询间隔 30 秒以上;开具成功后从返回中取 invoice_no(发票号码)及各环节时间回写贵方业务台账。终态成功 = order_status=4 且 tax_status=3 且 invoice_status=3。

接口五:取消转账和开票申请

凭订单号取消尚未缴税的转账开票申请。仅在缴税前(未进入缴税环节)可取消,已缴税/已开票的订单不可取消,需改走蓝票冲红。

请求参数

参数名称类型必填最大长度(字节)描述
order_nostring是32订单号(提交申请接口返回)

响应参数(data)

无业务数据,code=0 即取消受理成功(data 为 null)。

请求示例

{
    "order_no": "20260112000004"
}

响应示例

{
    "code": 0,
    "data": null,
    "message": null
}

接口六:下载发票

凭企业税号 + 发票号码,获取蓝字发票文件的下载链接,支持 PDF/XML/OFD 三种格式。下载地址由平台代理转存,直接以 GET 打开即可(无需再带鉴权头,可直接交浏览器/下载器)。

请求参数

参数名称类型必填最大长度(字节)描述
taxpayer_nostring是20企业税号(统一社会信用代码/纳税人识别号)
invoice_nostring是32发票号码
file_typeint是1下载文件类型:1=PDF;2=XML;3=OFD

响应参数(data)

参数名称类型必返描述
file_urlstring是平台代理下载地址(GET 直接下载),有效期 24 小时

请求示例

{
    "taxpayer_no": "914403001234567890",
    "invoice_no": "26367200000123456789",
    "file_type": 1
}

响应示例

{
    "code": 0,
    "data": {
        "file_url": "https://openapi.kailingteck.com/api/v1/invoice/reverse/file/3f9a...c1__26367200000123456789.pdf"
    },
    "message": null
}

file_url 有效期 24 小时,建议拿到后及时下载并转存到贵方系统归档,不要长期缓存该链接。

接口七:发起蓝票冲红

蓝字发票开具成功后,如遇开票有误、销货退回、服务中止或销售折让,调用此接口发起红冲。仅支持全额红冲(不支持部分冲红),凭原蓝字发票的订单号发起。

请求参数

参数名称类型必填最大长度(字节)描述
order_nostring是32原蓝字发票的订单号
reasonint是1冲红原因:1=开票有误;2=销货退回;3=服务中止;4=销售折让
issuer_idstring否64开票人 ID

响应参数(data)

无业务数据,code=0 即红冲受理成功(data 为 null);红冲开具进度请调用「查询冲红状态」跟踪。

请求示例

{
    "order_no": "20260112000004",
    "reason": 1
}

响应示例

{
    "code": 0,
    "data": null,
    "message": null
}

接口八:查询冲红状态

发起蓝票冲红后,凭原订单号查询红字发票的开具进度与红字发票号码。

请求参数

参数名称类型必填最大长度(字节)描述
order_nostring是32原蓝字发票的订单号

响应参数(data)

参数名称类型必返描述
invoice_nostring是红字发票号码
invoice_statusint是开具状态:2=开具中;3=成功;4=失败
invoice_timestring否开票日期,格式 yyyy-MM-dd HH:mm:ss
invoice_error_codestring否开具失败原因编码
invoice_error_messagestring否开具失败原因

请求示例

{
    "order_no": "20260112000004"
}

响应示例

{
    "code": 0,
    "data": {
        "invoice_error_code": "",
        "invoice_error_message": "",
        "invoice_no": "2636720000000123456789",
        "invoice_status": 3,
        "invoice_time": "2026-01-13 00:12:20"
    },
    "message": null
}

红冲开具成功(invoice_status=3)后,从 invoice_no 取红字发票号码回写台账;失败(invoice_status=4)时依据 invoice_error_message 排查。

错误处理

响应报文壳固定为 { code, message, data },code=0 表示成功;code≠0 时 message 携带失败原因,依据提示修正后重试。

以下情况请求未进入开票通道,返回平台层错误码(报文壳为 { code: "CYT_xxx", msg, requestId, data }):

错误码HTTP含义与处理
CYT_40001400参数缺失或格式错误(如 total_amount 缺失或非数字)
CYT_40100/40101401缺少鉴权头/app_key 无效,检查密钥配置
CYT_40102401签名校验失败,核对签名拼接顺序与 body 一致性
CYT_40103401时间戳过期(±300 秒),校准服务器时间后重试
CYT_42901429请求过于频繁,稍后重试
CYT_42902402账户余额不足,充值后重试
CYT_50200502开票通道暂时不可用,稍后重试;持续失败请联系平台技术支持