财务提了个需求,说每月手工开票几百张太累,想让业务系统直接开数电票。技术这边一查才发现,这事不是调个 REST 接口那么简单,前置条件和资质比代码本身麻烦得多。

先分清要对接哪一套

现在主流是全面数字化的电子发票,也就是数电票,走各省电子税务局的开放平台或乐企平台。老一点的金税盘、税务 UKey 开票方式还在过渡期,接口形态完全不同。乐企直连适合开票量大的企业,需要税务端审批。通道选错,代码写完也接不上。

接入前必须先有的东西

  • 企业资质:营业执照、税务登记信息齐全,纳税信用等级通常要求在 B 级以上。
  • 实名与授权:法人或财务负责人要在电子税务局完成实名,给经办人员授权。
  • 应用登记:在开放平台创建应用,拿到 appKey 和 appSecret,配置回调地址和 IP 白名单。
  • 数字证书:部分接口要求签名,证书由税务端或第三方 CA 签发。

接口的基本形状

鉴权一般是先用 appKey 和 appSecret 换 access_token,有效期两小时左右,过期要重新取,别每次请求都换。业务接口围绕发票生命周期:开具、红冲、查询、下载 OFD 或 PDF。开具时提交购方信息、商品明细、税率、含税标志,返回发票号码和版式文件地址。红冲要带原发票代码号码和红冲原因。

最容易返工的三处

商品和服务税收分类编码填错,开出来校验不过,只能作废重开。金额是含税还是不含税搞反,税额差一分钱也会被退回。签名串拼接顺序错一个字段,就报签名验证失败,而错误信息往往不告诉你是哪个字段。上线前用沙箱把一张票从开到冲完整跑一遍,比看十遍文档有效。

自研还是找服务商

开票量小、只要标准票种,用第三方开票服务省事,按张或按年付费,税务政策变化由对方跟进。开票量大、有特殊票种、要和 ERP 深度耦合,就自己接。自研的前期成本主要在资质和联调,代码量反而不大,别低估沟通周期。

上线后要盯的指标

开票成功率、平均耗时、失败原因分布。税局接口偶尔会维护,业务侧要有重试和补偿,别让订单卡在已付款未开票的状态。发票文件下载要走异步,OFD 生成不是秒回。每月申报期前后调用量会明显上升,限流阈值要留出余量。

取舍:先算清楚每月开票量和票种复杂度,量小别自研,量大别长期依赖中间商。字段和税务规则一变,被动的是自己。