Skip to content

正数闪票 乐企开票API接口文档 ​

基础信息

  • BaseURL:https://<domain>/api/v3
  • 文档版本:v3.0.8
  • 数据格式:application/json 或 application/x-www-form-urlencoded
  • 鉴权方式:JWT Bearer Token(除 /token 外所有接口需鉴权)
  • 说明:要使用本接口,需要在微信侧、支付宝侧授权我司为您的服务商,并授权开通乐企。授权完成后我司提供app_key、app_secret,方可使用本接口。

目录 ​


鉴权流程 ​

1) 调用 POST /api/v3/token 获取 JWT
2) 后续接口在 HTTP Header 中携带:
   Authorization: Bearer <access_token>
3) Token 有效期 7 天

统一响应格式 ​

所有接口统一返回 JSON:

json
{
  "code": 0,
  "msg": "success",
  "data": null | { ... } | [ ... ]
}
字段类型说明
codeint0=成功;非 0=失败
msgstring成功返回 success,失败返回错误描述
dataobject/array/null业务数据,失败时为 null

获取访问令牌(token) ​

POST /api/v3/token(无需鉴权)

请求参数(form-data 或 json) ​

参数必填类型说明
app_key是string商户app_key(税号)
app_secret是string商户接口密钥

响应示例 ​

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
    "token_type": "Bearer",
    "expires_in": 604800,
    "merchant_id": 1
  }
}
字段说明
access_tokenJWT Token,7 天有效期
token_type固定 Bearer
expires_in过期秒数(604800 = 7天)
merchant_id商户 ID

开具通用行业电子发票 ​

POST /api/v3/invoice/issue-general(需要鉴权)

通用行业 微信(WECHAT)或支付宝(ALIPAY)交易单开具数电发票。

请求参数 ​

参数必填类型说明
channel否string开票通道:WECHAT(默认)/ALIPAY
fapiao_apply_id是string发票申请单号(商户系统唯一,长度 ≤ 64)
buyer_information是object购买方信息对象
└─ type否stringINDIVIDUAL(个人)/ORGANIZATION(单位)
└─ name是string购买方名称(发票抬头)
└─ taxpayer_id否string纳税人识别号(企业必填;同时支持 tax_id 字段名)
└─ address否string地址
└─ telephone否string电话
└─ bank_name否string开户银行
└─ bank_account否string银行账号
└─ email否string邮箱
└─ phone否string手机号
└─ openid否string用户 openid
└─ user_apply_message否string用户留言
fapiao_information是object发票信息对象
└─ total_amount否int总金额(单位:分),不传则从 transactions 求和
└─ fapiao_bill_type否stringCOMM_FAPIAO(默认)/VAT_FAPIAO
└─ transaction_information是array交易信息数组,至少 1 条
└─ pay_channel否string根据 channel 默认 WECHAT_PAY 或 ALIPAY
└─ transaction_id否string微信支付订单号/支付宝交易号
└─ out_trade_no否string商户订单号
└─ amount否int交易金额(单位:分)
└─ trade_time否string交易时间,格式 Y-m-d H:i:s
└─ items否array发票明细行,不传则使用商户配置默认值(仅 1 行)

items[] 字段说明 ​

字段必填类型说明
tax_code否string税收分类编码
goods_name否string商品/服务名称
specification否string规格型号
unit否string单位
quantity否number数量(8 位以内小数,如 1.5)
unit_price否number单价,单位为分(如 2 表示 2 分 = 0.02 元)
amount否int单行金额(单位:分)
tax_amount否int单行税额(单位:分)
total_amount否int单行价税合计(单位:分)
tax_rate是number税率(小数,如 0.13 = 13%)
discount否bool是否折扣行;如为 true,则上一行自动为被折扣行
preferential_policy_code否int优惠政策标识

响应示例 ​

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "invoice_apply_id": "2024092400152012650023728088",
    "channel": "ALIPAY",
    "fapiao_apply_id": "API202409231000006501",
    "status": "申请已提交,等待开票结果回调"
  }
}
字段说明
fapiao_id发票 ID
channelALIPAY 或 WECHAT
fapiao_apply_id发票申请单号
status状态说明

错误码 ​

40001、40002、40003、40004、40005、40104、40201(微信)、40202(微信)、40203/40204/40205(支付宝)、50001


