发票二维码解析
1. 简介
1.1 案例简介
发票二维码解析插件专为企业财税场景设计,一键扫描发票左上角二维码,精准解析发票代码、发票号码、开票日期、价税合计等关键字段,彻底告别手工录入错漏烦恼,助力报销审核、进项税认证、电子归档等场景的管理效率,让发票数据从纸面到系统全程零误差流转,筑牢企业财税合规的数字防线。
1.2 业务背景
小微企业财务报销场景中,财务人员需要提炼发票的部分关键信息,并进行发票复核做账。然而传统发票管理中存在以下核心痛点:
- 人工低效录入,拖慢业务流转;
- 信息错漏频发,合规风险暗藏;
- 系统割裂孤立,企业管控成本高;
- 技术赋能缺位,人力瓶颈难以突破。
1.3 设计思路
1)新建「扫码采集发票」表单,用于扫描并录入用户提供的发票二维码;
2)开发自建插件「发票二维码解析」,用于识别并解析二维码。具体包括:
- 设置请求参数「发票二维码」,确保能够获取到用户提供的发票二维码;
- 设置返回参数,将通过代码识别并解析出的发票信息返回给用户;
- 进行代码设计,识别并解析用户提供的发票信息。
3)在表单中设置前端事件/智能助手/流程节点,调用自建插件「发票二维码解析」,从而实现将解析出的发票信息回写在表单中的效果。
1.4 预期效果
利用「发票二维码解析」插件,财务人员只需扫描发票左上角的二维码,即可提取关键字段并回填相关信息。能够快速的、准确的批量采集发票信息,核对金额。效果如下所示:
2. 表单搭建
在学习之前建议安装 发票二维码解析应用模板,本文将按照模板中的示例数据进行讲解。
新建「扫码采集发票」表单,所需字段及字段设置如下:
字段名称 | 字段类型 | 字段设置 |
请扫描或输入发票二维码内容 | 单行文本 | 在「字段属性 >> 扫码」处勾选扫码输入 |
是否识别发票信息 | 按钮 | —— |
发票代码 | 单行文本 | |
发票号码 | ||
开票日期 | ||
发票金额 | ||
校验码后六位 |

3. 自建插件设计
3.1 新建自建插件
在「开放平台 >> 开发者后台 >> 自建插件」处,点击「新建插件」,并在「插件设计」页面中修改自建插件的名字为「发票二维码解析」。

3.2 前端解析发票二维码
1)新增前端函数
点击左下角的「新增函数」,选择「前端扩展」,并修改函数名称为「前端解析发票二维码」。

2)设计请求参数
点击「请求参数」,在页面中添加并设置字段控件,如下所示:
字段名称 | 字段类型 | 字段设置 |
发票二维码 | 单行文本 | 在右侧字段信息处,修改 ID 为 invoice_qrcode |

3)设计返回参数
点击「返回参数」,添加 5 个返回参数,并进行如下设置:
- 发票代码:设置 ID 为「invoice_code」,类型为「any」;
- 发票号:设置 ID 为「invoice_number」,类型为「any」;
- 发票代码:设置 ID 为「invoice_date」,类型为「any」;
- 发票代码:设置 ID 为「invoice_amount」,类型为「any」;
- 发票代码:设置 ID 为「invoice_check_code」,类型为「any」;

4)编辑代码
请求参数和返回参数都设计完成后,点击「代码」进入代码编辑页面。代码示例如下所示:

const invoice_qrcode = triggerConf['invoice_qrcode']
if(!invoice_qrcode){
return { invoice_code: '发票二维码内容不能为空' }
}
const invoice_qrcode_array = invoice_qrcode.replaceAll(',',',').split(',')
if (invoice_qrcode_array.length > 7) {
return { invoice_code: invoice_qrcode_array[2], invoice_number: invoice_qrcode_array[3], invoice_date: invoice_qrcode_array[5], invoice_amount: invoice_qrcode_array[4], invoice_check_code: invoice_qrcode_array[6] ? invoice_qrcode_array[6].slice(-6):'' }
}
return { invoice_code: '发票二维码格式不正确'}3.3 后端解析发票二维码
设置后端解析发票二维码时,仅需在左下角新增函数为「后端函数 >> Node.js 20」,请求参数和返回参数的设置与「前端解析发票二维码」函数一致,故本节仅说明「后端解析发票二维码」中代码的编辑。
请求参数和返回参数都设计完成后,点击「代码」进入代码编辑页面。代码示例如下所示:

//let invoice_qrcode = _.get(triggerConf, ['invoice_qrcode']);
let invoice_qrcode = triggerConf['invoice_qrcode']
if(!invoice_qrcode){
throw new Error('发票二维码内容不能为空');
}
const invoice_qrcode_array = invoice_qrcode.replaceAll(',',',').split(',')
if (invoice_qrcode_array.length > 7) {
return { invoice_code: invoice_qrcode_array[2], invoice_number: invoice_qrcode_array[3], invoice_date: invoice_qrcode_array[5], invoice_amount: invoice_qrcode_array[4], invoice_check_code: invoice_qrcode_array[6] ? invoice_qrcode_array[6].slice(-6):'' }
}
throw new Error('发票二维码格式不正确');3.4 保存并启用
参数和代码都设计完成后,点击右上角的「保存」按钮,并返回至「自建插件」页面中,打开「发票二维码解析」右侧开关,即可启用插件。

4. 调用插件
4.1 添加按钮执行动作
进入「扫码采集发票」表单中,点击「是否开始计算」按钮,在「字段属性 >> 执行动作」处点击「设置」,添加一个前端事件。

4.2 设置前端事件和说明
添加好前端事件后,首先设置前端事件的基础信息,即事件名称和事件说明,用于区分前端事件。设置完成后,点击「下一步」。

4.3 设置执行动作
设置执行动作如下:
- 选择插件:选择「发票二维码解析 >> 前端解析发票二维码」插件;
- 字段值:设置为「字段值」,即「请扫描或输入发票二维码内容」字段;
- 字段存储关系:点击添加按钮,进行如下设置:
- 将「发票代码」的值存储到「发票代码」中;
- 将「发票号」的值存储到「发票号」中;
- 将「开票日期」的值存储到「开票日期」中;
- 将「发票金额」的值存储到「发票金额」中;
- 将「校验码后六位」的值存储到「校验码后六位」中。
全部设置完成后,点击「保存」按钮。

4.4 效果演示
效果参见本文【1.3 预期效果】。
5. 共创伙伴
由衷感谢个人共创伙伴伍一为简道云平台贡献的自建插件案例!以低代码+轻量级的创新模式,精准击破手工录入效率低等问题,为小微企业财税管理赋新能。期待未来持续共建企业服务新生态!
立即探索自建插件,解锁属于您的数字化创新力!

400-111-0890
在线咨询