简电云 | OCPP 1.6 充电桩平台基于扩展协议实现 POS 机本地对接

简介: 本文详解本地POS与充电桩的协同方案:通过OCPP 1.6管控充电,V1.8协议处理刷卡支付,POS Adapter实现协议转换与统一订单状态机。强调职责分离、幂等设计、断网补偿及安全合规,助力园区、车队等场景快速落地本地支付能力。

一、为什么要做本地 POS 对接

传统 OCPP 充电流程通常是“扫码进入 App—创建订单—远程启动”。在园区、车队、酒店和海外站点,用户更习惯直接在设备旁刷信用卡。POS 本地对接的关键是:支付动作发生在桩旁,OCPP 仍然负责桩的连接和充电控制,平台负责订单、风控和最终结算。

两套协议的职责应明确分开:

层次 协议 主要职责
充电控制 OCPP 1.6(WebSocket) BootNotification、心跳、状态、RemoteStartTransaction、RemoteStopTransaction、计量值和交易事件
支付交互 信用卡充电扩展协议 V1.8(桩内网/串口或 TCP) 插卡/挥卡、预授权、扣款、撤销、终端结果和离线流水
平台内部 POS Adapter 统一模型 把 V1.8 报文转换为订单和支付状态,提供幂等、重试和审计

不要让 POS 直接调用 OCPP 数据库,也不要让桩端自行计算最终应收金额。桩端只上送计量和交易事件,金额由平台根据费率和结算规则计算,POS 只负责持卡人认证和支付结果。

二、推荐架构

信用卡/手机
    |
POS 终端 --(V1.8)--> 充电桩控制器 --(OCPP 1.6/WebSocket)--> OCPP 网关
                                      |                         |
                                      +-------------------------+
                                                订单服务
                                                   |
                                     支付适配器 / 收单机构 / 对账服务

POS Adapter 建议部署在 OCPP 网关或站点边缘服务中,向南提供 V1.8 的同步/异步报文接口,向北调用订单服务和支付渠道。平台至少保存四类标识:stationId、connectorId、transactionId、paymentId。任何重试都使用原始交易号和支付号,不能重新生成订单。

三、把 V1.8 映射为统一支付模型

不同版本的协议表可能使用不同的命令码和字段名,接入时先建立一张“协议字段—平台字段”映射表。建议统一为以下模型:

平台字段 含义 来源/生成时机
requestId 请求流水,保证报文幂等 平台生成,原样回传
terminalId POS 终端号 V1.8 终端信息
stationId / connectorId 站点和枪口 OCPP 连接上下文
transactionId OCPP 充电交易号 StartTransaction.conf
paymentId 支付渠道流水 预授权或扣款成功后生成
amount 金额,最小货币单位 平台费率计算
meterStart / meterStop 起止表底 OCPP 计量值
resultCode POS/渠道结果码 V1.8 响应
mac/sign 报文完整性校验 V1.8 安全字段

金额、时间和枚举值必须按 V1.8 的长度、编码、补零和字节序实现。适配器不要直接把协议字符串传入订单库,而应先做长度校验、字符集转换、枚举白名单校验,再落库。

四、完整业务流程

1. 终端上线

POS 启动后发送 V1.8 登录/签到报文,平台校验终端号、站点绑定和协议版本,返回成功响应。OCPP 侧桩完成 BootNotification 并进入 Available。平台只有在两侧都在线时才允许开始支付。

2. 预授权与创建订单

用户在 POS 上选择枪口或输入充电金额,POS 发起预授权请求。平台先检查枪口状态、费率、黑名单和并发订单,再调用收单渠道。预授权成功后创建订单,状态置为 AUTHORIZED,并通过 OCPP RemoteStartTransaction 启动充电。

建议采用“平台生成启动令牌”的方式关联两条链路:idTag = POS-{requestId}。收到 StartTransaction.conf 后,将 OCPP 返回的 transactionId 写回订单;如果启动被拒绝,立即撤销预授权。

3. 充电中

平台监听 MeterValues、StatusNotification 和心跳,按固定周期刷新已用电量和预估金额。POS 可通过 V1.8 查询报文显示“充电中、已充电量、预估金额”,但展示数据不是最终结算依据。

4. 停止、结算与签购单

用户在 POS 按停止、拔枪,或平台根据预授权上限停止交易。平台发送 RemoteStopTransaction,并等待桩上送 StopTransaction.req;平台取该请求中的 meterStop 和停止原因计算最终金额,回复 StopTransaction.conf 后再调用渠道完成扣款或部分撤销。