开具不动产租赁行业电子发票 ​

POST /api/v3/invoice/issue-realestate(需要鉴权)

不动产租赁行业微信(WECHAT)或支付宝(ALIPAY)交易单开具数电发票。其他字段和通用行业一致。

items[] 字段说明(不动产租赁行业) ​

字段必填类型说明 / 约束
tax_code是string不动产租赁税收分类编码;=3040502020200000000 时为停车场地(支持),=3040502020102000000 时为个人出租住房(暂不支持,税局暂不受理个人/个体工商户接入)
goods_name是string货物/应税劳务名称(如“不动产租赁费”)
specification否string规格型号
unit非折扣行必填、折扣行为空string非折扣行必须为面积单位(METER/SQUARE_METER/SQUARE_KILOMETER/HECTARE/SQUARE_KILOMETER_ABBREVIATION/SQUARE_METER_ABBREVIATION/HECTARE_ABBREVIATION/MU);折扣行必须为空;当 tax_code=3040502020200000000 时必须为 SQUARE_METER
quantity否number数量(8 位以内小数)
total_amount是int单行价税合计(单位:分)
tax_rate是number税率(小数,如 0.13 = 13%)
discount是bool是否折扣行(折扣行时 unit 必须为空)
preferential_policy_code否int优惠政策标识
real_estate_leasing_information是object不动产租赁行业额外信息
└─ province是string不动产坐落省份,≤ 20 字符,必须以“省/自治区/特别行政区/北京市/天津市/上海市/重庆市”之一结尾
└─ city条件必填string不动产坐落城市,≤ 20 字符;除港/澳/台外必填;必须以“市/盟/自治州/地区/区”之一结尾;重庆市/海南省时也可以“县”结尾
└─ address是string不动产坐落详细地址,≤ 80 字符,必须包含“街/路/村/乡/镇/道/巷/号”之一关键词
└─ lease_period_start / lease_period_end是string租赁期起止,RFC3339 格式 yyyy-MM-ddTHH:mm:ss+TIMEZONE;开始时间必须早于结束时间
└─ cross_city_flag是bool销售方营业执照注册地与不动产地市是否一致
└─ certificate_no否string产权证号
└─ plate_no条件必填array车牌号数组,最多 3 个;tax_code=3040502020200000000 时必填

“非折扣行必填、折扣行必须为空”;条件必填字段根据对应规则填写。 跨行约束:单次申请涉及多笔不动产租赁订单时,所有 items[].real_estate_leasing_information.province 必须完全一致。

响应示例 ​

与 3.3 完全一致。


开具成品油行业电子发票 ​

POST /api/v3/invoice/issue-oil(需要鉴权)

成品油行业微信(WECHAT)或支付宝(ALIPAY)交易单开具数电发票。其他字段和通用行业一致。

  • 同一商品短时间内若多次以相同数量(如 1)开具,会触发税局风控暂停成品油发票能力

items[] 字段说明(成品油行业) ​

字段必填类型说明 / 约束
tax_code是string成品油专用税收分类编码,必须以 10701010 开头
goods_name是string货物/应税劳务名称
specification否string规格型号
unit是string仅允许 TON(吨)/LITER(升);当 tax_code 以 1070101040100000000(燃料油)/1070101040200000000(燃料油定点直供)/1070101040300000000(燃料油废矿物油)开头时必须为 TON
quantity是number数量(8 位以内小数),必须传入真实交易数量(不建议恒为 1)
total_amount是int单行价税合计(单位:分)
tax_rate是number税率(小数,如 0.13 = 13%)
discount是bool是否折扣行
preferential_policy_code否int优惠政策标识
refined_oil_information条件必填object成品油行业额外信息;商户在税局被核定行业性质为成品油经销企业时必填,非经销企业可省略
└─ station必填string成品油站点,≤ 100 字符
└─ trade_time必填string交易时间(加油枪操作时间),RFC3339 格式 yyyy-MM-ddTHH:mm:ss+TIMEZONE
└─ gun_number必填string加油枪号码,≤ 10 字符

单独开具约束:航空煤油(1070101020100000000)/燃料油定点直供(1070101040200000000)/石脑油定点直供(1070101050200000000)必须单独开具,不得与其他商品混开。

单位换算 ​

不同商品的单位换算请参考成品油单位转换公式。系统只校验单位值是否合法,不自动换算。

