Skip to content

提现资源整合插件使用文档

概述

本插件用于统一管理系统中的多种币种提现方式,通过统一的架构实现:

  • 币种配置统一管理
  • 提现方式统一配置
  • 避免重复开发,支持快速接入新币种
  • 统一的提现 API 接口

目录结构

tixianziyuanzhenghe/
├── CustomHook.php              # 钩子注册文件
├── base/
│   ├── Alipay.php             # 支付宝提现基类
│   └── Wechat.php             # 微信提现基类
├── controller/
│   ├── Ctixianziyuanzhenghe.php  # 后台配置控制器
│   └── api/
│       └── ApiTixianziyuanzhenghe.php  # API控制器
├── from/
│   └── Tixian.php              # 表单 Trait
├── model/
│   ├── Tixianziyuanzhenghe.php     # 主模型
│   ├── Tixianziyuanzhengheconfig.php # 配置模型
│   └── Tixianziyuanzhenghemiddle.php # 中间表模型
└── README.md                   # 本文档

核心概念

1. 币种(Currency)

系统中的各种金额类型,例如:

  • 供应链联动货款
  • 余额
  • 其他自定义币种

2. 提现方式(Withdraw Type)

具体的提现渠道,例如:

  • 微信提现
  • 支付宝提现
  • 银行卡提现
  • 汇付支付
  • 其他第三方支付

接入指南

第一步:新插件 注册币种

在币种插件的 CustomHook.php 中注册币种信息:

php
<?php namespace app\plugins\yourplugin;

use app\model\Newplugin;
use think\Hook;

class CustomHook
{
    public static function registerHook()
    {
        // 注册币种
        Hook::add(Newplugin::H_getCurrencies, self::class);
    }
    
     public function getCurrencies(&$param){
        $name = CommonFun::getCustomName('gongyinlianhuokuang',Gongyinlianhuokuang::class);
        $info = [
            'title' => $name,
            'plugin_name' => 'gongyinlianhuokuang',
            'config_type' => '2',   //配置 1=旧配置 2=新配置   默认新配置暂不支持老配置
            'config_model' => \app\plugins\gongyinlianhuokuang\model\Gongyinlianhuokuangwithdrawset::class,     
            'model' => \app\plugins\gongyinlianhuokuang\model\Gongyinlianhuokuang::class,
            'withdraw_model' => \app\plugins\gongyinlianhuokuang\model\Gongyinlianhuokuangwithdraw::class,
            'is_open_withdraw' => 'is_open_withdraw',   //配置提现开关字段
            'balance_method' => 'getSupplierInfo',  //用户余额不在用户表可配置withdraw_model自定义静态方法 没有不需要配置
            'balance_name' => 'balance',  //用户余额在用户表可配置 指定字段名 没有不需要配置
            'prefix' => 'GYL'   //生成提现订单号前缀
        ];
        $param[] = $info;
    }
}

第二步:创建提现配置控制器

创建币种的配置模型,必须引入 Tixian Trait: 配置 projec_name 币种标识名称

self::initfrom($form); //统一基础配置表单,表单时调用

self::initsaved($form); //表单保存后调用

php
<?php namespace app\plugins\yourplugin\controller;

use app\model\Base;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use app\plugins\tixianziyuanzhenghe\from\Tixian;

class Cyourpluginwithdrawset extends Base
{
    use Tixian;
    
    public static $projec_name = 'yourplugin';  // 币种标识
    
    // Grid 配置
    public static function grid()
    {
        $grid = new Grid(new self());
        
        $grid->column('id', 'ID')->sortable();
        $grid->column('withdraw_type', '提现方式')->display(function($type){
            return self::getWithdrawType($type);
        });
        
        // ... 其他列配置
        
        return $grid;
    }
    
    // Form 配置
    public static function form()
    {
        $form = new Form(new self());
        
        // 使用统一的表单初始化
        self::initfrom($form);
        
        // 保存后回调
        $form->saved(function(Form $form){
            self::initsaved($form);
        });
        
        return $form;
    }
}

第三步:创建提现记录模型

创建提现记录模型,包含必要的字段和方法: 1、public static function handleWithdrawSuccess($id) //提现成功回调 2、public static function handleWithdrawFail($id) //提现失败回调

php
<?php namespace app\plugins\yourplugin\model;

use app\model\Base;

class Yourpluginwithdraw extends Base
{
    // 获取用户余额(如果使用 balance_method)
    public static function getSupplierInfo($user_id)
    {
        // 返回用户的可用余额
        return 0;
    }
    
    // 提现成功回调(可选)
    public static function handleWithdrawSuccess($id)
    {
        // 处理提现成功后的逻辑
    }
    
