Appearance
正数闪票 乐企开票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 | { ... } | [ ... ]
}| 字段 | 类型 | 说明 |
|---|---|---|
code | int | 0=成功;非 0=失败 |
msg | string | 成功返回 success,失败返回错误描述 |
data | object/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_token | JWT 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 | 否 | string | INDIVIDUAL(个人)/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 | 否 | string | COMM_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 |
channel | ALIPAY 或 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 | 否 | string | WECHAT(默认)/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 | 蓝票申请单号 |
channel | ALIPAY 或 WECHAT |
status | 状态说明 |
查询发票
GET /api/v3/invoice/query(需要鉴权)
请求参数(Query String)
| 参数 | 必填 | 类型 | 说明 |
|---|---|---|---|
channel | 否 | string | WECHAT(默认)/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_id | string | 申请单号 |
channel | string | WECHAT / ALIPAY |
total_count | int | 发票数量 |
invoices | array | 发票详情列表 |
summary | object | 汇总统计 |
invoices[] 字段
| 字段 | 类型 | 说明 |
|---|---|---|
fapiao_id | string | 发票 ID |
status | string | 统一映射状态,见本节末尾状态枚举 |
channel | string | 固定 WECHAT / ALIPAY |
total_amount | int | 价税合计(单位:分;红票为负) |
total_amount_yuan | string | 价税合计(元,保留 2 位小数) |
tax_amount | int | 税额(单位:分) |
tax_amount_yuan | string | 税额(元) |
amount | int | 不含税金额(单位:分) |
amount_yuan | string | 不含税金额(元) |
blue_fapiao | object/null | 蓝票信息:fapiao_code(发票代码,数电发票为空)、fapiao_number(发票号码)、fapiao_time(开票时间) |
red_fapiao | object/null | 红票信息 |
seller_information | object | 销售方信息:名称、税号、地址、电话、开户行、账号 |
buyer_information | object | 购买方信息:类型、名称、税号、地址、电话、开户行、账号 |
extra_information | object | 附加信息:drawer(开票人);支付宝另有 checker(复核人)和 payee(收款人) |
items | array | 发票明细行,字段见下表 |
remark | string | 发票备注 |
error_code | string | 开票失败错误码(成功时为空) |
error_message | string | 开票失败原因 |
pdf_file_url | string | 发票 PDF 直链,仅支付宝 |
invoice_date | string | 发票日期 Y-m-d H:i:s,仅支付宝 |
items[] 字段
| 字段 | 类型 | 说明 |
|---|---|---|
tax_code | string | 税收分类编码 |
goods_name | string | 商品/服务名称 |
specification / unit | string | 规格/单位(支付宝通常为空字符串) |
quantity | number | 数量(8 位以内小数;支付宝明细无原值时为 0) |
unit_price | number | 单价,单位为分(支付宝明细无原值时为 0) |
amount / amount_yuan | int/string | 单行金额(分/元;红票为负) |
tax_amount / tax_amount_yuan | int/string | 单行税额(分/元) |
total_amount / total_amount_yuan | int/string | 单行价税合计(分/元) |
tax_rate | number | 税率(小数,如 0.13 = 13%) |
tax_rate_display | string | 格式化显示,如 13.00% |
tax_prefer_mark | string | 优惠政策标识 |
is_discount | bool | 是否折扣行 |
summary 字段
| 字段 | 类型 | 说明 |
|---|---|---|
total_count | int | 总数 |
issued_count | int | 已开票数 |
reversed_count | int | 已冲红数 |
issue_failed_count | int | 开票失败数 |
reverse_failed_count | int | 冲红失败数 |
processing_count | int | 处理中数(ISSUE_ACCEPTED + REVERSE_ACCEPTED) |
total_amount_yuan | string | 价税合计净额(元,红票会扣减) |
tax_amount_yuan | string | 税额合计(元,红票会扣减) |
完整响应示例(微信 + 支付宝合并)
下面 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 接口相关字段)
| 字段 | ALIPAY | |
|---|---|---|
data.channel | WECHAT | ALIPAY |
invoices[].channel | WECHAT | ALIPAY |
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_mark | NO_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_ACCEPTED | INVOICE_PROCESSING |
ISSUED | 已开具 | ISSUED | INVOICE_SUCCESS |
REVERSE_ACCEPTED | 冲红中 | REVERSE_ACCEPTED | - |
REVERSED | 已冲红 | REVERSED | - |
ISSUE_FAILED | 开票失败 | ISSUE_FAILED | INVOICE_FAILED |
REVERSE_FAILED | 冲红失败 | REVERSE_FAILED | - |
下载发票
GET /api/v3/invoice/download(需要鉴权)
请求参数(Query String)
| 参数 | 必填 | 类型 | 说明 |
|---|---|---|---|
channel | 否 | string | WECHAT(默认)/ALIPAY |
fapiao_apply_id | 是 | string | 发票申请单号 |
fapiao_id | 否 | string | 商户发票单号(精确指定) |
file_format | 否 | string | 文件格式(微信:pdf/ofd/xml;支付宝仅支持 pdf),默认 pdf |
as_file | 否 | int | 0(默认):返回 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 | 文件名格式:{发票号码}_{销售方名称}_{金额}元.{格式} |
mime | MIME 类型 |
size | 文件字节数 |
fapiao_id | 实际下载的发票单号(微信根据本地记录推断;支付宝为 invoice_apply_id) |
status | 发票状态 |
channel | WECHAT / ALIPAY |
服务端回调通知
服务端回调通知的配置与具体字段,请以商户接入配置及实际回调数据为准。
