包含“n”的产品文档
魔方云系统使用文档>11. 关于三方对接>WHMCS对接弹性IP
n</zjmfdir>&nbsp;&nbsp;// 二级目录<user_prefix>xxx</user_prefix>&nbsp;// 用户前缀,用于区分不同平台对接<username>uid</username>&nbsp;&nbsp;// 创建用户名类型,uid=用户ID,其他=邮箱/手机号注意:hash参数需要和关联的魔方云模块一致,否则可能会出现用户不一致的情况,username建议使用uid&nbsp;2、添加弹性IP产品,模块名称选择魔方云弹性IP&nbsp;3、设置产品参数,此处可以直接设置,也可以设置可选配置项可选配置选项:node_group|节点分组ID、area|区域ID、node|节点ID、ip_group|IP分组ID、in_bw|进带宽、bw|带宽&nbsp;4、保存后,可以到前台会员中心购买相关产品&nbsp;5、产品订购后,可以进入产品内页,关联云主机&nbsp;6、也可以进入云主机内页,直接将弹性IP分配给该云主机&nbsp;&nbsp;
业务系统开发文档>插件开发
ns\addon\目录下&nbsp;二、目录结构\plugins\addon\idcsmart_ticket|--- controller(控制器目录,后台控制器直接放此目录下)|--- clientarea(前台控制器放此目录下)|--- lang(语言目录)|--- zh-cn.php(中文语言文件)|--- template(模板)|--- admin(后台模板目录)|--- clientarea(前台模板目录)|--- IdcsmartTicket.php(插件主文件)|--- route.php(自定义路由文件)|--- sidebar.php(后台插件导航文件)&nbsp;三、开发流程以工单插件为例:1、创建工单插件目录\public\plugins\addon\idcsmart_ticket\;①目录名以小写字母+下划线形式,必须以字母开头,如idcsmart_ticket;&nbsp;2、创建入口文件:IdcsmartTicket.php:①命名空间namespace addon\idcsmart_ticket(控制器下命名空间对应相应目录即可,其它同理);②以目录名大驼峰+.php,创建在插件根目录下,如idcsmart_ticket\IdcsmartTicket.php;③文件中需要定义info属性,示例:# 插件基本信息public $info = array(&nbsp;&nbsp;&nbsp;&nbsp;'name' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 'IdcsmartTicket', //插件英文名,作为插件唯一标识,改成你的插件英文就行了&nbsp;&nbsp;&nbsp;&nbsp;'title' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> '智简魔方工单插件', //插件名称&nbsp;&nbsp;&nbsp;&nbsp;'description' => '智简魔方工单插件', //插件描述&nbsp;&nbsp;&nbsp;&nbsp;'author' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 'idcsmart', &nbsp;//开发者&nbsp;&nbsp;&nbsp;&nbsp;'version' &nbsp;&nbsp;&nbsp;&nbsp;=> '1.0', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 版本号);④必须实现install()安装以及uninstall()卸载方法⑤可实现钩子方法,如要实现订单创建后钩子after_order_create,则可在此文件中创建public function afterOrderCreate($param)公共方法;⑥系统会在订单创建后的位置放置⑤中的钩子,放置方式:hook(‘after_order_create’,[‘id’=>$orderId]) ;⑦如果定义变量noNav,表示不需要默认导航(具体参考7,插件后台导航)public $noNav;&nbsp;3、创建插件后台控制器 idcsmart_ticket\controller\TicketController.php①命名空间addon\idcsmart_ticket\controller;②继承后台基类控制器PluginAdminBaseController,增加了权限控制,允许使用一些通用方法;③get_admin_id()可获取后台管理员登录ID;④实现接口,如public function ticketList(),系统默认访问此接口的url为:网站地址/admin/addon?_plugin=idcsmart_ticket&_controller=ticket&_action=ticket_list,说明:系统默认地址默认登录,若需要免登录访问,需要自定义路由(见后面自定义路由);⑤系统提供了生成④中默认访问地址的方法:idcsmart_addon_url($url,$vars=[],$is_admin=false)参数说明:url: 格式:插件名://控制器名/方法,如 IdcsmartTicket://Ticket/ticketListvars: 参数,默认为空数组Is_admin: 是否后台,默认为false&nbsp;4、创建插件前台控制器idcsmart_ticket\controller\clientarea\TicketController.php①命名空间addon\idcsmart_ticket\controller\clientarea;②继承前台基类控制器PluginBaseController,允许使用一些通用方法;③get_client_id()可获取前台客户登录ID;④实现接口,如public function ticketList(),系统默认访问此接口的url为:网站地址/console/addon?_plugin=idcsmart_ticket&_controller=ticket&_action=ticket_list或者:网站地址/console/addon?_plugin=1&_controller=ticket&_action=ticket_list,1表示插件ID;说明:系统默认地址默认登录,若需要免登录访问,需要自定义路由(见后面自定义路由);⑤系统提供了生成④中默认访问地址的方法:idcsmart_addon_url($url,$vars=[],$is_admin=false)参数说明:url: 格式:插件名://控制器名/方法,如 IdcsmartTicket://Ticket/ticketListvars: 参数,默认为空数组Is_admin: 是否后台,默认为false&nbsp;5、插件提供两种路由:①、系统默认url带参数,参考4②、自定义路由,插件根目录下定义route.php,示例:前台路由:Route::group('console/v1',function (){Route::get('ticket',"\\addon\\idcsmart_ticket\\controller\\clientarea\\TicketController@ticketList")->append(['_plugin'=>'idcsmart_ticket','_controller'=>'ticket','_action'=>'ticket_list']);# 带上默认参数,可以使用继承控制器app\admin\controller\PluginBaseController的一些通用方法,也可以不追加这些参数(_plugin插件名称C风格,_controller控制器名称C风格,_action方法名称C风格)})->middleware(\app\http\middleware\ParamFilter::class)->middleware(\app\http\middleware\CheckHome::class);#前台需要登录就使用此中间件后台路由:Route::group(DIR_ADMIN . '/v1',function (){ Route::get('ticket',"\\addon\idcsmart_ticket\controller\TicketController@ticketList")->append(['_plugin'=>'idcsmart_ticket','_controller'=>'ticket','_action'=>'ticket_list']);})->middleware(\app\http\middleware\ParamFilter::class)->middleware(\app\http\middleware\CheckAdmin::class);#后台需要登录就使用此中间件&nbsp;6、插件多语言①创建语言文件lang/zh-cn.php,返回如下格式的数组:return [&nbsp;&nbsp;&nbsp;&nbsp;'success_message' => '请求成功',&nbsp;&nbsp;&nbsp;&nbsp;'ticket_title_require' => '请输入工单标题','ticket_log_client_create_ticket' => '{client}新建工单:{ticket_id}',]&nbsp;②使用lang_plugins('语言标识',$param=[])实现多语言,$param为语言文件中参数,格式['{client}'=>'wyh'],如:lang_plugins('ticket_log_client_create_ticket',['{client}'=>'wyh','{ticket_id}'=>1]);③前端多语言文件&nbsp;&nbsp;前台语言文件:在template/clientarea/lang/目录下index.js文件;&nbsp;&nbsp;后台语言文件:在template/admin/lang目录下(function () {&nbsp;&nbsp;const module_lang = {&nbsp;&nbsp;&nbsp;&nbsp;"zh-cn": {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add: "添加",&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;&nbsp;&nbsp;"zh-hk": {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add: "添加",&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;&nbsp;&nbsp;"en-us": {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add: "Add",&nbsp;&nbsp;&nbsp;&nbsp;},&nbsp;&nbsp;};&nbsp;&nbsp;const DEFAULT_LANG = localStorage.getItem("backLang") || "zh-cn";&nbsp;&nbsp;window.module_lang = module_lang[DEFAULT_LANG];})();&nbsp;&nbsp;&nbsp;&nbsp;具体参考idcsmart_ticket工单插件&nbsp;7、插件后台导航①导航默认会创建在插件导航之下,默认链接:plugin/插件名/index.html,对应template/admin/index.php文件,同时需要在lang/下的语言文件创建如下格式的语言,nav_plugin_addon_插件名:'nav_plugin_addon_idcsmart_ticket' => '工单',&nbsp;②自定义导航,若是一级导航,会增加在插件导航之上,管理导航之下,在插件根目录下创建sidebar.php,示例:/*&nbsp;* &nbsp;自定义后台导航菜单(仅支持一二级),注意系统会在插件导航下默认创建url为"plugin/插件名称/index.html"的导航,因此需要在template/admin/目录下创建index.php文件作为插件入口&nbsp;*/return [&nbsp;&nbsp;&nbsp;&nbsp;[ # 一级导航&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'name' => 'nav_plugin_addon_ticket', # 导航名称,不要与系统冲突(参考idcsmart_nav表中name字段),同时需要在lang/目录下定义语言&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' &nbsp;=> '', # 为空表示一级导航,不需要链接&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'icon' => 'tools', # 图标,获取图标:https://tdesign.tencent.com/vue/components/icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'in' => '', # 一级导航,此值为空&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'child' => [ # 二级导航&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'name' => 'nav_plugin_addon_ticket_list', # 导航名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => 'ticket', # 链接格式,会自动加上.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'in' => 'nav_user_management', # 可定义导航在某个一级导航之下,默认会放置在此一级导航最后的位置(获取方式:idcsmart_nav表中的parent_id==0的name字段)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'icon' => '', # 图标,获取图标:https://tdesign.tencent.com/vue/components/icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'name' => 'nav_plugin_addon_ticket_internal_list', # 导航名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => 'ticket_internal', # 链接格式,会自动加上.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'in' => '', # 可定义导航在某个一级导航之下,默认会放置在此一级导航最后的位置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'icon' => '', # 图标,获取图标:https://tdesign.tencent.com/vue/components/icon&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;],];&nbsp;8、插件前台导航①导航默认会创建在插件导航之下,默认链接:plugin/插件名/index.html;②自定义导航,会增加在插件导航之上,管理导航之下,在插件根目录下创建sidebar_clientarea.php,示例:/*&nbsp;* &nbsp;自定义前台导航菜单(仅支持一二级)&nbsp;*/return [&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'name' => 'nav_plugin_addon_ticket', # 链接名称,同时需要在lang/目录下定义语言&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' &nbsp;=> '', # 链接格式,会自动加上.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'icon' => '', # 图标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'child' => [ # 二级菜单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'name' => 'nav_plugin_addon_ticket_list',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => 'ticket',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'icon' => '', # 图标&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;],];&nbsp;&nbsp;9、插件后台权限管理在插件根目录下创建auth.php,示例如下(注意定义语言):<?php/*&nbsp;* &nbsp;定义权限,系统会默认插入名称为插件名的一级权限,以下仅需定义二级/三级权限;(首先,要使用二级权限,插件后台控制器需要继承app\event\controller\PluginAdminBaseController基类控制器)&nbsp;*/return [&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_list', # y用户工单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => 'ticket',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'child' => [ # 操作权限&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_view', # 工单查看&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketController::ticketList', &nbsp;# 工单列表具体控制器方法&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_list' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_receive',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketController::receive',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_receive' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_resolved',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketController::resolved',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_resolved' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_detail', # 工单详情&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => 'ticket_detail',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'child' => [&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_view',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketController::index',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_index' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_reply',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketController::reply',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_reply' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_download',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketController::download',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_download' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_internal_list', # 内部工单&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => 'ticket_internal',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'child' => [&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_view',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketInternalController::ticketInternalList',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_list' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_view',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketInternalController::index',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_index' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_add',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketInternalController::create',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_create' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_receive',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketInternalController::receive',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_receive' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_resolved',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketInternalController::resolved',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_resolved' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_reply',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketInternalController::reply',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_reply' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'auth_plugin_addon_ticket_forward',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'url' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule' => 'TicketInternalController::forward',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'auth_rule_title' => 'auth_rule_plugin_addon_ticket_internal_forward' &nbsp;# 具体权限名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;]&nbsp;&nbsp;&nbsp;&nbsp;],];&nbsp;10、插件接口内部调用使用plugin_api($addon,$controller,$action,$param=[])函数可内部调用插件API,需要开发者提供插件API开发文档,具体格式参考系统API文档&nbsp;* @param string addon - 插件 require&nbsp;* @param string controller - 控制器前缀 require&nbsp;* @param string action - 方法 require&nbsp;* @param array param - 传入的参数&nbsp;四、示例具体可参考智简魔方工单插件public\plugins\addon\idcsmart_ticket\&nbsp;
业务系统开发文档>v10开发规范
n/&nbsp;、&nbsp;product_divert/;2、类库、函数文件统一以.php为后缀,如app.php&nbsp;、common.php;3、类的文件名均以命名空间定义,并且命名空间的路径和类库文件所在路径一致,如ProductModel.php对应ProductModel类,命名空间app\common\model对应路径app/common/model/;4、类(包含接口和Trait)文件采用驼峰法命名(首字母大写),类名(包括接口和Trait)和文件名保持一致,统一采用驼峰法命名(首字母大写),其它文件采用小写+下划线命名,如类文件app/common/logic/ConfigOptionsLogic.php对应ConfigOpitonsLogic类,公共函数文件app/common.php;5、目录结构finance&nbsp;&nbsp;财务系统├─app&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用目录│&nbsp;&nbsp;├─admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后台│&nbsp;&nbsp;│&nbsp;&nbsp;├─controller&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;控制器目录│&nbsp;&nbsp;│&nbsp;&nbsp;├─model&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模型目录(业务逻辑写这里或逻辑类里)│&nbsp;&nbsp;│&nbsp;&nbsp;├─validate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验证器目录│&nbsp;&nbsp;├─home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前台│&nbsp;&nbsp;│&nbsp;&nbsp;├─controller&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;控制器目录│&nbsp;&nbsp;│&nbsp;&nbsp;├─model&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模型目录│&nbsp;&nbsp;│&nbsp;&nbsp;├─validate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;验证器目录│&nbsp;&nbsp;├─common&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公共目录│&nbsp;&nbsp;│&nbsp;&nbsp;├─logic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;逻辑类目录│&nbsp;&nbsp;│&nbsp;&nbsp;├─model&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;模型目录(前后台通用模型方法写这里面的model类)│&nbsp;&nbsp;├─command&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;命令行目录│&nbsp;&nbsp;│&nbsp;&nbsp;├─Cron.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统默认定时任务文件│&nbsp;&nbsp;├─excption&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;错误处理目录│&nbsp;&nbsp;├─http&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网关目录│&nbsp;&nbsp;│&nbsp;&nbsp;├─middleware&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中间件目录│&nbsp;&nbsp;├─common.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;公共函数文件(写函数注释,比较通用的方式先写好,如curl)│&nbsp;&nbsp;├─middleware.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中间件定义文件├─cron&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时任务│&nbsp;&nbsp;├─cron.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;定时任务├─config&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;全局配置目录│&nbsp;&nbsp;├─app.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用配置│&nbsp;&nbsp;├─cache.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;缓存配置│&nbsp;&nbsp;├─console.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;控制台配置│&nbsp;&nbsp;├─cookie.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cookie配置│&nbsp;&nbsp;├─database.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据库配置│&nbsp;&nbsp;├─filesystem.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;文件磁盘配置│&nbsp;&nbsp;├─lang.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;多语言配置│&nbsp;&nbsp;├─log.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;日志配置│&nbsp;&nbsp;├─middleware.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;中间件配置│&nbsp;&nbsp;├─route.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;URL和路由配置│&nbsp;&nbsp;├─session.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Session配置│&nbsp;&nbsp;├─trace.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trace配置│├─route&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;路由目录│&nbsp;&nbsp;├─admin.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后台路由│&nbsp;&nbsp;├─home.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前台路由│├─public&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WEB目录(对外访问目录)│&nbsp;&nbsp;├─index.php&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;入口文件│&nbsp;&nbsp;├─admin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;后台模板目录│&nbsp;&nbsp;├─home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;前台模板目录│&nbsp;&nbsp;├─plugins&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;插件目录│&nbsp;&nbsp;├─.htaccess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用于apache的重写│├─runtime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;应用的运行时目录(可写,可定制)├─vendor&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Composer类库目录6、使用模型方式进行增删改查,写在app/common/model/下(前后台通用);例子:创建订单,建立文件app/common/model/OrderModel.php,create()创建订单;7、逻辑类,写在app/common/logic/下,例子:ProvisionLogic.php服务模块逻辑类等;二、函数和类、属性命名1、类的命名采用驼峰法(首字母大写),例如&nbsp;User、UserType;2、函数的命名使用小写字母和下划线(小写字母开头)的方式,例如&nbsp;get_client_ip,公共函数文件app/common.php统一使用此方式命名;3、方法的命名使用驼峰法(首字母小写),例如&nbsp;getUserName;4、属性的命名使用驼峰法(首字母小写),例如&nbsp;tableName、instance;5、特例:以双下划线__打头的函数或方法作为魔术方法,例如&nbsp;__call&nbsp;和&nbsp;__autoload;6、变量的命名使用驼峰法(首字母小写),例如&nbsp;$tableName。实例化类的变量和类名同名,大驼峰变量,例如:$User。逻辑类中的变量加后缀,例如:$SmsLogic。三、常量和配置1、常量以大写字母和下划线命名,例如&nbsp;APP_PATH;2、配置参数以小写字母和下划线命名,例如&nbsp;url_route_on&nbsp;和url_convert;3、环境变量定义使用大写字母和下划线命名,例如APP_DEBUG;四、数据库表说明1、数据库表采用&nbsp;innodb引擎;2、utf8mb4字符集;3、带自增主键;4、有默认值(text这类类型除外);5、字符串类型的一定要有默认值,不要用NULL;6、创建表一定要有字段说明;7、日期存时间戳,所以日期类型用int(11);8、价格相关数据用&nbsp;decimal(10,2),有的可能需要更高的精度decimal(10,5);9、适当添加索引,参考数据库表索引建立;10、数据库里不使用存储过程、视图、函数、触发器、事件(否则维护麻烦);11、数据表和字段采用小写加下划线方式命名,并注意字段名不要以下划线开头,例如&nbsp;idcsmart_accounts表和&nbsp;amount_out字段,不建议使用驼峰和中文作为数据表及字段命名。12、数据库表不使用外键;13、数据库用5.7,开启严格模式。14、表与表关联的ID要带表名。例如:product_id。15、表或字段读取不需要写as,例如client&nbsp;c。16、搜索参数名$keywords。分页:$page&nbsp;条数:$limit&nbsp;排序:$orderby&nbsp;升序降序:$sort&nbsp;desc&nbsp;asc&nbsp;;17、五、智简魔方代码规范1、控制器方法中尽量只写传参,验证、json返回,业务逻辑写在model里,或者逻辑类里;2、控制器里只有接口方法,不要写多余的方法在控制器文件中,其他方法、逻辑写model里或者逻辑类里、或者公共函数里;3、除接口返回json格式外,其他函数方法一律返回单个值,或者数组;4、更改框架核心代码、基类控制器时,一定要商量,并写好更改的文档,做好记录;5、函数超过两个参数,采用数组方式传入;(讨论:这个涉及到后面可能会不断的增加传入参数)6、公共函数里&nbsp;尽量不使用数据库操作,用use&nbsp;引用模型类;7、不要实例化控制器;8、变量赋值运算前后添加空格。例如:$td&nbsp;.=&nbsp;'</td>';9、类,函数名后面的花括号紧跟后面,换行写。例如:class&nbsp;CartController&nbsp;extends&nbsp;CommonController{10、注释格式①api接口和类里面方法的注释格式/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@title&nbsp;title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@desc&nbsp;desc*&nbsp;@author&nbsp;author*&nbsp;@version&nbsp;version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@url&nbsp;url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@method&nbsp;method*&nbsp;@namespace&nbsp;namespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;type&nbsp;name&nbsp;default&nbsp;desc&nbsp;validate*&nbsp;@return&nbsp;type&nbsp;name&nbsp;default&nbsp;desc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/如果当前default没有的话可以用&nbsp;-&nbsp;占位,validate没有的话可以不写return的参数如果仅返回单个数据并无变量名称是type之后的参数可以不填方法的param如果有顺序的话需要按顺序写param和return后面的参数以空格隔开,参数的内容之中不能存在空格例如/**&nbsp;*&nbsp;@title&nbsp;节点分组列表&nbsp;*&nbsp;@desc&nbsp;节点分组列表&nbsp;*&nbsp;@author&nbsp;hh&nbsp;*&nbsp;@version&nbsp;v1&nbsp;*&nbsp;@url&nbsp;node_groups&nbsp;*&nbsp;@method&nbsp;GET&nbsp;*&nbsp;@param&nbsp;int&nbsp;$page&nbsp;1&nbsp;页数&nbsp;&nbsp;*&nbsp;@param&nbsp;int&nbsp;$per_page&nbsp;20&nbsp;每页条数&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;$orderby&nbsp;id&nbsp;排序(id,name)&nbsp;*&nbsp;@param&nbsp;string&nbsp;$sort&nbsp;desc&nbsp;排序方向&nbsp;*&nbsp;@param&nbsp;string&nbsp;$search&nbsp;-&nbsp;搜索&nbsp;*&nbsp;@param&nbsp;string&nbsp;$list_type&nbsp;page&nbsp;获取类型(all,page),all会忽略页数直接返回所有&nbsp;*&nbsp;@return&nbsp;int&nbsp;$data[].id&nbsp;-&nbsp;节点分组ID&nbsp;*&nbsp;@return&nbsp;string&nbsp;$data[].name&nbsp;-&nbsp;节点分组名称&nbsp;*&nbsp;@return&nbsp;string&nbsp;$data[].description&nbsp;-&nbsp;节点分组名称&nbsp;*&nbsp;@return&nbsp;string&nbsp;$data[].create_time&nbsp;-&nbsp;创建时间&nbsp;*&nbsp;@return&nbsp;int&nbsp;$data[].node[].id&nbsp;-&nbsp;使用节点ID&nbsp;*&nbsp;@return&nbsp;string&nbsp;$data[].node[].name&nbsp;-&nbsp;使用节点名称&nbsp;*&nbsp;@return&nbsp;int&nbsp;$meta.total&nbsp;-&nbsp;总条数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;int&nbsp;$meta.total_page&nbsp;-&nbsp;总页数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;int&nbsp;$meta.page&nbsp;-&nbsp;当前页&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;int&nbsp;$meta.per_page&nbsp;-&nbsp;每页条数&nbsp;*/②公共方法的注释格式/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@title&nbsp;title&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@desc&nbsp;desc*&nbsp;@author&nbsp;author*&nbsp;@version&nbsp;version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;type&nbsp;name&nbsp;default&nbsp;desc&nbsp;validate*&nbsp;@return&nbsp;type&nbsp;name&nbsp;default&nbsp;desc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/如果当前default没有的话可以用&nbsp;-&nbsp;占位,validate没有的话可以不写return的参数如果仅返回单个数据并无变量名称是type之后的参数可以不填方法的param如果有顺序的话需要按顺序写param和return后面的参数以空格隔开,参数的内容之中不能存在空格/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@title&nbsp;获取客户端IP地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@desc&nbsp;获取客户端IP地址*&nbsp;@author&nbsp;hh*&nbsp;@version&nbsp;v1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;integer&nbsp;$type&nbsp;返回类型0返回IP地址1返回IPV4地址数字&nbsp; &nbsp;*&nbsp;@param&nbsp;boolean&nbsp;$adv&nbsp;是否进行高级模式获取(有可能被伪装)&nbsp; &nbsp;*&nbsp;@return&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;六、其他1、前端传值用json,后端统一返回json格式数据;2、返回数组一律转化为对象;3、所有函数都需要写清楚文档;4、状态码:200返回正确&nbsp;400返回错误&nbsp;302重定向&nbsp;500系统错误,401登录失效,404无权限5、数据返回格式:{“status”:200/400/302/500,"msg":"success&nbsp;message","data":{}}6、控制器的函数中不要写参数8、php使用7.49、注意不要使用php&nbsp;语言结构或函数&nbsp;来作为方法、变量;10、公共语言&nbsp;写在后台的语言文件;&nbsp;键值&nbsp;小写+下划线;11、语言文件写法:success_message&nbsp;=>&nbsp;‘请求成功’字段统一备注字段统一用&nbsp;notes&nbsp;varchar(1000)支付字段统一用&nbsp;gateway产品id统一用&nbsp;product_id用户id统一用&nbsp;client_id计费周期字段统一用&nbsp;billing_cycle&nbsp;
业务系统使用文档>11、系统迁移>魔方财务迁移v10
nbsp; 访问:财务地址/move.php,选择导出,下一步,开始,等待导出数据库文件成功即可3.将move.php文件和财务的导出包放在V10的 public目录下&nbsp; 访问:V10地址/move.php,选择导入,选择财务的导出包,下一步,开始,等待提示到导入数据完成即可。
业务系统使用文档>2、系统设置>2.5、导航管理>2.5.1 如何添加前台自定义导航
nbsp;2.页面类型选择自定义 输入URL链接网址&nbsp; 设置自定义导航名称 设置完成 点击保存注意:无法进行后台自定义导航添加&nbsp; &nbsp;
DCIM使用文档>5.装机常见问题>5.5 解决debian+ubuntu16以上开机脚本不生效
A、Debian 开机脚本不生效关键点:(所有涉及操作系统文件的路径必须在 根前 加上 /target)debian安装时,在他的/目录名字叫&nbsp;/target,因为这个时候系统还没安装完成 所以:当你想在安装系统的开机脚本中&nbsp;创建一个&nbsp;/root/123.txt&nbsp;文件时 &nbsp;&nbsp;&nbsp;&nbsp;错误写法:touch&nbsp;/root/123.txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#不能直接写真实路径 &nbsp;&nbsp;&nbsp;&nbsp;正确写法:touch&nbsp;/target/root/123.txt 特别注意:不要把永久存留的文件创建到&nbsp;/tmp目录,因为重装完成后会重启系统,重启会删除/tmp下的东西案例:给debian 11镜像更换 国内源1、给debian&nbsp;11镜像更换&nbsp;国内源(注意&nbsp;文件路径是/target开头的哦) cat&nbsp;>&nbsp;/target/etc/apt/sources.list&nbsp;<<&nbsp;EOF deb&nbsp;https://mirrors.ustc.edu.cn/debian/&nbsp;bullseye&nbsp;main&nbsp;contrib&nbsp;non-free deb&nbsp;https://mirrors.ustc.edu.cn/debian/&nbsp;bullseye-updates&nbsp;main&nbsp;contrib&nbsp;non-free deb&nbsp;https://mirrors.ustc.edu.cn/debian-security/&nbsp;bullseye-security&nbsp;main&nbsp;contrib&nbsp;non-free deb&nbsp;http://deb.debian.org/debian&nbsp;bullseye-backports&nbsp;main EOF 2、给debian&nbsp;11安装&nbsp;软件 &nbsp;&nbsp;&nbsp;&nbsp;chroot&nbsp;/target&nbsp;&&&nbsp;apt&nbsp;update&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;chroot&nbsp;/target&nbsp;&&&nbsp;apt&nbsp;install&nbsp;mtr&nbsp;-y &nbsp;&nbsp;&nbsp;&nbsp;或者这样(推荐下面这种,亲测有效) &nbsp;&nbsp;&nbsp;&nbsp;chroot&nbsp;/target&nbsp;apt&nbsp;update&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;chroot&nbsp;/target&nbsp;apt&nbsp;install&nbsp;mtr&nbsp;-y附:这是一个网上的debian ks 自动应答脚本&nbsp; &nbsp;&nbsp;https://github.com/oxypwn/kickstart/blob/master/debian/debian.ksB、Ubuntu 16 及以后版本 开机脚本不生效关键点:自定义脚本中不能使用 echo cat printf tee > >> 这6个指令存在的问题1、d-i preseed/late_command 命令不能使用 echo cat printf tee > 以及 >>> 这6个指令touch&nbsp;/etc/sysctl.d/custom.conf echo&nbsp;'net.core.default_qdisc=fq'&nbsp;>&nbsp;/etc/sysctl.d/custom.conf 上面的命令,只会有touch&nbsp;成功创建文件,echo&nbsp;不会成功的2、sed 不能向空文件写入内容,这是sed的问题,不是ubuntu的问题解决办法利用可使用的shell 指令,完成文件的创建和内容的写入 比如 cp sed 等等不创建新文件,让ubuntu&nbsp;18&nbsp;安装完成后开启bbr sed&nbsp;-i&nbsp;'$a\net.ipv4.tcp_ecn&nbsp;=&nbsp;1'&nbsp;/etc/sysctl.conf sed&nbsp;-i&nbsp;'$a\net.core.default_qdisc&nbsp;=&nbsp;fq'&nbsp;/etc/sysctl.conf sed&nbsp;-i&nbsp;'$a\net.ipv4.tcp_congestion_control&nbsp;=&nbsp;bbr'&nbsp;/etc/sysctl.conf创建&nbsp;新文件,让ubuntu&nbsp;18&nbsp;安装完成后开启bbr,您可以参考这样的写法 cp&nbsp;-a&nbsp;/etc/hosts&nbsp;/etc/sysctl.d/custom.conf sed&nbsp;-i&nbsp;'2,$d'&nbsp;/etc/sysctl.d/custom.conf sed&nbsp;-i&nbsp;'1s\.*\net.ipv4.tcp_ecn&nbsp;=&nbsp;1\'&nbsp;/etc/sysctl.d/custom.conf sed&nbsp;-i&nbsp;'$a\net.core.default_qdisc&nbsp;=&nbsp;fq'&nbsp;/etc/sysctl.d/custom.conf sed&nbsp;-i&nbsp;'$a\net.ipv4.tcp_congestion_control&nbsp;=&nbsp;bbr'&nbsp;/etc/sysctl.d/custom.conf
业务系统使用文档>8、商品管理>如何对接魔方云资源包
nbsp;操作步骤&nbsp;1、v10管理员后台添加接口l&nbsp;模块类型:选择魔方云(自定义配置)l&nbsp;地址填写:魔方云地址/userl&nbsp;用户名和密码:需要填写魔方云代理商的账号密码l&nbsp;Hash:必须添加account_type=agent,如下图:&nbsp;2、添加商品,接口类型选择步骤1添加的接口&nbsp;&nbsp;3、进行商品配置,用户前台购买时,可以选择的配置&nbsp;4、其他配置中,代理商对接,资源包ID需要填写商品接口中填写的代理商名下的资源包ID(魔方云平台可以查看)&nbsp;&nbsp;5、当资源包配置多个时,用户在前台订购商品时,可以选择机器开在哪一个资源包下,如果选择的资源包资源不足时,会提示:资源包XXX不足&nbsp;
业务系统开发文档>对象存储开发文档
ns\oss\目录下&nbsp;二、目录结构\plugins\oss\tencentcloud_oss|--- config(自定义配置)|--- config.php(自定义配置文件)|--- TencentcloudOss.php(对象存储主文件)|--- config.php(配置文件,系统后台可配置)&nbsp;三、开发流程以腾讯云对象存储为例:1、创建腾讯云对象存储目录\public\plugins\oss\tencentcloud_oss\;①目录名以小写字母+下划线形式,必须以字母开头,如tencentcloud_oss;&nbsp;2、创建入口文件:TencentcloudOss.php:①命名空间namespace oss\tencentcloud_oss(控制器下命名空间对应相应目录即可,其它同理);②以目录名大驼峰+.php,创建在支付接口根目录下,如tencentcloud_oss\TencentcloudOss.php③文件中需要定义info属性,示例:// 插件基础信息public $info = array(&nbsp;&nbsp;&nbsp;&nbsp;'name' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 'TencentcloudOss',//Demo插件英文名,改成你的插件英文就行了&nbsp;&nbsp;&nbsp;&nbsp;'title' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> '腾讯云对象存储',&nbsp;&nbsp;&nbsp;&nbsp;'description' => '腾讯云对象存储',&nbsp;&nbsp;&nbsp;&nbsp;'status' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 1,&nbsp;&nbsp;&nbsp;&nbsp;'author' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> '智简魔方',&nbsp;&nbsp;&nbsp;&nbsp;'version' &nbsp;&nbsp;&nbsp;&nbsp;=> '1.0.0',&nbsp;&nbsp;&nbsp;&nbsp;'module' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> 'oss',&nbsp;&nbsp;&nbsp;&nbsp;'help_url' &nbsp;&nbsp;&nbsp;=> 'https://cloud.tencent.com/product/cos');&nbsp;④必须实现install()安装以及uninstall()卸载方法⑤必须实现‘目录名大驼峰+Link’方法,用于检测对象存储是否联通,如:public function TencentcloudOssLink()⑥必须实现‘目录名大驼峰+Data’方法,用于判断对象存储是否有数据,如:public function TencentcloudOssData($param),无参数⑥必须实现‘目录名大驼峰+Upload’方法,用于文件上传,如:public function TencentcloudOssUpload($param),参数param(此参数为数组,示例json方便显示):{"file_path":"/test/","file_name":"test.png"}参数说明:file_path:文件保存路径file_name:文件名返回:data.url:文件访问地址⑦必须实现‘目录名大驼峰+Download’方法,参数param(此参数为数组,示例json方便显示):{"file_path":"/test/","file_name":"test.png","action":"preview"}参数说明:file_path:文件保存路径file_name:文件名action: 动作,preview预览,download下载返回:data.url:文件下载地址&nbsp;3、确定是否需要后台配置文件,如果需要,在对象存储根目录下加上config.php,示例:<?phpreturn [&nbsp;&nbsp;&nbsp;&nbsp;'module_name' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=> [// 在后台插件配置表单中的键名&nbsp;,会是config[text]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => '名称', // 表单的label标题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'type' &nbsp;=> 'text', // 表单的类型:text,password,textarea,checkbox,radio,select等&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'value' => '腾讯云对象存储', // 表单的默认值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tip' &nbsp;&nbsp;=> '友好的显示名称', //表单的帮助提示&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;'secret_id' &nbsp;=> [ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 在后台插件配置表单中的键名&nbsp;,会是config[text]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'Secret ID', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 表单的label标题&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'type' &nbsp;=> 'text', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 表单的类型:text,password,textarea,checkbox,radio,select等&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'value' => '', &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 表单的默认值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tip' &nbsp;&nbsp;=> 'Client ID', //表单的帮助提示&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;'secert_key' &nbsp;&nbsp;&nbsp;=> [&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'Secret Key',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'type' &nbsp;=> 'text',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'value' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tip' &nbsp;&nbsp;=> 'Secret Key',&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;'bucket' &nbsp;&nbsp;&nbsp;=> [&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'Bucket',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'type' &nbsp;=> 'text',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'value' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tip' &nbsp;&nbsp;=> '存储桶名称',&nbsp;&nbsp;&nbsp;&nbsp;],&nbsp;&nbsp;&nbsp;&nbsp;'region' &nbsp;&nbsp;&nbsp;=> [&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title' => 'Region',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'type' &nbsp;=> 'text',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'value' => '',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'tip' &nbsp;&nbsp;=> 'Bucket 所在区域',&nbsp;&nbsp;&nbsp;&nbsp;],];&nbsp;4、到后台存储对象接口管理界面刷新就会看到新添加的存储对象接口,安装、配置即可使用。&nbsp;四、示例参考腾讯云对象存储tencentcloud_oss&nbsp;五、常见问题
业务系统使用文档>12、应用管理>插件功能>提现
nbsp;二、功能特性·自定义提现方式,支持微信、支付宝、银行卡、比特币、现金等类型·支持自动提现和人工审核提现方式·支持设置冻结金额·支持设置单次提现最小额度与最大额度·支持设置提现次数限制·支持设置手续费比例以及最低手续费·提现成功后,后台自动添加交易流水三、安装1.完成支付后,在当前页面单击 “立即安装” 。2.在弹窗页面输入后台管理地址,即可一键安装本应用。例如,后台地址为https://idcsmat.com/admin,请在弹窗中输入admin。注:如果安装失败,请点击&nbsp;“下载安装包” 手动安装,安装包请保存至 /public/plugins/addon 。3.完成文件下载后,请登录管理后台,在左侧导航栏点击 “插件” - “插件列表”,在列表中找到 “提现” 应用,点击右侧操作栏中的 “安装” 即可。四、配置及应用1.首先需要在提现设置添加提现方式,如下图2.然后在余额提现设置处设置余额提现规则3.客户前台发起申请后,可以在申请列表查看提现申请并审核