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。原因有三:

  1. 安全隔离:ERP 数据库是企业最核心的数据资产,相对不能暴露在公网上。中间件部署在企业内网(或 DMZ 区),对外只暴露经过严格鉴权的接口。
  2. 协议转换:不同 ERP 的 API 规范差异很大(有的用 JSON、有的用 XML、有的需要签名),中间件负责统一封装成一套标准接口给小程序调用。
  3. 功能增强:中间件可以叠加缓存、限流、熔断、日志等能力,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多系统联动/高并发
推荐度⭐⭐⭐⭐⭐ 首选⭐⭐⭐⭐ 备选⭐⭐⭐ 特定场景
赢式科技选型建议 能用 REST API 就不用数据库视图,能用数据库视图就不用消息队列——简单的方案更稳定、维护成本更低。赢式科技 45 个 ERP 对接项目中,方案一(REST API)占 55%、方案二(数据库视图)占 35%、方案三(消息队列)占 10%。

六、安全架构设计

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. 接口摸底(1-2 周):与客户 IT 团队一起评估 ERP 系统的接口开放情况、数据库表结构、现有集成能力,输出《ERP 接口摸底报告》。
  2. 方案设计(1-2 周):根据摸底结果选择较优对接方案、输出技术架构图、与客户安全团队一起过安全评审。
  3. UI 设计 + 后端开发(3-4 周,并行):UI 设计师完成小程序所有页面;后端工程师同步开发中间件 + 小程序 API。
  4. 前端开发(2-3 周):小程序前端页面开发 + 中间件接口联调。
  5. ERP 联调(2-4 周):与客户 IT 团队一起调试 ERP 接口、数据库视图、定时任务——这是最容易延期的阶段,需要双方密切配合。
  6. 现场测试(1-2 周):在真实车间环境测试弱网场景、多人同时报工、异常数据处理。
  7. 试点上线(1 周):先在 1 个车间试点,收集反馈、快速迭代。
  8. 全员推广 + 培训(1-2 周):分批推广到所有车间,提供操作工/班组长/管理员三级培训。

总工期预估:12-20 周(取决于 ERP 系统的老旧程度和客户 IT 团队的配合速度)。赢式科技会在接口摸底后给出精确工期预估。

结语:ERP 对接是工业小程序的"终极形态"

没有 ERP 对接的工业小程序,本质上还是一个"信息孤岛"——它只是 ERP 之外多了一套数据,增加了一线员工的工作量。而真正做好 ERP 对接的小程序,是 ERP 向车间现场的自然延伸:操作工用自己最熟悉的手机扫一下码,数据自动流转到后端,不需要额外录入、不需要再跑到电脑前查工单。这就是数字化的真正含义——让数据驱动业务,而不是让人搬运数据

如果你正在规划工业小程序、正在为 ERP 对接方案发愁,赢式科技可以帮你从接口摸底、方案选型、架构设计到开发联调,一站式搞定。

联系方式: