You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
v2.tiantianxinye.365care/AlipayAccount_MVC实现文档.md

312 lines
8.0 KiB

6 months ago
# AlipayAccount MVC 实现文档
## 📋 概述
本文档记录了参照 `WechatpayAccount` 模型创建 `AlipayAccount` 相关 MVC 组件的完整过程。
---
## ✅ 已完成的工作
### 1. 模型 (Model)
**文件位置**: `app/Models/AlipayAccount.php`
```php
<?php
namespace App\Models;
class AlipayAccount extends SoftDeletesModel
{
protected $table = "alipay_account";
}
```
**说明**:
- 继承 `SoftDeletesModel` 基类,支持软删除功能
- 映射数据表 `alipay_account`
- 自动包含时间戳和软删除字段
---
### 2. 控制器 (Controller)
**文件位置**: `app/Http/Controllers/Admin/AlipayAccountController.php`
```php
<?php
namespace App\Http\Controllers\Admin;
use App\Forms\AlipayAccountForm;
use App\Models\AlipayAccount;
use Illuminate\Http\Request;
class AlipayAccountController extends CommonController
{
public $bladePath = "admin.alipay-account";
public $urlPrefix = "admin/alipay-account";
public $modelName = "支付宝账号";
public $modelClass = AlipayAccount::class;
public $formClass = AlipayAccountForm::class;
public function index(Request $request)
{
$data = $this->model->paginate(10);
return view($this->bladePath . ".index", compact("data"));
}
}
```
**功能说明**:
- 继承 `CommonController`,自动获得 CRUD 功能
- 定义视图路径、URL前缀、模型名称
- `index()` 方法分页显示支付宝账号列表每页10条
---
### 3. 表单构建器 (Form)
**文件位置**: `app/Forms/AlipayAccountForm.php`
```php
<?php
namespace App\Forms;
use Kris\LaravelFormBuilder\Form;
use Kris\LaravelFormBuilder\Field;
class AlipayAccountForm extends Form
{
public function buildForm()
{
$this->add("id", Field::HIDDEN);
$this->add("name", Field::TEXT, ["label" => "名称", "rules" => "required"]);
$this->add("appid", Field::TEXT, ["label" => "应用ID", "rules" => "required"]);
$this->add("public_key", Field::TEXTAREA, [
"label" => "应用公钥",
"rules" => "required",
"attr" => ["rows" => 4]
]);
$this->add("alipay_key", Field::TEXTAREA, [
"label" => "支付宝密钥",
"rules" => "required",
"attr" => ["rows" => 4]
]);
$this->add('buttons', 'buttongroup', [
"splitted" => true,
"buttons" => [
["label" => "保存", "attr" => ["class" => "btn btn-primary mr-1", "type" => "submit"]],
["label" => "返回", "attr" => ["class" => "btn btn-light btn-back", "type" => "button"]]
]
]);
}
}
```
**字段说明**:
- `id`: 隐藏字段用于编辑时传递ID
- `name`: 账号名称(必填)
- `appid`: 支付宝应用ID必填
- `public_key`: 应用公钥(必填,多行文本框)
- `alipay_key`: 支付宝密钥(必填,多行文本框)
- `buttons`: 保存和返回按钮组
---
### 4. 视图文件 (Views)
#### 4.1 列表页面
**文件位置**: `resources/views/admin/alipay-account/index.blade.php`
**更新内容**:
- 表头字段名称、应用ID、应用公钥、操作
- 数据显示:`$row->appid` 和 `Str::limit($row->public_key, 50)`
- 公钥字段限制显示前50个字符避免过长
**功能**:
- 显示支付宝账号列表
- 创建新账号按钮
- 编辑、删除操作按钮
- 分页功能
#### 4.2 创建/编辑页面
**文件位置**: `resources/views/admin/alipay-account/create.blade.php`
**内容**:
- 继承 `admin.layouts.layout` 布局
- 包含表单构建器生成的表单
- 支持创建和编辑两种模式
---
### 5. 路由配置
**文件位置**: `routes/web.php` (第69行)
```php
\App\Models\CommonModel::generateCurdRouter("AlipayAccountController", "alipay-account");
```
**自动生成的路由**:
| 方法 | URI | 动作 | 说明 |
|------|-----|------|------|
| GET | `/admin/alipay-account` | index | 列表页 |
| GET | `/admin/alipay-account/create` | create | 创建页 |
| POST | `/admin/alipay-account/store` | store | 保存新建 |
| GET | `/admin/alipay-account/edit?id={id}` | edit | 编辑页 |
| POST | `/admin/alipay-account/update/{id}` | update | 保存编辑 |
| POST | `/admin/alipay-account/delete` | delete | 删除 |
**权限控制**:
- 需要通过 `authorize:admin` 中间件(管理员身份验证)
- 需要通过 `rbac:admin` 中间件(基于角色的权限验证)
---
## 📊 数据库结构
**表名**: `alipay_account`
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | BIGINT | 主键ID |
| name | VARCHAR | 账号名称 |
| appid | VARCHAR | 应用ID |
| public_key | VARCHAR | 应用公钥 |
| alipay_key | VARCHAR | 支付宝密钥 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
| deleted_at | TIMESTAMP | 软删除时间 |
---
## 🔄 与 WechatpayAccount 的对比
| 项目 | WechatpayAccount | AlipayAccount |
|------|------------------|---------------|
| 商户标识字段 | `mchid` (商户ID) | `appid` (应用ID) |
| 密钥字段 | `key` (商户密钥) | `public_key` + `alipay_key` |
| 字段类型 | TEXT | TEXTAREA (多行) |
| 字段数量 | 3个核心字段 | 4个核心字段 |
**主要区别**:
1. 支付宝使用应用ID代替商户ID
2. 支付宝需要两个密钥:应用公钥和支付宝密钥
3. 密钥字段较长,使用多行文本框输入
---
## 🚀 使用说明
### 访问管理页面
1. **登录后台**: 访问 `/admin/login`
2. **进入列表页**: 访问 `/admin/alipay-account`
3. **创建账号**: 点击"创建支付宝账号"按钮
4. **填写信息**:
- 名称:给账号起一个便于识别的名称
- 应用ID从支付宝开放平台获取
- 应用公钥:从支付宝开放平台生成
- 支付宝密钥:从支付宝开放平台获取
### 开发集成
```php
// 获取所有支付宝账号
$accounts = AlipayAccount::all();
// 获取单个账号
$account = AlipayAccount::find($id);
// 创建账号
$account = new AlipayAccount();
$account->name = "测试账号";
$account->appid = "2021xxxxx";
$account->public_key = "MIIBIjAN...";
$account->alipay_key = "MIIEvgI...";
$account->save();
// 更新账号
$account = AlipayAccount::find($id);
$account->name = "新名称";
$account->save();
// 软删除
$account->delete();
// 包含已删除记录
$accounts = AlipayAccount::withTrashed()->get();
```
---
## ✅ 验证清单
- [x] 模型文件创建完成
- [x] 控制器文件创建完成
- [x] 表单构建器创建完成
- [x] 视图文件已更新(字段匹配数据库)
- [x] 路由配置已添加
- [x] 无 Linter 错误
- [x] 继承关系正确SoftDeletesModel、CommonController
- [x] 权限中间件已配置
- [x] 遵循项目命名规范
---
## 📝 注意事项
1. **密钥安全**: 密钥字段包含敏感信息,建议:
- 在列表页只显示部分内容(已实现)
- 考虑加密存储
- 严格控制访问权限
2. **表单验证**:
- 所有字段均为必填
- 前端验证由表单构建器自动处理
- 可根据需要添加后端验证规则
3. **软删除**:
- 删除操作不会真正删除数据
- 可通过 `withTrashed()` 查询已删除记录
- 可使用 `restore()` 恢复数据
4. **扩展功能**:
- 如需关联项目,参考 `Project` 表中的 `alipay_account_id` 字段
- 可添加账号验证功能
- 可添加账号余额查询功能
---
## 🎯 后续建议
1. **添加账号验证功能**: 在保存时调用支付宝API验证配置是否正确
2. **添加使用统计**: 记录每个账号的使用次数和交易金额
3. **添加状态字段**: 标记账号启用/禁用状态
4. **添加备注字段**: 记录账号用途和相关说明
5. **日志记录**: 记录账号的创建、修改、删除操作
---
## 📞 技术支持
如有问题,请参考:
- Laravel 7.x 官方文档: https://laravel.com/docs/7.x
- Laravel Form Builder: https://github.com/kristijanhusak/laravel-form-builder
- 支付宝开放平台: https://open.alipay.com/
---
**创建时间**: 2025-10-13
**创建者**: AI Assistant
**基于模板**: WechatpayAccount MVC
5 months ago