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.
8.0 KiB
8.0 KiB
AlipayAccount MVC 实现文档
📋 概述
本文档记录了参照 WechatpayAccount 模型创建 AlipayAccount 相关 MVC 组件的完整过程。
✅ 已完成的工作
1. 模型 (Model)
文件位置: app/Models/AlipayAccount.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
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
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: 隐藏字段,用于编辑时传递IDname: 账号名称(必填)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行)
\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个核心字段 |
主要区别:
- 支付宝使用应用ID代替商户ID
- 支付宝需要两个密钥:应用公钥和支付宝密钥
- 密钥字段较长,使用多行文本框输入
🚀 使用说明
访问管理页面
- 登录后台: 访问
/admin/login - 进入列表页: 访问
/admin/alipay-account - 创建账号: 点击"创建支付宝账号"按钮
- 填写信息:
- 名称:给账号起一个便于识别的名称
- 应用ID:从支付宝开放平台获取
- 应用公钥:从支付宝开放平台生成
- 支付宝密钥:从支付宝开放平台获取
开发集成
// 获取所有支付宝账号
$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();
✅ 验证清单
- 模型文件创建完成
- 控制器文件创建完成
- 表单构建器创建完成
- 视图文件已更新(字段匹配数据库)
- 路由配置已添加
- 无 Linter 错误
- 继承关系正确(SoftDeletesModel、CommonController)
- 权限中间件已配置
- 遵循项目命名规范
📝 注意事项
-
密钥安全: 密钥字段包含敏感信息,建议:
- 在列表页只显示部分内容(已实现)
- 考虑加密存储
- 严格控制访问权限
-
表单验证:
- 所有字段均为必填
- 前端验证由表单构建器自动处理
- 可根据需要添加后端验证规则
-
软删除:
- 删除操作不会真正删除数据
- 可通过
withTrashed()查询已删除记录 - 可使用
restore()恢复数据
-
扩展功能:
- 如需关联项目,参考
Project表中的alipay_account_id字段 - 可添加账号验证功能
- 可添加账号余额查询功能
- 如需关联项目,参考
🎯 后续建议
- 添加账号验证功能: 在保存时调用支付宝API验证配置是否正确
- 添加使用统计: 记录每个账号的使用次数和交易金额
- 添加状态字段: 标记账号启用/禁用状态
- 添加备注字段: 记录账号用途和相关说明
- 日志记录: 记录账号的创建、修改、删除操作
📞 技术支持
如有问题,请参考:
- 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