扣款成功后,订单变为 COMPLETED,平台通过 V1.8 返回支付结果、金额、授权码和凭证信息;扣款失败时订单进入 PAYMENT_RETRY,不能把充电订单直接标记为成功。重复的停止通知、支付回调和 POS 查询都必须返回同一最终结果。

五、状态机和幂等设计

推荐的订单状态如下:

CREATED -> AUTHORIZING -> AUTHORIZED -> CHARGING
                                      |       |
                                  STOPPING <-+
                                      |
                              SETTLING -> COMPLETED
                                  |          |
                             PAYMENT_RETRY  REFUNDING

每个外部请求建立幂等键:terminalId + requestId + operation。数据库对该组合建立唯一索引,并保存原始请求、响应、协议版本和时间戳。处理重试时先查幂等表,已成功则直接返回历史响应,处理中则返回“处理中”,避免重复扣款。

状态迁移必须使用条件更新,例如只有 AUTHORIZED 才能进入 CHARGING,只有 STOPPING 才能进入 SETTLING。这样即使 OCPP 消息乱序,也不会把已完成订单回退到充电中。

六、断网、超时和异常处理

  1. POS 到平台断网:桩端缓存 V1.8 流水和计量摘要,使用递增序号;网络恢复后按序补传。补传接口仍使用原 requestId,平台按幂等规则处理。
  2. OCPP 断线:平台将订单置为 CHARGING_UNKNOWN。OCPP 1.6 没有标准的交易状态查询命令,桩重连后应结合补传的 StopTransaction、StatusNotification、后续 MeterValues,或双方约定的 DataTransfer 查询扩展核对状态;不能仅凭 WebSocket 断开就结算。
  3. 预授权成功但启动失败:执行撤销;撤销也要有独立幂等号,并进入对账队列等待渠道确认。
  4. 停止成功但扣款超时:保留订单和计量数据,进入 PAYMENT_RETRY,按指数退避重试,超过阈值转人工/风控队列。
  5. 重复扣款风险:支付请求必须携带原支付号和商户订单号,渠道超时后先查询再重试,禁止盲目重新发起扣款。

七、实现要点

协议适配器

适配器分为编解码、校验、业务路由三层。编解码只处理 V1.8 的定长/变长字段和校验码;校验层负责版本、长度、终端绑定、时间窗和签名;业务路由把命令转换成 AuthorizePayment、StartCharge、StopCharge、SettlePayment 等内部命令。这样未来升级协议时,不需要改订单状态机。

OCPP 关联

保存 connectorId 和 transactionId 的双向索引。RemoteStart 发出后设置超时定时器;在超时窗口内收到 StartTransaction.conf 才确认启动。停止时先记录“停止意图”,再发送 RemoteStop,最后以 StopTransaction.req 的最终表底为准。

安全

全链路使用 TLS(或站点专用安全隧道),V1.8 的 MAC/签名密钥按终端独立管理,密钥不得写入日志。日志中对 PAN、磁道数据、有效期和 CVV 做脱敏;平台只保存支付渠道返回的令牌、授权码和末四位。生产环境启用重放保护:校验时间戳、流水号和 nonce,并拒绝过期报文。

八、测试清单

  • 正常刷卡、预授权、启动、充电、停止、扣款全流程。
  • POS 重发同一请求、平台重复回调、OCPP 消息乱序。
  • 预授权成功但桩拒绝启动、拔枪停止、急停和桩离线。
  • 扣款超时、撤销失败、部分退款和对账补单。
  • 断网缓存、恢复补传、重启恢复和跨时区时间处理。
  • 非法长度、错误签名、过期流水、未知命令码和不支持的协议版本。

上线前建议用沙箱渠道跑完至少一轮“成功、失败、超时、重试、冲正”五类交易,并把 POS 原始报文、OCPP 原始报文、订单事件和渠道流水放在同一条可检索链路中。

九、结语

OCPP 1.6 负责“桩能否充电”,信用卡扩展协议负责“持卡人能否完成支付”。通过 POS Adapter 做协议隔离,以统一订单状态机串联预授权、充电和结算,再配合幂等、断网补偿和对账机制,就能在不修改 OCPP 核心实现的情况下,为现有充电桩平台增加本地刷卡能力。

实际落地时,请以《信用卡充电扩展协议 V1.8》中的命令码、字段长度、编码方式、校验算法和错误码表替换本文示例模型,并由收单机构确认 PCI DSS、预授权有效期及撤销规则。

