2026年,制造业数字化转型进入深水区。工信部数据显示,92% 的制造企业已经部署了 ERP/MES/WMS 等核心业务系统,但这些系统几乎无一例外都有一个共同痛点——只能在 PC 端使用,车间操作工、现场巡检员、仓库管理员的日常作业仍然依赖纸质单据和 Excel。小程序凭借"无需安装、即用即走、手机扫码即可使用"的特性,成为打通"ERP 后台数据 ↔ 车间现场操作"的较优前台载体。而这一切的核心就是:小程序如何安全、稳定地对接 ERP/MES 系统?
赢式科技深耕工业数字化 16 年,累计交付了 45 个 ERP/MES 对接项目,覆盖用友 U8C/YonBIP、金蝶星空云/K3Cloud、宝信 BX500、博科、SAP Business One 等国内外主流 ERP 产品。本文将我们沉淀的 3 种对接方案选型、安全架构设计、真实案例数据整理出来,帮你在面对工业小程序 ERP 对接需求时做出正确决策。
一、为什么要让小程序对接 ERP?
先搞清楚业务场景:一个没有 ERP 对接的"纯扫码报工小程序",操作工扫完码、填完产量、点提交——数据只存在小程序自己的数据库里,还需要人工或定时任务导出到 ERP 再二次录入。这个流程的典型问题:
- 数据滞后:报工数据滞后 1-48 小时,管理层看到的生产数据是"昨天的"。
- 数据不一致:小程序里的报工数量和 ERP 里的实际入库数量对不上,月底对账要花好几天。
- 重复录入:财务/统计文员需要把小程序导出的 Excel 再录入 ERP,纯体力活且易错。
- 无法闭环:操作工报工后不知道工单状态、不知道自己的产量是否合格,体验割裂。
对接 ERP 后,整个流程变成:操作工扫码 → 小程序调用 ERP 接口获取工单详情 → 录入产量/不良品 → 小程序调用 ERP 接口自动入库 → ERP 库存实时更新 → 管理层看到的就是实时、准确、闭环的数据。这就是为什么 85% 以上的工业小程序最终都会走向 ERP 对接——没有 ERP 对接的工业小程序,只是一个"高级表单工具",还没真正嵌入企业的生产运营体系。
二、方案一:REST API 接口
这是最理想也最推荐的对接方式——前提是你的 ERP 提供了开放 API。目前主流 ERP 的开放能力情况:
| ERP 产品 | 开放 API 支持 | 覆盖模块 | 文档质量 |
|---|---|---|---|
| 用友 U8C / YonBIP | ✅ 支持 Restful API | 采购/库存/销售/生产/财务 | 中等(部分接口文档需申请后获取) |
| 金蝶星空云 / K3Cloud | ✅ 支持 OpenAPI | 全模块覆盖 | 较好(开发者平台在线文档) |
| 宝信 BX500 | ⚠️ 部分支持 | 生产/库存模块有 API | 较差(主要靠实施团队提供) |
| SAP Business One | ✅ 支持 Service Layer API | 全模块覆盖 | 优秀(SAP 官方开发者文档) |
| 自研/老旧 ERP | ❌ 无开放 API | - | 需联系原开发商评估 |
2.1 REST API 对接架构
架构设计上,我们会在 ERP 和小程序之间加一个 中间件层(也叫"API 网关"或"集成中台"),而不是让小程序直接调 ERP API。原因有三:
- 安全隔离:ERP 数据库是企业最核心的数据资产,相对不能暴露在公网上。中间件部署在企业内网(或 DMZ 区),对外只暴露经过严格鉴权的接口。
- 协议转换:不同 ERP 的 API 规范差异很大(有的用 JSON、有的用 XML、有的需要签名),中间件负责统一封装成一套标准接口给小程序调用。
- 功能增强:中间件可以叠加缓存、限流、熔断、日志等能力,ERP 挂了不会直接影响小程序使用。
2.2 技术实现示例(Python + FastAPI)
# 中间件:统一封装用友 U8C 的工单查询接口
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import requests
app = FastAPI()
class WorkOrderResponse(BaseModel):
order_no: str
product_name: str
plan_qty: int
completed_qty: int
status: str
# 用友 U8C API 配置(内网地址,不对外暴露)
U8C_API_BASE = "http://u8c-internal:8080/api"
U8C_TOKEN = "your-u8c-api-token"
@app.get("/api/workorder/{order_no}", response_model=WorkOrderResponse)
async def get_workorder(order_no: str):
"""对外暴露的标准接口:查询工单详情"""
# 1. 调用用友 U8C 内部 API
headers = {"Authorization": f"Bearer {U8C_TOKEN}"}
resp = requests.get(
f"{U8C_API_BASE}/production/workorder/{order_no}",
headers=headers, timeout=10
)
if resp.status_code != 200:
raise HTTPException(status_code=502, detail="ERP 接口调用失败")
data = resp.json()
# 2. 数据格式转换 + 清洗
return WorkOrderResponse(
order_no=data["WorkOrderCode"],
product_name=data["ProductName"],
plan_qty=int(data["PlanQuantity"]),
completed_qty=int(data["CompletedQuantity"]),
status={"0":"待生产","1":"生产中","2":"已完成"}.get(data["Status"],"未知")
)
@app.post("/api/workorder/report")
async def report_production(report_data: dict):
"""报工接口:写入 ERP"""
payload = {
"WorkOrderCode": report_data["order_no"],
"ReportQuantity": report_data["qty"],
"DefectQuantity": report_data["defect_qty"],
"Operator": report_data["operator"],
"ReportTime": report_data["report_time"]
}
resp = requests.post(
f"{U8C_API_BASE}/production/report",
json=payload, headers=headers, timeout=10
)
return {"result": resp.json()}
2.3 REST API 方案优缺点
| 优点 | 缺点 |
|---|---|
| ✅ 实时性较好(毫秒级响应) | ❌ 依赖 ERP 有开放 API(宝信等老旧系统可能没有) |
| ✅ 数据一致性高(直接操作 ERP) | ❌ 对接周期长(平均 2-4 周) |
| ✅ 架构清晰、易维护 | ❌ 需 ERP 厂商/内部 IT 配合开放接口 |
| ✅ 双向同步(可读可写) | ❌ ERP 升级后可能需要重新适配 |
赢式科技建议:优先选择 REST API 方案。只要 ERP 有开放 API,其他两种方案都是退而求其次的选择。赢式科技已沉淀了用友、金蝶、SAP 三套标准中间件模板,新项目可以直接复用,开发效率提升 50%。
三、方案二:数据库只读视图(中间库)
当 ERP 没有开放 API 或 API 文档不可用时,数据库只读视图是最常用的替代方案。核心思路:在 ERP 数据库上创建一组"只读视图",通过视图把 ERP 的业务数据"喂"给小程序后端,小程序写入的数据则通过一个独立的写入中间库,再由 ERP 定时任务从中间库拉取写入。
3.1 架构设计
整个流程分为"读"和"写"两条链路:
- 读链路(ERP → 小程序):ERP 主库(只读权限)→ 创建 View 视图(过滤敏感字段、格式转换)→ 小程序后端定时/实时从视图拉取数据 → 小程序展示给用户。
- 写链路(小程序 → ERP):用户在小程序提交报工数据 → 写入中间库(独立的 MySQL/SQL Server)→ ERP 定时任务(触发器/存储过程/Java 定时 Job)从中间库读取 → 写入 ERP 主库。
3.2 真实案例:宝信 BX500 ERP 对接
案例:上海某大型装备制造企业——客户 ERP 是宝信 BX500(典型的"老旧系统",几乎没有开放 API,厂商也不配合开发)。赢式科技采用了数据库只读视图方案:
读链路:
- 客户 DBA 在 BX500 数据库上创建只读账号,只授予 SELECT 权限,指定几个关键表(工单表 workorder、产品表 product、物料表 material)。
- 赢式科技在 ERP 数据库上创建 8 张只读 View,比如工单视图
V_MP_WORKORDER:把 ERP 里的拼音字段名(gdcode, gdlx, gdzj)转换成易懂的英文、过滤掉已作废工单、关联产品名称。 - 小程序后端用 SQLAlchemy 直接查询这些 View,返回 JSON 给前端。
写链路:
- 赢式科技搭建一个独立的 MySQL 中间库,建
t_report_workorder表存储报工数据(工单号、产量、不良品、操作工、时间戳)。 - 客户 DBA 在 BX500 里写了一个存储过程,每 5 分钟运行一次,从 MySQL 中间库读取新数据、转换格式、写入 BX500 生产报工表。
- 写入完成后给中间库的记录打标记
is_synced = 1,避免重复读取。
3.3 数据库只读视图方案优缺点
| 优点 | 缺点 |
|---|---|
| ✅ 不依赖 ERP API,通用性强 | ❌ 需要 DBA 配合创建只读账号和视图 |
| ✅ 对 ERP 几乎零侵入(只读不写) | ❌ 写链路有延迟(通常 5-30 分钟) |
| ✅ 技术栈简单、调试方便 | ❌ ERP 表结构变更需要同步修改视图 |
| ✅ 开发周期较短(1-3 周) | ❌ 需要客户 IT 团队长期维护 |
四、方案三:消息队列同步(Kafka / RabbitMQ)
这是三种方案中技术含量较高但也最稳定可靠的一种,适合对数据一致性、系统稳定性要求极高的大型项目。核心思路:ERP 产生数据变化时"发布"一条消息到消息队列,小程序后端作为消费者实时接收并更新自己的本地缓存;小程序产生数据时发布消息到队列,ERP 作为消费者实时写入。
4.1 典型架构
┌─────────────────┐ 写消息 ┌─────────────────┐ 消费消息 ┌─────────────────┐
│ ERP 主库 │ ───────────→ │ Kafka/RabbitMQ │ ───────────→ │ 小程序本地缓存 │
│ (发布者 Publisher)│ │ (消息队列 Broker)│ │ (消费者 Consumer)│
└─────────────────┘ └─────────────────┘ └─────────────────┘
↑
┌─────────────────┐ 写消息 ┌─────────────────┐ 消费消息 │
│ 小程序前端 │ ───────────→ │ 小程序后端 API │ ────────────────────┘
│ (用户扫码报工) │ │ │
└─────────────────┘ └────────┬────────┘
│ 写消息
↓
┌─────────────────┐
│ Kafka/RabbitMQ │
│ (反向通道) │
└────────┬────────┘
│ 消费消息
↓
┌─────────────────┐
│ ERP 数据写入服务│
└─────────────────┘
4.2 适用场景
- 数据量大:日活用户超过 1000、单日报工记录超过 5000 条的项目。
- 对延迟敏感:要求小程序下单后 ERP 库存 秒级更新,不能有 5-30 分钟延迟。
- 多系统联动:除了 ERP,还需要同时对接 MES、WMS、PLM 等多个系统,消息队列可以作为统一的"数据总线"。
- 高可用要求:ERP 升级或维护期间,小程序可以继续正常使用本地缓存,消息队列会在 ERP 恢复后自动补传。
4.3 消息队列方案优缺点
| 优点 | 缺点 |
|---|---|
| ✅ 双向实时同步(秒级) | ❌ 技术复杂度高,需要运维消息队列 |
| ✅ 系统解耦、各系统独立可演进 | ❌ 开发周期长(4-8 周) |
| ✅ 天然支持离线恢复、消息幂等 | ❌ 对团队技术能力要求高 |
| ✅ 高吞吐、高可用 | ❌ 小型项目杀鸡用牛刀 |
五、三种方案对比与选型建议
| 对比维度 | 方案一:REST API | 方案二:数据库视图 | 方案三:消息队列 |
|---|---|---|---|
| 开发周期 | 2-4 周 | 1-3 周 | 4-8 周 |
| 对接成本(增量报价) | ¥8,000-20,000 | ¥5,000-12,000 | ¥15,000-40,000 |
| 数据实时性 | 毫秒级 ⭐⭐⭐⭐⭐ | 5-30 分钟 ⭐⭐⭐ | 秒级 ⭐⭐⭐⭐⭐ |
| 技术复杂度 | 中 | 低 | 高 |
| 对 ERP 侵入性 | 中(调 API) | 低(只读视图) | 低(需发布消息) |
| 适合场景 | 有 API 的主流 ERP | 无 API 的老旧 ERP | 多系统联动/高并发 |
| 推荐度 | ⭐⭐⭐⭐⭐ 首选 | ⭐⭐⭐⭐ 备选 | ⭐⭐⭐ 特定场景 |
六、安全架构设计
ERP 里存储的是企业最核心的生产、库存、财务数据,对接时安全必须放在第一位。赢式科技每个 ERP 对接项目都会经过以下安全评审:
6.1 网络隔离架构
典型的三层网络架构:
- 公网层:微信小程序 → 云服务器(API 网关),只开放 443 端口(HTTPS)。
- DMZ 隔离区:中间件服务器(API 网关)部署在企业防火墙的 DMZ 区,有独立的 WAF 防护。
- 内网层:ERP 数据库完全不暴露在公网,只有 DMZ 区的中间件服务器能通过内网访问。
6.2 数据安全措施
- 传输加密:所有 API 调用强制 HTTPS,TLS 1.2 以上版本,禁用旧版 SSL。
- 鉴权机制:API 网关层统一鉴权,每个 ERP 接口使用独立的 AppKey/AppSecret + JWT Token,Token 有效期 2 小时、支持刷新。
- 最小权限原则:数据库只读账号只授予 SELECT 权限、且只授予业务必需的几个表和视图,禁止授予系统表权限。
- 敏感字段脱敏:中间件层对员工身份证号、客户银行账号等敏感字段做脱敏处理后再返回给小程序。
- 操作审计日志:所有 ERP 数据写入操作(报工、入库、发货等)都会记录操作人、操作时间、操作内容,日志保留 1 年以上,支持按工单号/操作工追溯。
- 限流熔断:API 网关配置每个员工每分钟最多 10 次请求、整个小程序集群每秒最多 500 次请求,防止恶意攻击或程序 Bug 导致 ERP 过载。
七、赢式科技 ERP 对接完整案例
7.1 项目概况
客户:上海某大型装备制造企业(3 个工厂、8 个车间、1200+ 操作工)
ERP 系统:宝信 BX500(老旧系统,无开放 API)
对接方案:方案二(数据库只读视图 + 中间库),部分模块叠加方案一(BX500 有少量可调用的接口)
总工期:14 周(含 2 周接口摸底、4 周方案设计、4 周开发、2 周联调、2 周现场测试 + 上线)
合同额:¥86,000
7.2 对接的 ERP 模块清单
| 业务场景 | 方向 | 对接方式 | 对接的数据内容 |
|---|---|---|---|
| 工单详情查询 | ERP → 小程序(读) | 数据库只读视图 | 工单号、产品名称、计划数量、工艺路线、物料清单 |
| 生产报工录入 | 小程序 → ERP(写) | 中间库 + 定时存储过程 | 实际产量、不良品数量、操作工、报工时间 |
| 库存查询 | ERP → 小程序(读) | 数据库只读视图 | 物料编码、库存数量、库位、批次 |
| 物料领用申请 | 小程序 → ERP(写) | 中间库 + ERP 接口 | 领用人、物料清单、数量、申请原因 |
| 工单状态回写 | 小程序 → ERP(写) | 中间库 + 定时任务 | 工单从"生产中"到"已完成"的状态变更 |
| 日产量统计看板 | ERP → 小程序(读) | 数据库只读视图 + 聚合查询 | 各车间/产线日产量、OEE 计算、不良率 |
7.3 上线效果
- 报工数据实时可查:管理台上看到的生产数据延迟从 1-2 天缩短到 5 分钟以内。
- OEE 提升 12%:操作工报工更及时,车间主管能快速发现瓶颈工序、调整排班。
- 人工统计时间减少 80%:原来统计员每天要花 2 小时从 Excel/纸质单据录入 ERP,现在系统自动同步。
- 月底对账零误差:小程序和 ERP 数据自动同步,不再出现"两边对不上"的情况。
- 操作工体验改善:工单信息自动推送、扫码即可操作、产量异常实时提醒,员工满意度明显提高。
八、实施步骤与工期预估
一个典型的 ERP 对接项目,赢式科技会按以下 8 步推进:
- 接口摸底(1-2 周):与客户 IT 团队一起评估 ERP 系统的接口开放情况、数据库表结构、现有集成能力,输出《ERP 接口摸底报告》。
- 方案设计(1-2 周):根据摸底结果选择较优对接方案、输出技术架构图、与客户安全团队一起过安全评审。
- UI 设计 + 后端开发(3-4 周,并行):UI 设计师完成小程序所有页面;后端工程师同步开发中间件 + 小程序 API。
- 前端开发(2-3 周):小程序前端页面开发 + 中间件接口联调。
- ERP 联调(2-4 周):与客户 IT 团队一起调试 ERP 接口、数据库视图、定时任务——这是最容易延期的阶段,需要双方密切配合。
- 现场测试(1-2 周):在真实车间环境测试弱网场景、多人同时报工、异常数据处理。
- 试点上线(1 周):先在 1 个车间试点,收集反馈、快速迭代。
- 全员推广 + 培训(1-2 周):分批推广到所有车间,提供操作工/班组长/管理员三级培训。
总工期预估:12-20 周(取决于 ERP 系统的老旧程度和客户 IT 团队的配合速度)。赢式科技会在接口摸底后给出精确工期预估。
结语:ERP 对接是工业小程序的"终极形态"
没有 ERP 对接的工业小程序,本质上还是一个"信息孤岛"——它只是 ERP 之外多了一套数据,增加了一线员工的工作量。而真正做好 ERP 对接的小程序,是 ERP 向车间现场的自然延伸:操作工用自己最熟悉的手机扫一下码,数据自动流转到后端,不需要额外录入、不需要再跑到电脑前查工单。这就是数字化的真正含义——让数据驱动业务,而不是让人搬运数据。
如果你正在规划工业小程序、正在为 ERP 对接方案发愁,赢式科技可以帮你从接口摸底、方案选型、架构设计到开发联调,一站式搞定。
联系方式:
- 电话咨询:15001875806(工作日 9:00-18:00)
- 在线咨询:点击免费咨询赢式科技工程师
