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

正向开票 · 腾讯联用

走乐企联用通道开数电发票。客户只需要接 4 个接口:开票 → 查结果拿票 → 要冲就冲 → 月底对账。 签名加密、票文件转存全在开灵中台,你不用碰。

支持的业务场景——普通商品服务直接开;下列特定业务在基础字段之外多传一块对应字段即可,接口是同一个:

成品油建筑服务货物运输不动产销售不动产经营租赁旅客运输拖拉机/联合收割机二手车销售二手车服务

另有几项不看业务代码、按场景补充的:

差额征税扣除销方证件信息购方证件信息冠名发票纳税人确认

★农产品收购、报废产品收购不在本产品范围——那两类是收购方开给出售方的票,属于反向开票, 请用 反向开票 产品。

每一项在 ① 开票 页都有独立折叠块,写清楚触发条件、加在报文哪个位置,并附一份公共字段已合并好的完整报文,改值即可直接调。

🤖

给你的 AI 用 · 一键接入

把接入包整份复制给你的 AI,它照着就能写出全套对接代码,含各类特定业务场景与金额精度要求。

业务流程 · 泳道图

一张票从产生到交付给客户,走完这一条线。橙色是扳机(②开票、⑦红冲);紫色虚线是通道回给你的。

开票和红冲是同一个套路:都分「提交」和「取票」两段。提交只拿到一个受理号或红票标识,票本身要再查一次(或等回调)才能到手—— 所以 ④ 之于 ②,就等于 ⑨ 之于 ⑦。

车主 / 客户你们的系统开灵中台开票通道 / 税局【开票】正常开一张票①消费 / 加油完成,索要发票你们系统内部,不调接口②调「开票」★成品油多传 3 个字段,同一个接口③返回受理号开票是异步的,此时票还没出④轮询「查开票结果」直到 status=3;配了回调就等推送,不用轮⑤返回票号 + PDF/OFD/XML票文件已转存为开灵地址,24h 有效⑥把发票交付给客户推送 / 下载 / 进发票夹【红冲】开错了 / 退货了,同样是「先提交、再取票」两段式⑦调「红冲」★一键申请红字信息表+下载+开红票,三步已合成⑧返回红票标识 invoice_idstate=1 只是已提交,红票还没到手⑨查红冲结果 / 等回调和 ④ 一个道理,红票要再取一次⑩拿到红票原蓝票的 is_red_washed 变为 1
⚠️

开票数据真实性与税务责任

  • 发票的全部票面要素——购销方名称与纳税人识别号、商品名称与税收分类编码、数量金额与税率、 支付流水号等——必须真实,并与实际发生的业务一致。
  • 开灵仅提供接口通道与报文转发,不对报文内容做真实性核验,也无从判断一笔业务是否真实发生。
  • 若因填报虚假、编造或与实际业务不符的数据(例如编造的支付流水号、不实的购方税号、 与真实交易不符的商品名称或税收分类编码)导致发票异常、被税务机关核查或稽查,相关法律责任与后果由开票方(销方)自行承担。

接入前提(重要)

贵司的销方税号由开灵在后台完成开通后即可开票,你不需要调用任何开通接口,也不需要电子税务局账号或短信验证码——这是乐企联用通道的特点。

若开票返回「未绑定」类错误,请联系开灵项目经理,我们在后台绑定后即可继续。

四个接口

接口干什么路径计费
① 开票开一张数电发票/api/v1/invoice/forward/create按张计费
② 查开票结果拿状态、发票号码和票文件/api/v1/invoice/forward/query免费
③ 红冲开错了、退货了,用它把原票冲掉/api/v1/invoice/forward/red免费
④ 查红票红冲提交成功不等于红票到手/api/v1/invoice/forward/red-query免费
⑤ 发票统计与对账月底对账用/api/v1/invoice/forward/statistic?type=detail免费

只有开票计费,一张票一次;查结果、红冲、统计都不计费。

另有一个辅助接口 POST /api/v1/invoice/forward/red-query 用于查红冲进度,参数与红冲一致。红冲本身是一键的——申请红字信息表、下载信息表、开红票三步已合成在一个接口里。

最常见:开一张普通发票

不传 specific_business_code 就是普通发票。 下面那些成品油、建筑服务、货物运输之类,都是税局认定的「特定业务」,做那些业务才填; 日常卖货、卖服务开票,照下面这份报文来就行,一个特定业务字段都不用碰。

票种 invoice_type_code
082 数电电子普票 —— 个人消费、一般企业入账
081 数电电子专票 —— 购方要抵扣进项、办退税,必须开这个
抬头 title_type
1 个人/政府 —— buyer_taxpayer_num 可不填
2 企业 —— 必须填对方税号

完整可跑报文(下面这份是 2026-09-01 实测开出票号 26117200000004866592 的原报文):

POST /api/v1/invoice/forward/create

{
  "order_id": "你方订单号,全局唯一",
  "invoice_type_code": "082",
  "seller_taxpayer_num": "91110119MABQDU249D",
  "seller_name": "北京湛露科技有限公司",
  "seller_address": "北京市",
  "seller_tel": "01000000000",
  "seller_bank_name": "测试银行",
  "seller_bank_account": "1234567890",
  "title_type": 2,
  "buyer_title": "北京黎阳信息服务有限公司",
  "buyer_taxpayer_num": "91110108MA01C3TE9X",
  "terminal_code": "91110119MABQDU249D",
  "drawer": "开票员姓名",
  "callback_url": "https://你方域名/callback",
  "template": 1,
  "amount_has_tax": "113.00",
  "amount_without_tax": "100.00",
  "tax_amount": "13.00",
  "items": [{
    "name": "办公用品",
    "tax_code": "1090101020000000000",
    "unit": "批",
    "total": "1",
    "price": "100.00",
    "total_price": "100.00",
    "tax_rate": "0.13",
    "tax_amount": "13.00",
    "amount_has_tax": "113.00"
  }]
}

开给个人时把 title_type 改成 1、buyer_title 写「个人」、去掉 buyer_taxpayer_num, 并加上 "taxpayer_confirmation": { "draw_with_nobuyer_flag": 1 },否则可能开不出来。

⚠ 开票是异步的。create 只返回 state=1 受理中和 order_sn, 要拿票必须再调 query;查询时除了 order_id/order_sn,还必须带 seller_taxpayer_num, 只传单号会报「税号不能为空」。status=3 才是开票成功,此时 ticket_sn 即发票号码, PDF/OFD/XML 三个下载地址一并返回。

成品油怎么开

不是另一个接口,还是「① 开票」,只是多传三个字段:

"specific_business_code": "01",     // 成品油,金税四期硬要求
"special_invoice_kind": "08",       // 成品油票种
"e_extra_info": "{\"station\":\"深圳南山成品油站\",\"trade_time\":\"2026-08-29T15:30:00+08:00\",\"gun_number\":\"01\"}",
"items[].unit": "LITER"              // 升=LITER,吨=TON,不能写中文

e_extra_info 是 JSON 字符串不是对象,要先 stringify。三个字段都必填,trade_time 需符合 RFC3339 格式。明细里油品名要写规范(如 92号车用汽油), 税收编码汽油为 1070101010100000000,税率 0.13。

⚠ 两个容易踩的坑:一是 items[].unit 只能填 LITER 或 TON(英文大写),写中文「升」「吨」税局会报「无法映射到成品油单位枚举」; 二是销方企业须具备成品油经销资质,否则税局会拒开,这是资质问题不是接口问题。