    // 提现失败回调(可选)
    public static function handleWithdrawFail($id)
    {
        // 处理提现失败后的逻辑
    }
}

第三步:创建提现审核文件

Tixianziyuanzhenghe::requestWithdraw('gongyinlianhuokuang', $withdraw); 审核成功调用

Gongyinlianhuokuangwithdraw::handleWithdrawFail($withdraw['id']); 审核失败调用

php

namespace app\plugins\gongyinlianhuokuang\controller;

use app\api\controller\ApiYunfastpay;
use app\model\Adapay;
use app\plugins\tixianziyuanzhenghe\model\Tixianziyuanzhenghe;
use app\service\Pay\Lakala\LakalaService;
use app\service\Withdrawal\Tax;
use Encore\Admin\Form;
use Encore\Admin\Url;
use LinAdmin\controller\CNewController;
use think\Db;
use app\plugins\gongyinlianhuokuang\model\Gongyinlianhuokuangwithdraw;

class Cgongyinlianhuokuangwithdrawcheck extends CNewController
{
    protected $model = Gongyinlianhuokuangwithdraw::class;

    public function index()
    {
        return redirect_url(Url::index("gongyinlianhuokuangwithdraw"));
    }

    public function form($id = null)
    {
        $id = request_new("id");
        $source = $_GET['source'] ?: 0;//1-批量审核
        $ids = $_GET['ids'];//1-批量审核id

        $form = new Form(new  $this->model());

        $form->hidden("id", "ID")->value($id);
        $form->hidden("source", "source")->value($source);
        $form->hidden("ids", "ids")->value(implode(',',$ids));

        $form->tab("审核", function (Form $form) {
            $form->radio('state', '审核')->options(["1" => "审核通过", "2" => "审核拒绝"])->default(1);
            $form->textarea('err_code_des', '审核拒绝原因');

        });

        $source = request_new("source");
        $ids = request_new("ids");
        if(!$source){
            $ids = [$id];
        }else{
            $ids = explode(',',$ids);
        }

        $form->saving(function (Form $form) use ($ids) {
            global $_W;
            $uniacid = $_W['uniacid'];
            foreach ($ids as $id) {
                $withdraw = Gongyinlianhuokuangwithdraw::where(array('uniacid' => $uniacid, 'id' => $id))->find();
                if ($form->state == 1) {//审核通过
                    Tixianziyuanzhenghe::requestWithdraw('gongyinlianhuokuang', $withdraw);
                } elseif ($form->state == 2) {//审核拒绝
                    $fail_reason = $form->err_code_des;
                    $withdraw->allowField(true)->save(array('state' => 2, 'review_time' => time(), 'err_code_des' => $fail_reason));
                    Gongyinlianhuokuangwithdraw::handleWithdrawFail($withdraw['id']);
                }
            }
            admin_success('操作成功');
            return redirect_url(Url::index());

        });

        return $form;
    }
}

Hook 钩子说明

1. Newplugin::H_getCurrencies

注册币种信息。

回调参数:

  • &$param: 币种数组引用

2. Newplugin::H_getTixianziyuanzhenghe

注册自定义提现方式。

回调参数:

  • &$param: 提现方式数组引用

配置示例

汇付支付提现方式配置示例

php
public function getTixianziyuanzhenghe(&$param){
    $info = [
        'title' => '汇付支付',  //第三方提现支付名称
        'wd_type' => 20,    //提现类型
        'wd_key' => 'huifu',    //自定义唯一标识
        'is_state' => 1,    //固定
        'filed' => array(
            [
                'name' => '测试字段1',  //字段名称
                'key' => 'test1',   //字段唯一名称
                'from' => function($form){
                    return $form->text('test1', '测试字段1');
                },  //字段表单
                'is_show' => 1, //关联展示隐藏
            ]
        )   //第三方提现 必须配置字段  没有可配置可为空  字段无需在对应币种数据库添加字段   整合里面会自动关联插入
    ];
    $param[] = $info;
}

注意事项

  1. wd_type 唯一性:各提现方式的 wd_type 必须唯一,避免冲突
  2. 币种标识一致性:币种标识(plugin_name)在整个系统中保持一致
  3. 模型命名规范:建议使用统一的命名规范,例如:{Plugin}withdrawset、{Plugin}withdraw
  4. 配置字段存储:额外的配置字段会自动存储到 tixianziyuanzhengheconfig 表

小程序

  1. 页面路径 plus9/tixianziyuan/withdrawalall/withdrawalall
  2. 页面参数 source=gongyinlianhuokuang