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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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