包含“c”的产品文档
业务系统使用文档>12、应用管理>插件功能>用户等级
csmat.com/admin,请在弹窗中输入admin。注:如果安装失败,请点击 “下载安装包” 手动安装,安装包请保存至 /public/plugins/addon 。3.完成文件下载后,请登录管理后台,在左侧导航栏点击 “插件” - “插件列表”,在列表中找到 “用户等级” 应用,点击右侧操作栏中的 “安装” 即可。四、配置1.点击插件列表中的用户等级插件--点击新建用户等级,如图设置完成后点击保存即可2.自定义用户等级基础信息内容及折扣五、应用1.进入用户个人资料详情页,点击用户等级下拉选择对应的用户等级并点击保存2.设置好用户等级之后我们就可以去前台下单对应商品,且享受到刚刚设置的折扣优惠了,如图所示
业务系统开发文档>官网、主题开发文档
c/clientarea/template/目录下,如官方default主题:public/clientarea/template/default;2、模块主题,放在public/plugins/server/模块/template/clientarea/目录下,以官方default主题为例:public/plugins/server/模块/template/default(这个待处理); 二、官网1、放在public/web/目录下,如public/web/default  三、购物车主题(待处理)购物车主题分为两部分:系统购物车主题,模块购物车主题1、系统购物车主题,放在public/cart/template/目录下,如官方default主题:Public/cart/template/default;2、模块购物车主题,放在public/plugins/server/模块/template/cart/目录下,以官方default主题为例:public/plugins/server/模块/template/cart/default; 开发方式具体参考对应目录下得default主题
业务系统开发文档>模块开发文档
controller(控制器目录)|----- home(前台控制器)|----- admin(后台控制器)|--- lang(语言)|----- zh-cn.php(中文简体)|----- en-us.php(English)|----- zh-hk.php(中文繁体)|--- model(模型目录)|--- template(前端代码目录)|--- validate(验证目录)|--- DemoModule.php(模块主文件)|--- route.php(路由)|--- hooks.php(钩子) 二.钩子由hooks.php实现例如, 实现after_host_delete钩子 add_hook('after_host_delete', function($param){    // 具体处理逻辑}); 注意:模块钩子一开始就会引入,需要在钩子里面自行增加判断,防止超出模块处理范围具体使用可以参考mf_dcim模块 三.多语言1、需要在lang目录下提前预设语言,为了防止模块语言不冲突,尽量把模块标识作为语言文件使用时使用 lang_plugins('语言标识',$param=[]) 实现多语言,该方法定义在系统app/common.php下具体使用可以参考mf_dcim模块 2、前端多语言   前台多语言文件:在template/clientarea/lang/index.js   后台多语言文件:在template/admin/lang/index.js   (function () {  const module_lang = {    "zh-cn": {      add: "添加",    },    "zh-hk": {      add: "添加",    },    "en-us": {      add: "Add",    },  };  const DEFAULT_LANG = localStorage.getItem("backLang") || "zh-cn";  window.module_lang = module_lang[DEFAULT_LANG];})();     具体参考idcsmart_common模块    四.路由注意:方法只有登录验证,其他鉴权需要开发者自己处理具体使用可以参考mf_dcim模块 五.系统方法和参数方法在模块主文件里实现,主文件类名和文件名一致 1.模块基础信息  metaData模块必须实现该方法 例子:public function metaData(){return ['display_name'=>'DCIM(自定义配置)', 'version'=>'1.0.4'];} 参数:无 返回: string display_name 模块名称string version 版本号 2.第一次使用模块创建该接口后  afterCreateFirstServer按需实现该方法,通常该方法用于添加模块需要的数据表模块表名建议idcsmart_module_+模块目录+具体,如idcsmart_module_mf_dcim_model_config_option_link 例子:public function afterCreateFirstServer(){$sql = ["CREATE TABLE `idcsmart_module_mf_dcim_model_config_option_link` (  `model_config_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT 'dcim型号配置id',  `option_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '可选配optionID',  `option_rel_type` tinyint(7) unsigned NOT NULL DEFAULT '0' COMMENT 'option表的rel_type',  KEY `idx_model_config_id` (`model_config_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='型号配置可选配置表';",];foreach($sql as $v){Db::execute($v);}} 参数:无 返回:无 3.删除最后一个使用该模块的接口  afterDeleteLastServer按需实现该方法,通常该方法用于删除模块添加的数据表 例子:public function afterDeleteLastServer(){$sql = ['drop table `idcsmart_module_mf_dcim_model_config_option_link`;',];foreach($sql as $v){Db::execute($v);}} 参数:无 返回:无 4.测试连接  testConnect建议实现该方法,通常使用该方法来测试和三方接口的连接状态是否可用使用位置: 后台-商品管理-接口管理页面 接口名称前面的状态 例子:public function testConnect($param){$res = [    'status' => 200,    'msg'    => '连接成功',];return $res;} 参数:ServerModel param.server 当前接口ServerModel,可直接获取相关接口参数 返回:int    status 状态(200=成功,400=失败)string msg    信息 5.产品模块开通  createAccount建议实现该方法,当产品自动开通或者在产品内页开通会调用该方法注意: 如果未实现该方法,开通时默认会成功 例子:public function createAccount($param){$res = [    'status' => 200,    'msg'    => '开通成功',];return $res;} 参数:HostModel    param.host   当前产品HostModel,可获取产品相关参数ClientModel  param.client 当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server 当前产品关联接口ServerModel,可获取关联接口相关参数 返回:int    status 状态(200=成功,400=失败)string msg    信息 6.产品模块暂停  suspendAccount建议实现该方法,当产品到期或其他原因暂停或者在产品内页暂停会调用该方法注意: 如果未实现该方法,暂停时默认会成功 例子:public function suspendAccount($param){$res = [    'status' => 200,    'msg'    => '暂停成功',];return $res;} 参数:HostModel    param.host   当前产品HostModel,可获取产品相关参数ClientModel  param.client 当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server 当前产品关联接口ServerModel,可获取关联接口相关参数string       param.suspend_type 暂停类型(overdue=到期暂停,overtraffic=超流暂停,certification_not_complete=实名未完成,other=其他,downstream=下游暂停)string       param.suspend_reason 暂停原因 返回:int    status 状态(200=成功,400=失败)string msg    信息 7.产品模块解除暂停  unsuspendAccount建议实现该方法,当产品解除暂停会调用该方法注意: 如果未实现该方法,解除暂停时默认会成功 例子:public function unsuspendAccount($param){$res = [    'status' => 200,    'msg'    => '解除暂停成功',];return $res;} 参数:HostModel    param.host   当前产品HostModel,可获取产品相关参数ClientModel  param.client 当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server 当前产品关联接口ServerModel,可获取关联接口相关参数 返回:int    status 状态(200=成功,400=失败)string msg    信息 8.产品模块删除  terminateAccount建议实现该方法,当产品模块删除时会调用该方法注意: 如果未实现该方法,删除时默认会成功 例子:public function terminateAccount($param){$res = [    'status' => 200,    'msg'    => '删除成功',];return $res;} 参数:HostModel    param.host   当前产品HostModel,可获取产品相关参数ClientModel  param.client 当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server 当前产品关联接口ServerModel,可获取关联接口相关参数 返回:int    status 状态(200=成功,400=失败)string msg    信息 9.产品续费后调用  renew建议实现该方法,当产品续费后会调用该方法 例子:public function renew($param){// 续费逻辑} 参数:HostModel    param.host   当前产品HostModel,可获取产品相关参数ClientModel  param.client 当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server 当前产品关联接口ServerModel,可获取关联接口相关参数 返回:无 10.升降级配置项后调用  changePackage按需实现该方法,当产品升降级配置项后会调用该方法 例子:public function changePackage($param){// 具体逻辑} 参数:HostModel    param.host   当前产品HostModel,可获取产品相关参数ClientModel  param.client 当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server 当前产品关联接口ServerModel,可获取关联接口相关参数 返回:无 11.升降级商品后调用  changeProduct按需实现该方法,当产品升降级商品后会调用该方法 例子:public function changeProduct($param){// 具体逻辑} 参数:HostModel    param.host   当前产品HostModel,可获取产品相关参数ClientModel  param.client 当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server 当前产品关联接口ServerModel,可获取关联接口相关参数array        param.custom 升降级参数 返回:无 12.购物车价格计算  cartCalculatePrice必须实现该方法,当商品计算价格或结算时会调用该方法 例子:public function cartCalculatePrice($param){$res = [     'status' => 200,             'msg'    => '请求成功',     'data'   => [  'price' => 1.1,  'renew_price' => 1.1,                  'billing_cycle' => '月',  'duration' => 30*24*3600,  'description' => 'CPU:2核,内存:4G通用型云主机',  'base_price' => 1.1     ]];return $res;} 参数:ProductModel param.product当前商品ProductModel,可获商品相关参数array  param.custom 模块自定义参数int    param.qty    商品数量string param.scene  场景(cal_price=计算价格,buy=结算) 返回: int    status 状态(200=成功,400=失败)string msg    信息float  data.price 价格float  data.renew_price 续费价格string data.billing_cycle 周期名称int data.duration 周期时长(秒)string data.description 订单子项描述float data.base_price 基础价格 13.后台商品接口配置输出  serverConfigOption建议实现该方法位置: 后台-商品管理-商品内页-接口管理,关联接口或接口分组后下方输出 例子:public function serverConfigOption($param){$res = ['template'=>'template/admin/mf_dcim.html','vars'   => []];// $res = "<p>我是输出</p>";return $res;} 参数:ProductModel param.product当前商品ProductModel,可获取商品相关参数 返回:string|array返回string时:要输出的内容返回array时:string template 模板地址,从模块根目录开始算array  vars     替换模板变量,注意不要和系统变量冲突,使用thinkphp自带模板语法 14.前台导航产品列表  hostList必须实现该方法 例子:public function hostList($param){$res = ['template'=>'template/clientarea/product_list.html','vars'   => []];// $res = "<p>我是输出</p>";return $res;} 参数:array param.product_id 当前导航关联的所有商品ID 返回:string|array返回string时:要输出的内容返回array时:string template 模板地址,从模块根目录开始算array  vars     替换模板变量,注意不要和系统变量冲突,使用thinkphp自带模板语法 15.前台产品内页输出  clientArea必须实现该方法 例子:public function clientArea($param){$res = ['template'=>'template/clientarea/product_detail.html','vars'   => []];// $res = "<p>我是输出</p>";return $res;} 参数:HostModel    param.host    当前产品HostModel,可获取产品相关参数ClientModel  param.client  当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product 当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server  当前产品关联接口ServerModel,可获取关联接口相关参数 返回:string|array返回string时:要输出的内容返回array时:string template 模板地址,从模块根目录开始算array  vars     替换模板变量,注意不要和系统变量冲突,使用thinkphp自带模板语法 16.后台产品内页输出  adminArea按需实现该方法位置: 后台-用户管理-用户列表-用户详情-产品信息最底部输出 例子:public function adminArea($param){$res = ['template'=>'template/admin/product_detail.html','vars'   => []];// $res = "<p>我是输出</p>";return $res;} 参数:HostModel    param.host    当前产品HostModel,可获取产品相关参数ClientModel  param.client  当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product 当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server  当前产品关联接口ServerModel,可获取关联接口相关参数 返回:string|array返回string时:要输出的内容返回array时:string template 模板地址,从模块根目录开始算array  vars     替换模板变量,注意不要和系统变量冲突,使用thinkphp自带模板语法 17.前台商品购买页面输出  clientProductConfigOption必须实现该方法,否则将不能购买该商品位置: 前台-订购产品-具体商品购买 例子:public function clientProductConfigOption($param){$res = ['template'=>'template/clientarea/goods.html','vars'   => []];// $res = "<p>我是输出</p>";return $res;} 参数:ProductModel param.product 当前商品ProductModel,可获取商品相关参数 返回:string|array返回string时:要输出的内容返回array时:string template 模板地址,从模块根目录开始算array  vars     替换模板变量,注意不要和系统变量冲突,使用thinkphp自带模板语法 18.结算之后调用  afterSettle建议实现该方法,一般用于存入关联关系 例子:public function afterSettle($param){// 具体逻辑} 参数:ProductModel param.product      当前商品ProductModel,可获取商品相关参数int          param.host_id      创建的产品IDarray        param.custom       模块自定义参数array        param.customfields 其他自定义参数 返回:无  19.获取当前产品所有周期价格  durationPrice建议实现该方法, 一般用于给续费提供周期价格 例子:public function durationPrice($param){$res = [    'status' => 200,    'msg'    => '请求成功',            'data'   => [[   'duration' => 30*24*3600,                   'billing_cycle' => '月',           'price' => 1.1,]    ]  ];} 参数:HostModel    param.host    当前产品HostModel,可获取产品相关参数ClientModel  param.client  当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product 当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server  当前产品关联接口ServerModel,可获取关联接口相关参数 返回:int status 状态(200=成功,400=失败)string msg 信息float data[].price  价格string data[].billing_cycle 周期名称int data[].duration 周期时长(秒) 20.获取商品起售周期价格  getPriceCycle建议实现该方法显示位置:后台-商品管理-商品管理-商品内页基础信息-商品起售价格前台-订购商品列表周期价格 例子:public function getPriceCycle($param){$res = [    'price' => 1.1,    'cycle' => '月',  ];return $res;} 参数:ProductModel param.product 当前商品ProductModel,可获取商品相关参数 返回float  price 商品起售价格string cycle 周期 21.下载上游资源  downloadResource按需实现该方法如果需要实现上下游,需要使用该方法, 并且需要实现对应的reserver模块,同时把reserver模块打包在该模块中 例子:public function downloadResource($param){$res = [    'status' => 200,    'msg'    => '获取成功',    'data'   => ['module' => 'mf_dcim','url'    => request()->domain() . '/plugins/server/mf_dcim/data/abc.zip',                'version'=> '1.0.1',            ]  ];return $res;} 参数:ProductModel param.product 当前商品ProductModel,可获取商品相关参数 返回:int status 状态(200=成功,400=失败)string msg 信息string data.module 对应reserver模块名称string data.url 对应reserver模块zip包string version 当前模块版本号 22.产品内页模块配置信息输出  adminField按需实现该方法位置:用户管理-用户列表-用户内页-产品信息-产品内页配置信息 例子:public function adminField($param){$res = [    ['name'  => '基础配置',                'field' => [     [ 'name'    => '数据中心',                         'key'     => 'data_center',                         'value'   => '中国-香港',                         'disable' => true,     ]]    ]  ];return $res;} 参数:HostModel    param.host    当前产品HostModel,可获取产品相关参数ClientModel  param.client  当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product 当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server  当前产品关联接口ServerModel,可获取关联接口相关参数 返回:string [].name 配置小标题string [].field[].name    名称string [].field[].key     标识(不要重复)string [].field[].value   当前值bool   [].field[].disable 状态(false=可修改,true=不可修改) 23.产品保存后  hostUpdate按需实现该方法,该方法建议和adminField方法一起使用 例子:public function hostUpdate($param){// 实现配置变更逻辑} 参数:HostModel    param.host    当前产品HostModel,可获取产品相关参数ClientModel  param.client  当前产品所属用户ClientModel,可获取产品所属用户相关参数ProductModel param.product 当前产品所属商品ProductModel,可获取产品对应商品相关参数ServerModel  param.server  当前产品关联接口ServerModel,可获取关联接口相关参数array        param.module_admin_field 模块自定义配置信息(键是配置标识,值是填写的内容) 返回:int status 状态(200=成功,400=失败)string msg 提示信息 24.获取商品所有配置项  allConfigOption不推荐使用该方法,需要返回商品的所有配置 例子:public function allConfigOption($param){$res = [     'status' => 200,     'msg'    => '获取成功',             'data'   => [                  [                       'name'  => '内存',                       'field' => 'memory',                       'type'  => 'dropdown',                       'option'=> [                            [                                'name' => '2G',                                'value'=> '2',                            ]                       ]                  ]             ]];return $res;} 参数:ProductModel param.product 当前商品ProductModel,可获取商品相关参数 返回:int status 状态(200=成功,400=失败)string msg 信息string data[].name  配置项名称string data[].field 订购时对应配置的键string data[].type  类型(dropdown=下拉),只支持下拉string data[].option[].name 选项名称int|string data[].option[].value 对应选项值  
业务系统开发文档>挂件开发文档
一、挂件路径1、public/plugins/widget/目录下2、挂件文件名不能重复,挂件文件名以大写开头的驼峰命名,如: ActiveClient 二、挂件类1、文件名和类名保持一致,挂件标识即文件名,如: public/plugins/widget/ActiveClient.php<?php namespace widget; use app\common\lib\Widget;use app\common\model\ClientModel; class ActiveClient extends Widget{    protected $title = '活跃用户';     protected $weight = 60;        protected $columns = 1;     public function getData()    {     $data = [];     $active = ClientModel::where('status', 1)->where('last_login_time', '>=', time()-15*24*3600)->count();        $count = ClientModel::where('status', 1)->count();        $data['active_client_count'] = $active;        $data['active_client_percent'] = $count>0 ? bcmul(($active/$count), 100, 1) : '0.0';     return $data;    }     public function output(){     $data = $this->getData();     return <<<HTML<div class="top-item active-div"><div><span>{$data['active_client_count']}</span></div> <div>          活跃用户(人)        </div> <div class="trend blue-text active-box">活跃率 {$data['active_client_percent']}%</div> <div><span></span> <span></span> <span></span> <span></span></div></div>HTML;    } 2、挂件类必须继承  app\common\lib\Widget 3、挂件属性$title  挂件名称,必须$weight   挂件排序权重,越小越靠前,默认=100,$columns   挂件占用列数,范围1-4,默认=1 4、挂件必须实现 getData,output方法方法名称描述参数返回getData获取挂件数据需要返回一个数组, 返回的内容会通过 "获取挂件数据"接口返回 output 输出需要返回一个字符串用于显示,返回的内容支持html标签和javascript, 返回的内容会通过 "获取挂件内容"接口返回  三、通过hook增加挂件1、hook名称是 admin_widget2、返回的必须是实例化的挂件类,注意不要和挂件路径下的挂件冲突3、示例:add_hook("admin_widget", function(){return new ActiveClient();}); 四、挂件上传后,需要重新登录,在管理组添加对应挂件权限就可使用    
DCIM使用文档>3.功能介绍>3.4 产品销售>3.4.6 产品销售常见问题
以下对接WHMCS销售过程中的常见问题,文档未解决的问题请联系我们。问题列表在WHMCS订购并收到付款后,并不能实现自动开通是什么原因?在自动开通时,提示[无法连接服务器管理系统],是什么原因?在WHMCS自动开通服务器时,提示[交换机没有可用的VLAN,请先设置],需如何解决?在WHMCS自动开通服务器时,提示[可分配的IP不足,只可分配0个]是什么原因?在WHMCS中,对服务器点击开机时,提示[模块命令错误,产品不一致,无法操作]是什么原因?在WHMCS中,对机器进行暂停或删除命令时,会对服务器执行哪些命令?WHMCS与DCIM可以不在同一服务器上吗?WHMCS系统中,在实现自动开通时,有些操作按钮不存在该怎么解决在产品销售-服务器租用里,点击客户信息后,出现404页面,该怎么解决?问题解答1.在WHMCS订购并收到付款后,并不能实现自动开通是什么原因?        (1)在WHMCS添加产品时,注意在【模块设置】中,需勾选【当收到客户首付款时自动开通】.        (2)如果已经设置为自动开通,确没有自动开通,请尝试手动点击开通,看具体错误是什么原因。2.在自动开通时,提示[无法连接服务器管理系统],是什么原因?        (1)请检查DCIM系统-【系统设置】-【API授权】中的IP地址是否填写正确,该地址必须为WHMCS系统的IP地址(如果服务器有多个IP,需要填写主IP)。        (2)检查WHMCS系统中,通过【导航栏】-【系统设置】-【产品/服务】-【服务器设置】中,主机名与IP必须是DCIM系统的主IP。            (3)在【服务器详情】区域,类型必须为IPMI,且用户名和密码必须是DCIM系统种设置的API授权中的用户名和IP。3.在WHMCS自动开通服务器时,提示[交换机没有可用的VLAN,请先设置],需如何解决?        在服务器详情页面,点击交换机信息进入交换机详情页面,然后在连接信息区域点击可用VLAN后方区域设置。4.在WHMCS自动开通服务器时,提示[可分配的IP不足,只可分配0个]是什么原因?        在【DCIM系统】-【IP资源管理】中,IP段必须启用自动分配才支持开通服务器时自动分配。5.在WHMCS中,对服务器点击开机时,提示[模块命令错误,产品不一致,无法操作]是什么原因?        出现这个问题的原因时因为DCIM系统中记录的该服务器用户和WHMCS系统中记录的用户不是同一个,只需要在DCIM系统中清除销售数据里面的用户信息,然后在WHMCS系统后台产品详情页点击状态同步按钮即可解决。6.在WHMCS中,对机器进行暂停或删除命令时,会对服务器执行哪些命令?         这些命令会根据您在【DCIM系统设置】的【WHMCS设置】里面执行。7.WHMCS与DCIM可以安装在不同服务器吗?        可以,DCIM系统和WHMCS两套系统是分开的。用API对接,WHMCS管理财务和客户。DCIM管理服务器资源。通过WHMCS的server modules对接,实现WHMCS里面记录一个客户有哪个服务器,操作到DCIM,对接对WHMCS本身不会有任何数据查询和资料变动。8.WHMCS系统中,在实现自动开通时,有些操作按钮不存在该怎么解决?        这些功能需要在配置IPMI WHMCS插件的时候在参数里面设置,具体参考:ipmi插件配置Access Hash(访问散列值)参数说明9.在产品销售-服务器租用里,点击客户信息后,出现404页面,该怎么解决?        在DCIM系统设置 - 【WHMCS设置】里面,输入正确的WHMCS后台地址即可。
DCIM使用文档>3.功能介绍>3.6 数据与监控>3.6.1 流量图相关设置 cvs/单位设置
csv数据下载    5.3 设置流量频率    5.4 流量图进制换算六、其他问题    6.1 储存时间    6.2 断点的情况    6.3 交换机Snmp连接失败一、系统工作原理和要求系统内置流量图功能,无需部署mrtg或zabbix等流量图软件,即可实现流量图和每日用量统计,流量图还可导出为csv数据及单位换算选项,以适应不同的客户场景。DCIM系统流量图是通过交换机SNMP获取,因此确保交换机SNMP在系统中能正常连接。二、使用前的设置①添加交换机设备。详细请查看:>>如何添加交换机②snmp拉取成功。详细请查看:>> 如何填写SNMP信息三、查看流量图和用量图①查看流量图及95数据实时监控交换机各端口的进出口带宽规模和网速,并对每个端口分别统计流量以及帐户流量消耗信息。【设备管理】-【物理服务器/交换机】-点击交换机标签,进入设备摘要,下拉页面即可看到流量图及95信息。②查看用量图在交换机页面中点击用量信息,统计出交换机出入口流量计总流量使用情况。注:如交换机snmp连接异常,则无法获取数据四、交换机服务器端口实时流量图【设备管理】-【物理服务器】-点击交换机名称进入服务器摘要图,点击查看流量图。五、其他设置 ①95计费和进出方向设置实现对端口、机柜租用、服务器租用/托管的流量95th计费能力,包含进方向、出方向、进出双向三种类型的自由计费组合。【系统设置】栏选择【常规设置】-【流量设置】,在【流量图95线】中选择3种设置。② csv数据下载选择【交换机端口】和【查看时间】后,点击【导出CSV】后,会下载一个excel表格文件。打开excel表格,即可清晰看到交换机端口在所选时间段中进/出带宽每秒所传输的速率,如下图。③设置流量频率【系统设置】栏选择【常规设置】,在【流量采集间隔】中选择频率。④流量图进制换算可根据需求,选择流量图单位换算,进制分别是1000/1024。【系统设置】栏选择【常规设置】,在【流量图换算单位进制】中选择单位进制。六、其他问题①流量图数据会存储多久?流量数据理论上永久存在被控设备上,请确保硬盘正常工作。若使用交换机重建流量图功能,则会清空之前的流量数据,请谨慎操作。②流量图为什么出现了断点的情况?    网络状况异常被控硬盘性能不足③我的交换机为什么snmp连接失败?请确保交换机snmp信息填写正确,可前往【检测工具】-【SNMP检测】进行检测。
业务系统开发文档>三方登录开发文档
c\plugins\oauth\ 目录下 二、目录结构\public\plugins\oauth\qq\|--- Qq.php (入口文件)|--- config.php (配置项客户配置项,在插件设置中显示)|--- qq.svg (登录界面上要显示的图片 三、开发流程(本文以QQ为例) 1、创建QQ目录,示例\public\plugins\oauth\qq\目录名以 小写字母+下划线 形式,必须以字母开头,如 qq 2、创建config.php注意返回的键不要是name,callback,state,code,system_oauth_state以及三方跳转自带的参数,示例return [    'app_key'            => [    # 在后台插件配置表单中的键名(统一规范:小写+下划线),会是config[app_key]         'title' => 'AppKey',            # 表单的label标题         'type'  => 'text',           # 表单的类型:text文本,password密码,checkbox复选框,select下拉,radio单选,textarea文本区域,tip提示         'value' => '',     # 表单的默认值         'tip'   => 'AppKey',  # 表单的帮助提示    ],    'app_secret'    => [        'title' => 'AppSecret',        'type'  => 'text',        'value' => '',        'tip'   => 'AppSecret',    ],]; 3、创建入口文件①示例:Qq.php ②操作步骤命名空间 namespace oauth\qq (控制器下命名空间对应相应目录即可,其它同理);以目录名 大驼峰+.php ,创建在根目录下,如 qq\Qq.php,类需要继承app\common\lib\Oauth ③文件中需要定义info属性,示例:// 插件基础信息public $info = ['name'        => 'Qq',      // 必填 插件标识,一般就是该类名 (唯一)'title'       => 'QQ',      // 必填 插件显示名称'description' => 'QQ',      // 必填 插件功能描述'author'      => 'idcsmart',// 必填 作者'version'     => '1.0.0',   // 必填 插件版本'author_url'  => '',        // 选填 作者链接'help_url'    => 'https://connect.qq.com/', // 选填 申请链接        'logo_url'    => 'qq.svg',  // 必填 图标地址]; ④必须实现url和callback 两个方法方法名称描述请求地址参数返回url生成授权地址 GET /console/v1/oauth/:name;name为插件标识接收参数$params ,$params是数组,包含了下面两种信息;数组包含了config.php中的所有参数(key相同,注意不要覆盖了三方的信息),外加一个$params['callback']回调地址;$params['system_oauth_state']如果授权地址需要state参数,必须使用该参数,系统会自动验证;示例:["app_id"=>"123","callback"=>"test.com","system_oauth_state"=>"123"] 返回的类型:string返回的数据:三方登录地址示例:https://graph.qq.com/oauth2.0/authorize/testcallback处理回调GET /console/v1/oauth/callback/:name, name是插件标识接收参数$params ,$params是数组,包含了下面三种信息 数组包含了config.php中的所有参数(key相同,注意不要覆盖了三方的信息)外加一个$params['callback']回调地址三方登录成功后跳转返回的参数 返回的类型:array返回的数据:示例:return ['openid' => '', // 必须,三方登录授权成功后返回的用户唯一标识'data'  => ['username' => '',  // 可选,名称],];  ⑤实现可选方法方法名称描述请求地址参数返回receive如果需要接受三方服务商推送信息,可以使用该接口来实现 ANY /console/v1/oauth/:name/command/receive, :name是插件标识数组包含了config.php中的所有参数(key相同,注意不要覆盖了三方的信息) 数组可能不会包含请求体参数, 需要自行获取 返回:根据要求自行返回中断即可  4、查看到后台插件管理界面刷新就会看到新添加的插件,安装、配置即可使用。 四、示例1、参考qyweixin,qq,weixin,dingtalk2、系统源码参考app\home\controller\OauthControllerapp\home\model\OauthModel 
业务系统开发文档>短信接口开发文档
c\plugins\sms\目录下 二、目录结构以智简魔方官方短信平台接口为例,其主要目录结构如下:\public\plugins\sms\idcsmart\|--- Idcsmart.php (入口文件)|--- config.php (配置项客户配置项,在插件设置中显示) 三、开发流程以智简魔方官方短信平台接口为例:1、创建实名认证目录\public\plugins\sms\idcsmart\;①目录名以小写字母+下划线形式,必须以字母开头,如idcsmart; 2、创建入口文件:Idcsmart.php:①命名空间namespace sms\idcsmart(控制器下命名空间对应相应目录即可,其它同理);②以目录名大驼峰+.php,创建在短信接口根目录下,如idcsmart\Idcsmart.php;③文件中需要定义info属性,示例:# 基础信息public $info = array(    'name'        => 'Idcsmart',//Demo插件英文名,改成你的插件英文就行了    'title'       => '智简魔方',    'description' => '智简魔方官方短信平台接口',    'status'      => 1,    'author'      => '智简魔方',    'version'     => '1.0.1',    'help_url'     => 'https://my.idcsmart.com/goods.htm?id=922',//申请接口地址);④必须实现install()安装以及uninstall()卸载方法,没有额外操作,返回true即可;⑤需要实现以下方法方法名称描述参数返回getCnTemplate获取国内模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"]createCnTemplate创建国内模板title:模板标题;content:模板内容;config:自定义配置;示例:["title"=>"test","content"=>"测试内容","config"=>{"key"=>"value"}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"] putCnTemplate修改国内模板title:模板标题;content:模板内容;config:自定义配置;示例:["title"=>"test","content"=>"测试内容","config"=>{"key"=>"value"}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"] deleteCnTemplate删除国内模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;成功示例:["status"=>"success"];失败示例:["status"=>"error","msg"=>"模板ID错误"] sendCnSms发送国内短信mobile:手机号;content:模板内容;config:自定义配置;template_id:模板ID;templateParam:模板参数,参考附表1示例:["mobile"=>"129483782423","content"=>"测试内容","config"=>{"key"=>"value"},'template_id'=>1,'templateParam'=>1]status:状态,success成功,error失败;content:已替换参数的模板内容;msg:错误信息成功示例:["status"=>"success","content"=>"测试内容"];失败示例:["status"=>"error","msg"=>"模板ID错误","content"=>"测试内容"] getGlobalTemplate获取国际模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"]createGlobalTemplate创建国际模板title:模板标题;content:模板内容;config:自定义配置;示例:["title"=>"test","content"=>"测试内容","config"=>{"key"=>"value"}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"] putGlobalTemplate修改国际模板title:模板标题;content:模板内容;config:自定义配置;示例:["title"=>"test","content"=>"测试内容","config"=>{"key"=>"value"}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:["status"=>"success","template"=>["template_id"=>"w3423","template_status"=>2]];失败示例:["status"=>"error","msg"=>"模板ID错误"] deleteGlobalTemplate删除国际模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;成功示例:["status"=>"success"];失败示例:["status"=>"error","msg"=>"模板ID错误"] sendGlobalSms发送国际短信mobile:手机号;content:模板内容;config:自定义配置;template_id:模板ID;templateParam:模板参数,参考附表1示例:["mobile"=>"129483782423","content"=>"测试内容","config"=>{"key"=>"value"},'template_id'=>1,'templateParam'=>1]status:状态,success成功,error失败;content:已替换参数的模板内容;msg:错误信息成功示例:["status"=>"success","content"=>"测试内容"];失败示例:["status"=>"error","msg"=>"模板ID错误","content"=>"测试内容"]  3、创建默认短信模板①在插件根目录下创建config/smsTemplate.php文件;②文件内容返回一个数组即可,如下:return [    [        'title' => '验证码',        'content' => '验证码@var(code),5分钟内有效!请勿泄漏于他人',        'name'=>'code'    ],]title标题;content内容,带参数;name为系统模板标识,唯一;③系统默认模板参考附表2;④在install安装中返回模板数组,系统会自动创建模板; 4、到后台短信通知管理,可以查看接口列表,安装、配置即可使用。 四、示例参考智简魔方官方短信平台接口idcsmart 五、附附表1、templateParam参数列表(国际国内参数一样)参数名描述类型示例system_website_name系统网站名系统智简魔方system_website_url系统网站地址系统www.idcsmart.comorder_id订单ID订单125order_create_time订单创建时间订单1707094285order_amount订单金额订单1.00product_name产品名称(包括商品名和主机名)产品测试-ser23142123product_marker_name商品名称产品测试product_first_payment_amount产品首付金额产品100.00product_renew_amount产品续费金额产品100.00product_binlly_cycle产品周期产品计费周期免费free,一次onetime,周期先付recurring_prepayment,周期后付recurring_postpaidproduct_active_time产品激活时间产品1707094285product_due_time产品到期时间产品1707094285product_suspend_reason产品暂停原因产品到期暂停renewal_first续费X天后到期第一次提醒产品1renewal_second续费X天后到期第二次提醒产品2client_register_time客户注册时间客户1707094285client_username用户名客户testclient_email邮件客户135460@qq.comclient_phone手机号客户16548765643client_company公司客户智简魔方client_last_login_time最后登录时间客户1707094285client_last_login_ip最后登录ip客户122.32.13.3account账户名客户test 附表2、系统默认短信模板(以下模板内容为官方短信平台模板内容,使用需修改)系统模板标识(name)模板标题(title)模板类型模板内容(content)示例code验证码系统验证码@var(code),5分钟内有效!请勿泄漏于他人client_login_success用户登录客户您的账号@var(account)成功登录系统,如不是本人操作请及时修改密码client_register_success用户注册客户@var(account),感谢您支持@var(system_website_name)client_change_phone客户更改手机客户您的手机号被改为:@var(client_phone),请注意账户安全client_change_password客户更改密码客户您的密码被改为:@var(client_password),请注意账户安全order_create订单创建订单您已下单,订单:@var(order_id)(订单号),请及时支付host_pending产品开通中产品您的产品:@var(product_name)(产品名称)正在开通,请耐心等待host_active开通成功产品您的产品:@var(product_name)(产品名称),已开通可使用host_suspend产品暂停通知产品您的产品:@var(product_name)(产品名称),由于@var(product_suspend_reason),已停用host_unsuspend产品解除暂停通知产品您的产品:@var(product_name)(产品名称),已解除暂停host_terminate产品删除通知产品您的产品:@var(product_name)(产品名称),由于到期未续费,已删除host_upgrad产品升降级产品您已成功升级产品@var(product_name),感谢您的支持host_renewal_first第一次续费提醒产品您的产品:@var(product_name)(产品名称),还有@var(renewal_first)天到期,请及时续费host_renewal_second第二次续费提醒产品您的产品:@var(product_name)(产品名称),还有@var(renewal_second)天到期,请及时续费host_overdue_first逾期付款第一次提醒产品您的产品:@var(product_name)(产品名称)已到期,将会删除,请及时续费host_overdue_second逾期付款第二次提醒产品您的产品:@var(product_name)(产品名称)已到期,将会删除,请及时续费host_overdue_third逾期付款第三次提醒产品您的产品:@var(product_name)(产品名称)已到期,将会删除,请及时续费order_overdue订单未付款通知订单您的订单:@var(order_id)(订单号)尚未支付,金额@var(order_amount),请及时支付admin_order_amount订单金额修改订单您的订单:@var(order_id)(订单号)金额修改为@var(order_amount),请及时支付order_pay订单支付通知订单您的订单:@var(order_id)(订单号)支付成功,支付金额为:@var(order_amount)元order_recharge充值成功通知订单充值成功,本次充值金额为:@var(order_amount)元 
财务系统使用文档>其他>财务更新后-前台用户无法登录
若是升级前,魔方财务前台用户中心可以正常登录,升级后,提示用户密码错误。具体报错如下所示。        注意:该问题不是BUG,而是更新后的财务,增加了会员中心加密功能,增强了安全性。(该特性是 V3.6.1之后添加的)        该加密机制以适配官方的主题模板,但若是使用了三方的主题模板,可能不支持加密,就会导致用户前台无法登录。解决办法一、更换为魔方官方的会员中心(不演示了)解决办法二、为 自定义的会员中心 关闭 登录加密功能。