CitiusTech-Test/eventflow-payment-service
GitHub: CitiusTech-Test/eventflow-payment-service
一个故意包含货币处理 bug 的 FastAPI 支付服务,用于演示事件驱动架构中的自动化事件响应与 AI 修复流程。
Stars: 0 | Forks: 0
# EventFlow 支付服务
EventFlow 事件驱动架构演示中的 **系统 2**。
这是一个 FastAPI 服务,用于消费来自 Azure Service Bus 的 `OrderCreated` 事件并处理支付。该服务包含一个针对无小数货币(JPY、KRW)的已知 bug,用于演示本次事件响应的叙事流程。
## 架构角色
```
Azure Service Bus → [Payment Service] → Payment Processing
↓
Application Insights
↓
Alert Rule (on error spike)
↓
Devin API (investigate + fix)
```
## 功能
- 用于 `OrderCreated` 事件的 Azure Service Bus 消费者
- 带有货币转换的支付处理
- 健康检查和就绪检查 endpoint
- 带有 correlation ID 的结构化日志
- 用于 Azure Monitor 的 OpenTelemetry 指标监控
## Bug(演示叙事)
支付处理器在将金额从最小货币单位转换为显示金额时,会直接除以 100(假设所有货币都有两位小数)。这对于 USD、EUR、GBP 是有效的,但对于像 JPY 和 KRW 这样**无小数位的货币则会失败**,因为它们的金额已经是基本单位。
当收到一笔 JPY 订单时:
- 金额 `15800`(日元)会被除以 100 → `158.00`
- 校验要求金额 ≥ 显示货币中的最小计费单位
- 转换后的金额未能通过下游的一致性检查 → **未处理的异常**
此 bug 是故意存在于 `main` 分支上的,用于演示:
1. CI 测试通过(因为它们只覆盖了 USD/EUR)
2. 输入 JPY 时在生产环境中崩溃
3. Devin AI 调查日志并提交修复 PR
## 技术栈
- Python 3.11+
- FastAPI
- Azure Service Bus SDK
- OpenTelemetry + Azure Monitor
- Pydantic v2
## 本地开发
```
pip install poetry
poetry install
cp .env.example .env
# 使用您的值编辑 .env
# 运行服务
poetry run uvicorn app.main:app --reload --port 8002
# 运行测试
poetry run pytest -v
```
## 环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
| `AZURE_SERVICEBUS_CONNECTION_STRING` | Service Bus 连接字符串 | *(必填)* |
| `AZURE_SERVICEBUS_QUEUE_NAME` | 订单事件的队列名称 | `order-events` |
| `APPLICATIONINSIGHTS_CONNECTION_STRING` | App Insights 连接字符串 | *(可选)* |
| `LOG_LEVEL` | 日志级别 | `INFO` |
| `ENVIRONMENT` | 部署环境 | `development` |
## API Endpoint
| 方法 | 路径 | 描述 |
|---|---|---|
| `GET` | `/health` | 健康检查 |
| `GET` | `/ready` | 就绪检查 |
| `GET` | `/api/payments` | 列出已处理的支付 |
| `GET` | `/api/payments/{payment_id}` | 根据 ID 获取支付信息 |
## Docker
```
docker build -t eventflow-payment-service .
docker run -p 8002:8002 --env-file .env eventflow-payment-service
```
标签:API集成, AV绕过, Azure Service Bus, FastAPI, Python, 事件驱动, 可观测性, 支付处理, 无后门, 用户代理, 请求拦截, 逆向工具