相关文章
|
2月前
|
存储 NoSQL Linux
Agent 能力建设的完整方法论:从工具接入到自我进化的演进路径
本文提出企业级Agent落地的四阶段演进路径:工具接入(MCP协议)、记忆建设(检索增强)、协作扩展(多智能体)、自我进化(反思机制),强调Agent是系统工程而非提示词工程。每阶段配可验证检查清单,路径经工业实践检验,助力团队规避常见误区、清晰排期与验收。(239字)
|
2月前
|
存储 供应链 BI
数据权限怎么设计?库、表、行、列和指标权限一次讲清
企业数据权限远不止“建账号分权限”,需构建库、表、行、列、指标五层动态权限模型:库/表权划定业务边界,行权限按组织属性精准控数据范围,列权限依数据分级管控敏感字段,指标权限穿透公式与底表。结合RBAC+ABAC,实现“角色定能力、属性定范围”,并贯穿申请、审计、回收闭环治理。(239字)
|
2月前
|
存储 人工智能 自然语言处理
阿里云千问办公QwenWork产品解析:六大核心能力、典型适用场景、适配端口与最新活动介绍
本文主要介绍阿里云千问办公QwenWork这款AI Agent智能办公产品,解析其区别于传统单点AI工具的核心特征:依托通义千问大模型,实现多步任务自动拆解与闭环执行,覆盖文档创作、表格分析、PPT生成、企业知识库问答、多模态解析等全场景办公能力。同时详解其多端使用形态与新用户注册赠积分、企业版限时加赠等专属权益,展现AI办公从被动响应指令向主动执行工作流的行业演进趋势。
|
2月前
|
人工智能 自然语言处理 5G
云栖2026|从“单次触达”到“持续服务”:阿里云通信的 Agentic 演进
2026云栖大会“云通信”分论坛聚焦Agentic演进,发布新一代语音通信平台、Flow编排与5G消息智能交互方案,推动通信从“触达工具”升级为“理解需求、执行任务、持续服务”的业务增长入口。
404 0
|
2月前
|
监控 数据安全/隐私保护
员工桌面行为监控,到底该看什么?看行为,不是看屏幕
南通电商代运营公司60余人共处一室,客服日切程序200+次,却仅显示“在线”。传统管理难溯源低效环节。安企神提供全链路行为审计:精准记录程序使用、上网痕迹、文件操作;智能识别异常(流量超限、敏感词、高频拷贝);生成效率与风险分析报告。让“八小时去哪了”有据可查,助力精细化管理。
150 1
|
2月前
今日全国油价数据集:31 省 92#、95#、柴油价格整理
全国 31 省区市 2026-09-28 成品油零售参考价数据梳理,覆盖 89/92/95/98 号汽油与 0 号柴油,附各维度对比图。数据来源:万维易源今日油价接口。
224 0
|
2月前
|
人工智能
新 | 抖音短视频获客老师,麟哥抖音 5W1H 方法论教学复盘?
抖音获客新趋势下,麟哥(刘哲麟)首创5W1H短视频方法论:聚焦Who/What/When/Where/Why/How六大客户视角模块,摒弃泛流量,专攻精准询盘。适配工厂、建材等B端实体,强调“先定位、再拍摄”,结合AI提效,助力企业实现从自嗨到线索转化的落地突破。(239字)
|
2月前
|
弹性计算 人工智能 虚拟化
阿里云GPU服务器支持哪些GPU卡?如何收费?最新价格查询系统
阿里云GPU云服务器(EGS)支持L20、A10、V100等多款NVIDIA GPU,计费与ECS一致,涵盖计算资源、镜像、块存储、带宽及快照。支持包年包月、按量付费和抢占式实例,灵活适配AI训练、推理与渲染等场景。阿里云GPU服务器官网:https://t.aliyun.com/U/tbBeAi
225 1
|
2月前
|
缓存 运维 监控
简电云 | OCPP 1.6 充电桩平台基于 OCPI 2.3.0 实现 POS 云端对接方案
本文面向充电运营平台、支付终端服务商和后端研发人员,介绍如何在不改造 OCPP 1.6 充电桩通信协议的前提下,通过 OCPI 2.3.0 Payments 模块实现 POS 云端对接。方案覆盖终端绑定、费率展示、预授权、远程启动、会话同步、最终扣款、电子发票、异常补偿和安全合规,并给出 OCPI 与 OCPP 的字段映射及工程实现建议。
|
2月前
|
BI 网络安全
只允许访问特定网站,怎么做才能收得刚刚好?
佛山某卫浴出口厂投标前夜,员工用工作电脑访问竞品网站比价致信息泄露。复盘发现设备半年内频繁访问上百无关站点。老板真正需要的不是“拦坏站”,而是“只放行可信站点”——即白名单管控:精准授权、按岗分发、端口级防护、全程留痕、异常实时告警。
132 0