响应示例 ​

与 3.3 完全一致。


开具旅客运输行业电子发票 ​

POST /api/v3/invoice/issue-transport(需要鉴权)

旅客运输行业微信(WECHAT)或支付宝(ALIPAY)交易单开具数电发票。其他字段和通用行业一致。

items[] 字段说明(旅客运输行业) ​

字段必填类型说明 / 约束
tax_code是string旅客运输专用税收分类编码,必须以 301 开头
goods_name是string货物/应税劳务名称(如“客运服务费”)
specification否string规格型号
unit否string单位(折扣行不填)
quantity否number数量(8 位以内小数)
total_amount是int单行价税合计(单位:分)
tax_rate是number税率(小数,如 0.13 = 13%)
discount是bool是否折扣行
preferential_policy_code否int优惠政策标识
passenger_information是object出行人信息
└─ name是string出行人姓名,≤ 20 字符
└─ certificate_type是string证件类型(14 种枚举之一)
└─ certificate_number是string证件号码
└─ departure_date是string出行日期,RFC3339 格式
└─ departure_place是string出发地,≤ 80 字符
└─ destination是string目的地,≤ 80 字符
└─ transportation_type是string交通工具类型(5 种枚举之一)
└─ transportation_classes条件可选string交通工具等级;仅船舶(SHIP)时可选填,其他工具时必须为空或不传

证件类型枚举(certificate_type) ​

IDENTITY_CARD(居民身份证)/ PASSPORT(护照)/ HONG_KONG_PERMIT(中国香港居民来往内地通行证)/ MACAO_PERMIT(中国澳门居民来往内地通行证)/ TAIWAN_PERMIT(中国台湾居民来往大陆通行证)/ FOREIGNER_RESIDENCE_PERMIT(外国人居留证)/ HONG_KONG_RESIDENT_CARD(香港居民证)/ MACAO_RESIDENT_CARD(澳门居民证)/ TAIWAN_RESIDENT_CARD(台湾居民证)/ MILITARY_OFFICER_CARD(军官证)/ ARMED_POLICE_OFFICER_CARD(武警警官证)/ SOLDIER_CARD(士兵证)/ HOMECOMING_CERT(港澳同胞回乡证)/ TAIWAN_COMPATRIOT_CERT(台胞证)

交通工具类型枚举(transportation_type) ​

LONG_DISTANCE_BUS(长途汽车)/ PUBLIC_TRANSPORTATION(公共交通)/ CAR(汽车)/ SHIP(船舶)/ OTHER_TRANSPORTATION(其他交通工具)

船舶等级枚举(transportation_classes) ​

SHIP_FIRST_CLASS_CABIN(一等舱)/ SHIP_SECOND_CLASS_CABIN(二等舱)/ SHIP_THIRD_CLASS_CABIN(三等舱)

仅当 transportation_type=SHIP 时可选填,其他交通工具类型必须为空字符串或不传。

响应示例 ​

与 3.3 完全一致。


冲红发票 ​

POST /api/v3/invoice/reverse(需要鉴权)

请求参数 ​

参数必填类型说明
channel否stringWECHAT(默认)/ALIPAY
fapiao_apply_id是string蓝票申请单号
reverse_reason是string冲红原因(中文或枚举均可,自动映射),见下方枚举说明
fapiao_information是array需要冲红的发票信息数组,至少 1 条
└─ fapiao_number是string发票号码
└─ fapiao_id否string商户发票单号

响应示例 ​

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "fapiao_apply_id": "2024092400152012650023728099",
    "red_fapiao_apply_id": "API202409231000006501_R",
    "channel": "ALIPAY",
    "status": "申请已提交,等待开票结果回调"
  }
}
字段说明
red_fapiao_apply_id红票申请单号
fapiao_apply_id蓝票申请单号
channelALIPAY 或 WECHAT
status状态说明

查询发票 ​

GET /api/v3/invoice/query(需要鉴权)

请求参数(Query String) ​

参数必填类型说明
channel否stringWECHAT(默认)/ALIPAY
fapiao_apply_id是string发票申请单号
fapiao_id否string发票 ID

响应格式 ​

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "fapiao_apply_id": "API202609231000006501",
    "channel": "WECHAT",
    "total_count": 1,
    "invoices": [],
    "summary": {}
  }
}

