Documentation
描述
Halo 支付插件 (Plugin Payment) - 详细版
功能完备的一站式支付解决方案,为 Halo 博客生态提供企业级支付能力。

目录
概述
Halo 支付插件是专为 Halo 博客系统设计的支付管理解决方案。插件采用现代化架构设计,支持响应式编程模型,提供完整的支付生命周期管理能力。
设计理念
- 统一接口:所有支付渠道通过统一的 PaymentService 接口抽象,降低接入成本
- 可扩展性:基于 Halo 扩展点机制,支持自定义支付渠道开发
- 安全优先:多层安全校验机制,保障交易安全
- 商户生态:内置完整的商户管理平台,支持多商户运营模式
功能特性
核心功能
| 功能模块 | 说明 |
|---|---|
| 多渠道支付 | 支持 8 大支付渠道,16+ 种支付方式 |
| 商户平台 | 完整的商户入驻、审核、管理系统 |
| 结算系统 | 自动/手动结算,灵活的费率配置 |
| 提现管理 | 多账户提现,完整审核流程 |
| 数据统计 | 实时交易概览,多维度数据分析 |
| 事件通知 | 支付状态变更实时通知 |
| 定时任务 | 自动同步支付状态,定时结算 |
支付能力
- 发起支付(明文/加密)
- 查询支付状态
- 关闭支付订单
- 异步回调处理
- 支付状态同步

支付渠道详解
国内支付
支付宝
- 当面付 (FACE_TO_FACE_PAYMENT):适用于线下扫码支付场景
- 手机网站支付 (QUICK_WAP_WAY):适用于移动端网页支付
- 电脑网站支付 (FAST_INSTANT_TRADE_PAY):适用于 PC 端网页支付
配置项:appId、应用私钥、支付宝公钥、sellerId

微信支付
- 原生支付 (WECHATPAY_NATIVE):生成二维码,用户扫码支付
- H5 支付 (WECHATPAY_H5):移动端浏览器内调起微信支付
- JSAPI 支付 (WECHATPAY_JSAPI):微信公众号/小程序内支付
配置项:appId、商户号、商户私钥证书、APIv3 证书序列号

聚合支付平台
易支付
- 支持支付宝、微信两种支付方式
- 通过接口地址对接第三方易支付平台
- 支持 MD5/RSA 签名方式

源支付
- 支持支付宝、微信两种支付方式
- 通过接口地址对接第三方源支付平台
- 支持 MD5/RSA 签名方式

虎皮椒
- 支持支付宝、微信两种支付方式
- 通过 appId/appSecret 对接
- 支持 MD5 签名方式

国际支付
PayPal
- 支持 Checkout 支付流程
- 支持沙箱/Live 环境切换
- 支持多币种配置
- 支持 Webhook 签名验证
配置项:clientId、clientSecret、WebhookId

Stripe
- 支持 Checkout 支付流程
- 支持 Webhook 签名验证
- 支持优惠码配置
- 支持账单地址收集
配置项:secretKey、publishableKey、webhookSecret

自定义支付
- 通用支付接口,支持对接任意支付平台
- 支持 MD5/RSA 签名方式
- 可配置回调地址、查询接口等
商户平台
功能概述
商户平台是插件内置的多商户管理系统,支持商户入驻、审核、结算、提现等完整业务流程。

商户入驻
- 用户在用户中心提交入驻申请
- 填写商户信息(名称、业务类型、联系方式等)
- 平台管理员审核申请
- 审核通过后商户激活

商户状态
| 状态 | 说明 |
|---|---|
| PENDING | 待审核 |
| ACTIVE | 已激活 |
| REJECTED | 已拒绝 |
| SUSPENDED | 已停用 |
商户管理
- 商户信息编辑
- 商户状态管理
- 商户专属费率配置
- 商户提现账户管理(支持支付宝/微信/银行卡)

结算系统
结算方式
自动结算
- 通过 Cron 表达式配置结算周期
- 默认每月 1 日执行
- 系统自动计算待结算订单并生成结算记录
手动结算
- 管理员可手动触发结算
- 支持按商户或按订单 ID 结算
- 立即生成结算记录

结算配置
- 系统默认手续费率
- 商户专属手续费率
- 结算周期配置
- 结算审核开关
结算状态
| 状态 | 说明 |
|---|---|
| PENDING | 待结算 |
| SUCCESS | 已结算 |
| FAILED | 结算失败 |
提现管理
提现流程
- 商户提交提现申请
- 系统校验可提现余额
- 冻结提现金额
- 管理员审核(可选)
- 处理提现打款
- 提现完成/失败

提现账户
支持多种提现账户类型:
- 支付宝
- 微信
- 银行卡

提现状态
| 状态 | 说明 |
|---|---|
| PENDING_AUDIT | 待审核 |
| APPROVED | 已批准 |
| REJECTED | 已拒绝 |
| PROCESSING | 处理中 |
| COMPLETED | 已完成 |
| FAILED | 已失败 |
安全机制
签名验证
每个支付渠道都有独立的签名验证机制:
| 渠道 | 签名方式 |
|---|---|
| 支付宝 | RSA2 签名 + SDK 验签 |
| 微信支付 | APIv3 证书签名 + NotificationParser 验签 |
| 易支付/源支付 | MD5/RSA 签名 |
| 虎皮椒 | MD5 签名 |
| PayPal | Webhook 签名验证 API |
| Stripe | HmacSHA256 Webhook 签名 |
数据校验
- 金额校验:回调时校验支付金额与本地记录一致
- appId/sellerId 校验:支付宝回调二次校验
- 订单重复检测:发起支付前检查是否已存在相同订单
- URL 安全校验:回调地址必须是外网可访问、非私有 IP
防重机制
- 防重复通知:通过注解标记已通知状态
- 防重复支付:订单号唯一性校验
- 并发控制:定时任务禁止并发执行
系统架构
技术栈
- 后端:Java 21 + Spring WebFlux (响应式)
- 前端:Vue 3 + Tailwind CSS + Vite
- 构建:Gradle 多模块
模块结构
plugin-payment/
├── api/ # API 模块 - 接口定义、支付服务实现
├── app/ # 应用模块 - 主类、端点、事件、调度
├── ui/ # 前端模块 - Vue 3 管理界面
└── api-docs/ # OpenAPI 文档
核心组件
- PaymentService:支付服务接口,各渠道实现
- DirectPaymentProvider:支付路由,分发请求到对应渠道
- PaymentInfoReconciler:支付状态协调器,发布事件
- PaymentScheduleRegistrar:定时任务注册器
- PaymentNotifyService:通知服务
扩展点
payment-service:支付服务扩展点,支持自定义支付渠道payment-provider:支付提供器扩展点,为其他插件提供支付能力
配置说明
通用设置
- 密钥对管理(RSA)
- 回调域名配置
- 支付超时时间
- 定时任务频率
- 通知用户配置
- 支付渠道选择

支付渠道设置
每个支付渠道独立配置:
- 启用/禁用开关
- 渠道参数(appId、密钥等)
- 沙箱/生产环境切换
商户平台设置
- 平台启用开关
- 入驻开关
- 商户角色配置
- 开户费设置
- 结算配置
- 协议条款管理
- 业务类型管理
