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

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: 隐藏字段用于编辑时传递ID
  • name: 账号名称(必填)
  • appid: 支付宝应用ID必填
  • public_key: 应用公钥(必填,多行文本框)
  • alipay_key: 支付宝密钥(必填,多行文本框)
  • buttons: 保存和返回按钮组

4. 视图文件 (Views)

4.1 列表页面

文件位置: resources/views/admin/alipay-account/index.blade.php

更新内容:

  • 表头字段名称、应用ID、应用公钥、操作
  • 数据显示:$row->appidStr::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个核心字段

主要区别:

  1. 支付宝使用应用ID代替商户ID
  2. 支付宝需要两个密钥:应用公钥和支付宝密钥
  3. 密钥字段较长,使用多行文本框输入

🚀 使用说明

访问管理页面

  1. 登录后台: 访问 /admin/login
  2. 进入列表页: 访问 /admin/alipay-account
  3. 创建账号: 点击"创建支付宝账号"按钮
  4. 填写信息:
    • 名称:给账号起一个便于识别的名称
    • 应用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
  • 权限中间件已配置
  • 遵循项目命名规范

📝 注意事项

  1. 密钥安全: 密钥字段包含敏感信息,建议:

    • 在列表页只显示部分内容(已实现)
    • 考虑加密存储
    • 严格控制访问权限
  2. 表单验证:

    • 所有字段均为必填
    • 前端验证由表单构建器自动处理
    • 可根据需要添加后端验证规则
  3. 软删除:

    • 删除操作不会真正删除数据
    • 可通过 withTrashed() 查询已删除记录
    • 可使用 restore() 恢复数据
  4. 扩展功能:

    • 如需关联项目,参考 Project 表中的 alipay_account_id 字段
    • 可添加账号验证功能
    • 可添加账号余额查询功能

🎯 后续建议

  1. 添加账号验证功能: 在保存时调用支付宝API验证配置是否正确
  2. 添加使用统计: 记录每个账号的使用次数和交易金额
  3. 添加状态字段: 标记账号启用/禁用状态
  4. 添加备注字段: 记录账号用途和相关说明
  5. 日志记录: 记录账号的创建、修改、删除操作

📞 技术支持

如有问题,请参考:


创建时间: 2025-10-13
创建者: AI Assistant
基于模板: WechatpayAccount MVC