顶层字段 ​

字段类型说明
fapiao_apply_idstring申请单号
channelstringWECHAT / ALIPAY
total_countint发票数量
invoicesarray发票详情列表
summaryobject汇总统计

invoices[] 字段 ​

字段类型说明
fapiao_idstring发票 ID
statusstring统一映射状态,见本节末尾状态枚举
channelstring固定 WECHAT / ALIPAY
total_amountint价税合计(单位:分;红票为负)
total_amount_yuanstring价税合计(元,保留 2 位小数)
tax_amountint税额(单位:分)
tax_amount_yuanstring税额(元)
amountint不含税金额(单位:分)
amount_yuanstring不含税金额(元)
blue_fapiaoobject/null蓝票信息:fapiao_code(发票代码,数电发票为空)、fapiao_number(发票号码)、fapiao_time(开票时间)
red_fapiaoobject/null红票信息
seller_informationobject销售方信息:名称、税号、地址、电话、开户行、账号
buyer_informationobject购买方信息:类型、名称、税号、地址、电话、开户行、账号
extra_informationobject附加信息:drawer(开票人);支付宝另有 checker(复核人)和 payee(收款人)
itemsarray发票明细行,字段见下表
remarkstring发票备注
error_codestring开票失败错误码(成功时为空)
error_messagestring开票失败原因
pdf_file_urlstring发票 PDF 直链,仅支付宝
invoice_datestring发票日期 Y-m-d H:i:s,仅支付宝

items[] 字段 ​

字段类型说明
tax_codestring税收分类编码
goods_namestring商品/服务名称
specification / unitstring规格/单位(支付宝通常为空字符串)
quantitynumber数量(8 位以内小数;支付宝明细无原值时为 0)
unit_pricenumber单价,单位为分(支付宝明细无原值时为 0)
amount / amount_yuanint/string单行金额(分/元;红票为负)
tax_amount / tax_amount_yuanint/string单行税额(分/元)
total_amount / total_amount_yuanint/string单行价税合计(分/元)
tax_ratenumber税率(小数,如 0.13 = 13%)
tax_rate_displaystring格式化显示,如 13.00%
tax_prefer_markstring优惠政策标识
is_discountbool是否折扣行

summary 字段 ​

字段类型说明
total_countint总数
issued_countint已开票数
reversed_countint已冲红数
issue_failed_countint开票失败数
reverse_failed_countint冲红失败数
processing_countint处理中数(ISSUE_ACCEPTED + REVERSE_ACCEPTED)
total_amount_yuanstring价税合计净额(元,红票会扣减)
tax_amount_yuanstring税额合计(元,红票会扣减)

完整响应示例(微信 + 支付宝合并) ​

下面 JSON 同时展示微信与支付宝两种响应,差异字段以文字说明两通道取值差异。

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "fapiao_apply_id": "API202609231000006501",
    "channel": "WECHAT",
    "total_count": 1,
    "invoices": [
      {
        "fapiao_id": "1fa6c5654a06440b00c74bd8c1a4d9da",
        "status": "ISSUED",
        "channel": "WECHAT",
        "total_amount": -2,
        "total_amount_yuan": "-0.02",
        "tax_amount": 0,
        "tax_amount_yuan": "0.00",
        "amount": -2,
        "amount_yuan": "-0.02",
        "blue_fapiao": {
          "fapiao_code": "",
          "fapiao_number": "26527200000014930822",
          "fapiao_time": "2026-09-24 17:42:24"
        },
        "red_fapiao": null,
        "seller_information": {
          "name": "贵州正数科技有限公司",
          "taxpayer_id": "91520115MAAL2J8WXL",
          "address": "",
          "telephone": "",
          "bank_name": "",
          "bank_account": ""
        },
        "buyer_information": {
          "type": "INDIVIDUAL",
          "name": "张亮(个人)",
          "taxpayer_id": "",
          "address": "",
          "telephone": "",
          "bank_name": "",
          "bank_account": ""
        },
        "extra_information": {
          "drawer": "**亮 6012",
          "checker": "",
          "payee": ""
        },
        "items": [
          {
            "tax_code": "3040203000000000000",
            "goods_name": "信息系统服务",
            "specification": "",
            "unit": "",
            "quantity": 1,
            "unit_price": "2",
            "amount": -2,
            "amount_yuan": "-0.02",
            "tax_amount": 0,
            "tax_amount_yuan": "0.00",
            "total_amount": -2,
            "total_amount_yuan": "-0.02",
            "tax_rate": "0.01",
            "tax_rate_display": "1.00%",
            "tax_prefer_mark": "NO_FAVORABLE",
            "is_discount": false
          }
        ],
        "remark": "",
        "error_code": "",
        "error_message": "",
        "pdf_file_url": "https://mdn.alipayobjects.com/aliinvoicecore/uri/file/as/tcn/15d13b2b3b084b58a493e2bfc752df0b/invoice_26527200000014930822.pdf",
        "invoice_date": "2026-09-24 17:42:24"
      }
    ],
    "summary": {
      "total_count": 1,
      "issued_count": 1,
      "reversed_count": 0,
      "issue_failed_count": 0,
      "reverse_failed_count": 0,
      "processing_count": 0,
      "total_amount_yuan": "-0.02",
      "tax_amount_yuan": "0.00"
    }
  }
}

