Lorenzo-Benvenuti/transport-ticketing-and-payment-system

GitHub: Lorenzo-Benvenuti/transport-ticketing-and-payment-system

一个基于 PHP/MySQL 的双服务交通票务与模拟支付平台,通过 Docker 容器化部署并集成 CI 流水线,演示完整的购票与支付 Webhook 交互流程。

Stars: 1 | Forks: 0

# 交通票务与支付系统 (SFT + PaySteam) [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/8d/8d182fb3ba02d973ee5853a3a4115a73c4e417f89c363421bed1313dbc62bd2c.svg)](https://github.com/Lorenzo-Benvenuti/Transport-Ticketing-and-Payment-System/actions/workflows/php-lint.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Docker Compose](https://img.shields.io/badge/Docker-Compose-blue.svg)](docker-compose.yml) [![PHP](https://img.shields.io/badge/PHP-8.2%2B-777bb4.svg)](#tech-stack) 一个仓库包含两个全栈 **PHP + MySQL** Web 应用程序: - **SFT** — 公共交通票务系统(路线/时刻表、购票、管理/运营后台) - **PaySteam** — 支付/钱包系统(消费者仪表板、商户专区、签名回调模拟) ## 概述 - 双服务架构(票务 + 支付提供商模拟器) - 基于 Webhook 的确认机制(PaySteam → SFT),带有 HMAC 签名验证 - 明确区分 PUBLIC 与 INTERNAL base URL(Docker 内部的浏览器与服务器到服务器通信) - 可重现的本地设置(Docker Compose + DB 初始化脚本) - 通过 GitHub Actions 实现基础自动化(lint/测试) ## 技术栈 - PHP(面向过程) - MySQL - Apache - Docker Compose(推荐) - XAMPP(受支持,但支付演示需要额外配置) ## 项目结构 - `sft/` — SFT 应用程序 - `paysteam/` — PaySteam 应用程序 - `docker/` — Docker Compose + MySQL 初始化脚本 - `docs/` — PDF(项目报告) ## 快速开始(推荐使用 Docker) ### 太长不看 ``` cp sft/.env.example sft/.env cp paysteam/.env.example paysteam/.env docker compose up -d --build ``` ### 1) 创建 env 文件 复制示例文件: - `sft/.env.example` → `sft/.env` - `paysteam/.env.example` → `paysteam/.env` ### 2) 启动容器 从仓库根目录开始: ``` docker compose up -d --build ``` ### 3) 打开应用 - SFT: http://localhost:8080/sft/public/index.php - PaySteam: http://localhost:8080/paysteam/public/index.php ### URL 配置参考 (Docker) | 变量 | 应用 | 使用者 | 示例 | 备注 | |---|---|---|---|---| | `PUBLIC_BASE_URL` | SFT | 浏览器重定向/返回 URL | `http://localhost:8080/sft` | Docker 暴露的主机/端口 | | `INTERNAL_BASE_URL` | SFT | PaySteam → SFT webhook(服务器到服务器) | `http://localhost/sft` | 在 `php` 容器内部(端口 80) | | `PAYSTEAM_BASE_URL` | SFT | SFT → PaySteam API/result(服务器到服务器) | `http://localhost/paysteam` | 在 `php` 容器内部(端口 80) | | `PAYSTEAM_MERCHANT_EMAIL` | SFT | 商户在 PaySteam 上的身份 | `esercente@paysteam.it` | 必须在 PaySteam 中存在且角色为 `esercente` | | `APP_BASE_URL` | Paysteam | 向浏览器展示的 URL | `http://localhost:8080/paysteam` | Docker 暴露的主机/端口 | ### 4) 重置 DB(如果您需要重新开始) ``` docker compose down -v docker compose up -d --build ``` ## 演示凭据 ### SFT - 管理员: `admin@sft.it` / `admin123` - 运营人员: `responsabile@sft.it` / `responsabile123` - 乘客: `utente@example.com` / `utente123` ### PaySteam - 消费者: `utente@example.com` / `utente123` - 商户: `esercente@paysteam.it` / `merchant123` ## 注意事项 SFT 结账流程通过 HTTP 调用和返回/webhook URL 与 PaySteam 模拟器相连。 - **Docker(推荐):** 开箱即用(示例包含适合 Docker 的正确 PUBLIC 与 INTERNAL base URL)。 - **XAMPP:** 您必须在 `sft/.env` 和 `paysteam/.env` 中设置 base URL 为您本地的 Apache URL(通常是 `http://localhost/...`)。 另请注意:演示支付流程通过 **email** 解析用户(推荐),以避免跨数据库的 ID 耦合。请确保两个应用中存在相同的 email(种子数据为:`utente@example.com`)。 ## 安全说明 这是一个模拟项目。它包含了基本的安全实践(prepared statements、密码哈希、基于环境变量的密钥、强化的 session cookies),但目前**尚不适用于生产环境**。 ## 架构概述 ``` +------------------+ HTTP (API/redirect) +------------------+ | SFT (Ticketing) | ---------------------------> | PaySteam (PSP) | | - orders/tickets | | - payments | | - backoffice | <--------------------------- | - webhook sender | +------------------+ Signed webhook/callback +------------------+ | | MySQL (init scripts) v +--------+ | DB | +--------+ ``` 该仓库包含两个通过 HTTP 进行通信的 PHP Web 应用。 - **SFT**(票务应用):管理用户、路线/时刻表以及结账流程。 - **PaySteam**(支付模拟器):提供消费者/商户仪表板和模拟支付 API。 ### 支付流程(宏观层面) 1. 用户在 **SFT** 上开始结账。 2. **SFT** 通过服务器到服务器调用在 **PaySteam** 上创建一笔交易。 3. 浏览器被重定向到 **PaySteam** 以批准/拒绝支付。 4. **PaySteam** 通过签名的 webhook 通知 **SFT**。 5. 用户返回到 **SFT** 确认页面(返回 URL)。 **注意:为了确保交易成功,用户必须首先在两个应用程序(SFT 和 Pay Steam)上使用相同的账户登录。** 包含的安全机制: - Prepared statements(缓解 SQLi) - 密码哈希 - 基于环境变量的密钥(API token + webhook 密钥) - 来自 PaySteam 的 HMAC 签名回调 ## 截图 **SFT — 结账** SFT 结账 **PaySteam — 支付审批** PaySteam 审批
更多截图
SFT — Dashboard
SFT — Ticket Section
SFT — Admin Backoffice
SFT — Operations Backoffice
PaySteam — Dashboard
PaySteam — User Dashboard
PaySteam — Transactions
## License MIT
标签:Docker Compose, ffuf, OpenVAS, PHP, Webhook, 力导向图, 支付平台, 版权保护, 票务系统