外观
提现资源整合插件使用文档
概述
本插件用于统一管理系统中的多种币种提现方式,通过统一的架构实现:
- 币种配置统一管理
- 提现方式统一配置
- 避免重复开发,支持快速接入新币种
- 统一的提现 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;
}注意事项
- wd_type 唯一性:各提现方式的 wd_type 必须唯一,避免冲突
- 币种标识一致性:币种标识(plugin_name)在整个系统中保持一致
- 模型命名规范:建议使用统一的命名规范,例如:{Plugin}withdrawset、{Plugin}withdraw
- 配置字段存储:额外的配置字段会自动存储到 tixianziyuanzhengheconfig 表
小程序
- 页面路径 plus9/tixianziyuan/withdrawalall/withdrawalall
- 页面参数 source=gongyinlianhuokuang