关键差异速查表(仅 query 接口相关字段) ​

字段WECHATALIPAY
data.channelWECHATALIPAY
invoices[].channelWECHATALIPAY
invoices[].extra_information.drawer微信脱敏值通常为空
invoices[].extra_information.checker/payee不存在空字符串
invoices[].pdf_file_url不存在PDF 直链
invoices[].invoice_date不存在Y-m-d H:i:s
invoices[].items[].quantity/unit_price有值0
invoices[].items[].tax_prefer_markNO_FAVORABLE 等空
invoices[].buyer_information.name(个人)原名自动追加“(个人)”
invoices[].buyer_information.taxpayer_id(个人)可能为身份证号空
invoices[].blue_fapiao.fapiao_time可能为 null始终返回
红票场景金额正负total_amount/amount 为正数红票为负数,蓝票为正数

行为差异 ​

  • 微信通道:调用微信查询接口拉取最新发票状态;本地缺失的发票记录会自动幂等补齐(重复查询不会产生重复数据);若返回成功(status=ISSUED),同步推进申请单状态为 issued。
  • 支付宝通道:调用支付宝查询接口拉取最新发票详情;本地缺失的发票记录会自动幂等补齐;若返回成功(INVOICE_SUCCESS),同步推进申请单状态为 issued。重复调用不会产生重复数据。

发票 status 字段枚举(统一对外) ​

值含义微信原始 status支付宝 invoice_status
ISSUE_ACCEPTED开票中ISSUE_ACCEPTEDINVOICE_PROCESSING
ISSUED已开具ISSUEDINVOICE_SUCCESS
REVERSE_ACCEPTED冲红中REVERSE_ACCEPTED-
REVERSED已冲红REVERSED-
ISSUE_FAILED开票失败ISSUE_FAILEDINVOICE_FAILED
REVERSE_FAILED冲红失败REVERSE_FAILED-

下载发票 ​

GET /api/v3/invoice/download(需要鉴权)

请求参数(Query String) ​

参数必填类型说明
channel否stringWECHAT(默认)/ALIPAY
fapiao_apply_id是string发票申请单号
fapiao_id否string商户发票单号(精确指定)
file_format否string文件格式(微信:pdf/ofd/xml;支付宝仅支持 pdf),默认 pdf
as_file否int0(默认):返回 JSON + base64;1:直接返回文件流下载

响应 JSON 格式(默认 as_file=0) ​

json
{
  "code": 0,
  "msg": "success",
  "data": {
    "content": "JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9MZW5ndGgg...",
    "filename": "26527200000073173922_贵州正数科技有限公司_0.02元.pdf",
    "mime": "application/pdf",
    "size": 45678,
    "fapiao_id": "1fa6c5654a06440b00c74bd8c1a4d9da",
    "status": "ISSUED",
    "channel": "WECHAT"
  }
}
字段说明
content文件内容的 base64 编码
filename文件名格式:{发票号码}_{销售方名称}_{金额}元.{格式}
mimeMIME 类型
size文件字节数
fapiao_id实际下载的发票单号(微信根据本地记录推断;支付宝为 invoice_apply_id)
status发票状态
channelWECHAT / ALIPAY

服务端回调通知 ​

服务端回调通知的配置与具体字段,请以商户接入配置及实际回调数据为准。