深圳税局已停止微信区块链电子发票接口服务(即系统原有的 new-tax-control-fapiao 业务),现有发票功能将全部切换至航信(票慧通)乐企版 v5.1 电子发票平台。
替换范围:所有发票开具、查询、下载、状态跟踪功能。
不受影响:微信支付、退款、订单管理、充电业务等。
旧流程(微信区块链发票):
用户选订单 → 获取微信抬头填写URL → 用户在微信小程序填抬头
→ 微信回调通知 → 管理员审核开票 → 微信开具 → 微信回调 → 下载
新流程(航信电子发票):
用户选订单 + 填写抬头信息 → 管理员审核 → 航信开具
→ 系统轮询结果 → 自动发邮件 / 下载
| 事项 | 旧(微信) | 新(航信) |
|---|---|---|
| 抬头收集 | 用户跳转微信小程序填写 → 异步回调 | 用户申请时在 App 内直接填写 |
| 开票触发 | 调用微信 fapiao-applications API |
调用航信 openBlueInvoice API |
| 结果获取 | 微信主动回调 /invoice/notify |
系统每 5 分钟轮询航信查询 |
| 发票文件 | 微信临时链接(30 秒有效) | 永久 PDF / OFD / XML 链接 |
| 邮件发送 | 不支持 | 开票成功后自动发送到用户邮箱 |
| 发票红冲 | 微信 API | 航信 openRedInvoice API |
| 端点 | 状态 | 说明 |
|---|---|---|
POST /invoice/applyInvoice |
变更 | 返回值从 TitleUrl 改为 Invoice 对象 |
POST /invoice/notify |
移除 | 航信为轮询模式,不再需要回调 |
POST /invoice/titleWriteNotice |
移除 | 抬头信息在申请时直接提交 |
GET /invoice/downloadInvoice/{id} |
保留 | 改为返回航信 PDF/OFD/XML URL |
GET /invoice/list |
不变 | 用户发票列表 |
GET /finance/handleInvoice/{id} |
变更 | 后端改为调用航信开票 |
GET /finance/downloadInvoice/{id} |
变更 | 改为返回航信下载链接 |
GET /finance/getUserTitle/{applyId} |
移除 | 航信无此概念 |
GET /finance/getInvoice/{applyId} |
变更 | 改为查询本地 InvoiceDetail 表 |
GET /finance/listInvoice |
不变 | 管理端发票列表 |
GET /finance/export/invoiceList |
不变 | 发票导出 |
GET /finance/confirmManualInvoice/{id} |
不变 | 手动确认开票 |
在 application.yml 中添加(admin 和 miniapp 模块均需配置):
huapiaoer:
app-secret: 票慧通提供的appsecret
nsrsbh: 开票方税号(商家税号)
b2cshopid: 商家税号(同 nsrsbh)
wechat.fapiao.* 配置暂保留但不再使用,后续可清理。
执行 database/7.sql:
-- 发票详情增加下载链接字段
ALTER TABLE charge_admin.t_invoice_detail
ADD COLUMN IF NOT EXISTS invoice_url VARCHAR(512) COMMENT '发票PDF下载地址',
ADD COLUMN IF NOT EXISTS ofd_url VARCHAR(512) COMMENT '发票OFD下载地址',
ADD COLUMN IF NOT EXISTS xml_url VARCHAR(512) COMMENT '发票XML下载地址';
-- 发票抬头管理:增加默认抬头字段
ALTER TABLE charge_app.t_invoice_title
ADD COLUMN IF NOT EXISTS is_default TINYINT(1) DEFAULT 0 COMMENT '是否默认抬头';
t_invoice 表结构不变,数据兼容t_invoice_detail 数据不受影响| 文件 | 说明 |
|---|---|
common/.../config/HuapiaoerProperties.java |
航信配置属性类 |
service/.../miniapp/HuapiaoerInvoiceService.java |
航信开票业务封装 |
| 文件 | 变更摘要 |
|---|---|
service/pom.xml |
新增 huapiaoer-sdk:5.1.0 依赖 |
admin/.../application-dev.yml |
新增 huapiaoer 配置块 |
admin/.../application-prod.yml |
新增 huapiaoer 配置块 |
miniapp/.../application-dev.yml |
新增 huapiaoer 配置块 |
miniapp/.../application-prod.yml |
新增 huapiaoer 配置块 |
entity/.../InvoiceDetail.java |
新增 invoiceUrl/ofdUrl/xmlUrl 字段 |
service/.../InvoiceService.java |
applyInvoice() 返回值改为 Invoice |
service/.../InvoiceServiceImpl.java |
申请时直接保存抬头信息 |
service/.../InvoiceDetailService.java |
移除微信 updateInvoiceDetail 方法 |
service/.../InvoiceDetailServiceImpl.java |
移除微信发票详情更新逻辑 |
service/.../WxPayService.java |
移除全部 10 个发票方法声明 |
service/.../WxPayServiceImpl.java |
移除全部发票实现及依赖注入 |
miniapp/.../InvoiceController.java |
简化接口,移除回调端点 |
admin/.../FinanceController.java |
改为调用航信服务 |
admin/.../InvoiceStatusJob.java |
轮询航信替代微信,频率 5 分钟 |
miniapp/.../SaTokenConfigure.java |
移除 /invoice/notify 等免认证路径 |
appSecret、确认商家税号(nsrsbh / b2cshopid)执行数据库 DDL:
ALTER TABLE charge_admin.t_invoice_detail
ADD COLUMN invoice_url VARCHAR(512) COMMENT '发票PDF下载地址',
ADD COLUMN ofd_url VARCHAR(512) COMMENT '发票OFD下载地址',
ADD COLUMN xml_url VARCHAR(512) COMMENT '发票XML下载地址';
application-*.yml 中填写 huapiaoer.app-secret、huapiaoer.nsrsbh、huapiaoer.b2cshopidhttps://erp.huapiaoer.com(默认值,无需额外配置)# 1. 安装 huapiaoer-sdk 到本地
mvn install -pl huapiaoer-sdk -DskipTests
# 2. 编译全部模块
mvn compile -pl huapiaoer-sdk,entity,common,service,admin,miniapp
# 3. 打包部署
mvn package -DskipTests
如需回退到旧系统(如微信接口恢复):
替换微信的抬头管理能力,改为充电桩系统自行管理。
| 端点 | 方法 | 说明 |
|---|---|---|
GET /invoice/title/list |
GET | 当前用户的抬头列表(默认抬头排前) |
GET /invoice/title/{id} |
GET | 查看单个抬头详情 |
POST /invoice/title |
POST | 新增抬头 |
PUT /invoice/title/{id} |
PUT | 修改抬头 |
DELETE /invoice/title/{id} |
DELETE | 删除抬头 |
PUT /invoice/title/{id}/default |
PUT | 设为默认抬头 |
| 任务 | 旧频率 | 新频率 | 说明 |
|---|---|---|---|
InvoiceStatusJob |
每天 18:00 | 每 5 分钟 | 轮询航信查询开票结果,更新状态并自动发送邮件 |
code != "200"):抛出 HuapiaoerException,前端提示错误信息HuapiaoerException(code=500),定时任务会在下一轮重新处理