包含“q”的产品文档
业务系统开发文档>官网、主题开发文档
一、会员中心主题会员中心主题分为两部分:系统主题,模块中的主题页面。1、系统主题,放在public/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主题
业务系统开发文档>模块开发文档
quot;zh-cn&quot;: {      add: &quot;添加&quot;,    },    &quot;zh-hk&quot;: {      add: &quot;添加&quot;,    },    &quot;en-us&quot;: {      add: &quot;Add&quot;,    },  };  const DEFAULT_LANG = localStorage.getItem(&quot;backLang&quot;) || &quot;zh-cn&quot;;  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 = [&quot;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='型号配置可选配置表';&quot;,];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 = &quot;<p>我是输出</p>&quot;;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 = &quot;<p>我是输出</p>&quot;;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 = &quot;<p>我是输出</p>&quot;;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 = &quot;<p>我是输出</p>&quot;;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 = &quot;<p>我是输出</p>&quot;;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 对应选项值  
业务系统开发文档>挂件开发文档
quot;top-item active-div&quot;><div><span>{$data['active_client_count']}</span></div> <div>          活跃用户(人)        </div> <div class=&quot;trend blue-text active-box&quot;>活跃率 {$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获取挂件数据需要返回一个数组, 返回的内容会通过 &quot;获取挂件数据&quot;接口返回 output 输出需要返回一个字符串用于显示,返回的内容支持html标签和javascript, 返回的内容会通过 &quot;获取挂件内容&quot;接口返回  三、通过hook增加挂件1、hook名称是 admin_widget2、返回的必须是实例化的挂件类,注意不要和挂件路径下的挂件冲突3、示例:add_hook(&quot;admin_widget&quot;, 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/单位设置
一、系统工作原理和要求二、使用前的设置三、查看流量图、95数据及用量图四、交换机服务器端口实时流量图五、其他设置    5.1 95计费和进出方向设置    5.2 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检测】进行检测。
业务系统开发文档>三方登录开发文档
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参数,必须使用该参数,系统会自动验证;示例:[&quot;app_id&quot;=>&quot;123&quot;,&quot;callback&quot;=>&quot;test.com&quot;,&quot;system_oauth_state&quot;=>&quot;123&quot;] 返回的类型: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 
业务系统开发文档>短信接口开发文档
quot;status&quot;=>&quot;success&quot;,&quot;template&quot;=>[&quot;template_id&quot;=>&quot;w3423&quot;,&quot;template_status&quot;=>2]];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;]createCnTemplate创建国内模板title:模板标题;content:模板内容;config:自定义配置;示例:[&quot;title&quot;=>&quot;test&quot;,&quot;content&quot;=>&quot;测试内容&quot;,&quot;config&quot;=>{&quot;key&quot;=>&quot;value&quot;}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:[&quot;status&quot;=>&quot;success&quot;,&quot;template&quot;=>[&quot;template_id&quot;=>&quot;w3423&quot;,&quot;template_status&quot;=>2]];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;] putCnTemplate修改国内模板title:模板标题;content:模板内容;config:自定义配置;示例:[&quot;title&quot;=>&quot;test&quot;,&quot;content&quot;=>&quot;测试内容&quot;,&quot;config&quot;=>{&quot;key&quot;=>&quot;value&quot;}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:[&quot;status&quot;=>&quot;success&quot;,&quot;template&quot;=>[&quot;template_id&quot;=>&quot;w3423&quot;,&quot;template_status&quot;=>2]];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;] deleteCnTemplate删除国内模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;成功示例:[&quot;status&quot;=>&quot;success&quot;];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;] sendCnSms发送国内短信mobile:手机号;content:模板内容;config:自定义配置;template_id:模板ID;templateParam:模板参数,参考附表1示例:[&quot;mobile&quot;=>&quot;129483782423&quot;,&quot;content&quot;=>&quot;测试内容&quot;,&quot;config&quot;=>{&quot;key&quot;=>&quot;value&quot;},'template_id'=>1,'templateParam'=>1]status:状态,success成功,error失败;content:已替换参数的模板内容;msg:错误信息成功示例:[&quot;status&quot;=>&quot;success&quot;,&quot;content&quot;=>&quot;测试内容&quot;];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;,&quot;content&quot;=>&quot;测试内容&quot;] getGlobalTemplate获取国际模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:[&quot;status&quot;=>&quot;success&quot;,&quot;template&quot;=>[&quot;template_id&quot;=>&quot;w3423&quot;,&quot;template_status&quot;=>2]];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;]createGlobalTemplate创建国际模板title:模板标题;content:模板内容;config:自定义配置;示例:[&quot;title&quot;=>&quot;test&quot;,&quot;content&quot;=>&quot;测试内容&quot;,&quot;config&quot;=>{&quot;key&quot;=>&quot;value&quot;}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:[&quot;status&quot;=>&quot;success&quot;,&quot;template&quot;=>[&quot;template_id&quot;=>&quot;w3423&quot;,&quot;template_status&quot;=>2]];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;] putGlobalTemplate修改国际模板title:模板标题;content:模板内容;config:自定义配置;示例:[&quot;title&quot;=>&quot;test&quot;,&quot;content&quot;=>&quot;测试内容&quot;,&quot;config&quot;=>{&quot;key&quot;=>&quot;value&quot;}]status:状态,success成功,error失败;template.template_id:模板ID;template.template_status:模板状态,0未提交,1审核中,2通过,3未通过;成功示例:[&quot;status&quot;=>&quot;success&quot;,&quot;template&quot;=>[&quot;template_id&quot;=>&quot;w3423&quot;,&quot;template_status&quot;=>2]];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;] deleteGlobalTemplate删除国际模板template_id:模板ID;config:自定义配置;示例:['template_id'=>1,'config'=>{}];status:状态,success成功,error失败;成功示例:[&quot;status&quot;=>&quot;success&quot;];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;] sendGlobalSms发送国际短信mobile:手机号;content:模板内容;config:自定义配置;template_id:模板ID;templateParam:模板参数,参考附表1示例:[&quot;mobile&quot;=>&quot;129483782423&quot;,&quot;content&quot;=>&quot;测试内容&quot;,&quot;config&quot;=>{&quot;key&quot;=>&quot;value&quot;},'template_id'=>1,'templateParam'=>1]status:状态,success成功,error失败;content:已替换参数的模板内容;msg:错误信息成功示例:[&quot;status&quot;=>&quot;success&quot;,&quot;content&quot;=>&quot;测试内容&quot;];失败示例:[&quot;status&quot;=>&quot;error&quot;,&quot;msg&quot;=>&quot;模板ID错误&quot;,&quot;content&quot;=>&quot;测试内容&quot;]  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之后添加的)        该加密机制以适配官方的主题模板,但若是使用了三方的主题模板,可能不支持加密,就会导致用户前台无法登录。解决办法一、更换为魔方官方的会员中心(不演示了)解决办法二、为 自定义的会员中心 关闭 登录加密功能。
魔方云系统使用文档>10. 网站管理与升级>资源包
管理员将各个资源配置打包成套餐类型(及资源包),这个资源包可以分配给代理用户,有资源包的代理商就可以进行实例创建、用户创建,类似于用户代理的模式。 1、进入资源包页面,创建资源包 2、资源包创建 3、将创建的资源包分配给用户使用注意:分配了资源包的用户就是代理商,可以根据资源包的配置创建实例或者创建子账户 4、管理员查看资源分配情况 5、代理商必须选择资源包,进行实例创建、子账户创建,当资源包里面的资源被使用完毕,则不能再创建实例/子账户  6、代理商查看自己名下资源包资源的使用情况