包含“F”的产品文档
魔方云系统使用文档>5. 备份和恢复数据>被控高可用
f-cloud_new -O install-zjmf-cloud_new && chmod +x install-zjmf-cloud_new && ./install-zjmf-cloud_new -onlyctl 2、其次,需要在魔方云主控面板上的:区域管理-修改页面,点击高级,将备用被控的服务器ip地址,填写到备用被控ip处,多个ip用英文逗号分隔。注意:填写在此处的备用被控的鉴权账号和鉴权密码,必须与页面填写的被控用户和被控密码保持一致  3、如遭遇突发情况导致被控挂掉,系统自动切换至备用被控后,节点如果报错提示:请求来源错误,需要在节点执行:sed -i '/^ip=/ s/^ip=.*$/ip=null/g' /usr/local/zjmf/conf/zjmf.conf
业务系统开发文档>支付接口开发
f\|--- controller (外部调用)|--- config|--- config.php(支付宝接口配置项,【回调地址,编码格式,签名方式,支付宝网关】)|--- AliPayDmf.php (入口文件)|--- config.php (配置项客户配置项,在插件设置中显示)|--- AliPayDmf.png (支付界面上要显示的图片) 三、开发流程以支付宝当面付为例:1、创建支付宝当面付目录\public\plugins\gateway\ali_pay_dmf\;①目录名以小写字母+下划线形式,必须以字母开头,如ali_pay_dmf; 2、创建入口文件:AliPayDmf.php:①命名空间namespace gateway\ali_pay_dmf(控制器下命名空间对应相应目录即可,其它同理);②以目录名大驼峰+.php,创建在支付接口根目录下,如ali_pay_dmf\AliPayDmf.php;③文件中需要定义info属性,示例:// 插件基础信息public $info = array(    'name'        => 'AliPayDmf', // 必填 插件标识(唯一)    'title'       => '支付宝当面付插件', // 必填 插件显示名称    'description' => '支付宝当面付插件', // 必填 插件功能描述    'author'      => 'idcsmart', // 必填 插件作者    'version'     => '1.0',  // 必填 插件版本    'help_url'    => '', // 选填 申请链接    'author_url'  => '', // 选填 作者链接    'url'         => '', // 选填 图标地址(可以自定义支付图片地址));④定义临时订单生成规则,系统默认规则1:// 临时订单生成规则,1:毫秒时间戳+8位随机数(21-22位长度订单号,默认规则),2:时间戳+8位随机数(18位长度订单号),3:10位随机数(10位长度订单号)public $orderRule=1;⑤必须实现install()安装以及uninstall()卸载方法⑥必须实现入口方法,发起支付:目录名大驼峰+Handle;如public function AliPayDmfHandle($param),参数param(此参数为数组,示例json方便显示):{"out_trade_no":"1660030044500783722161","client":{"id":62,"username":"wyh","company":"智简魔方","address":"少时诵诗书所所所所所所所所所所所所所所所所","country":"中国","phone_code":86,"phone":"12345678910","email":""},"product":["魔方云)"],"global":{"website_name":"智简魔方","website_url":"https:\\test.test.com"},"finance":{"id":1728,"total":"500.00","tmp_order_id":"1660030044500783722161","tmp_order_id2":"166003004463630999","tmp_order_id3":"5075991847"}}参数说明:out_trade_no:临时订单号;client.id:客户ID;client.username:客户姓名;client.company:公司;client.address:地址;client.country:国家;client.phone_code国家区号;client.phone:电话;client.email:邮件;product:商品数组;global.website_name网站名称;global.website_url:网站地址;finance.id:订单号;finance.total:订单金额;finance.tmp_order_id规则1的临时订单号;finance.tmp_order_id2规则2的临时订单号;finance.tmp_order_id3规则3的临时订单号;⑦入口方法(发起支付)返回html即可,系统会将html渲染至支付输出页面;⑧(新增,10.4.3版本后可用)可选方法,发起退款:目录名大驼峰+HandleRefund;如public function AliPayDmfHandleRefund($param),参数param(此参数为数组,示例json方便显示):{"transaction_number":"202412346234234","amount":0.01,"out_request_no":"2024234425","total_fee":0.01,}参数说明:transaction_number订单交易流水号,amount退款金额,out_request_no退款请求号,标识一次退款请求,需要保证在交易号下唯一,如需部分退款,则此参数必传,total_fee总金额;方法返回:成功:{"status":200,"msg":"","data":{"trade_no":"2348729483"}}trade_no为交易流水号失败:{"status":400,"msg":"失败原因"}  3、确定是否需要后台配置文件,如果需要,在支付接口根目录下加上config.php,示例:return [    'module_name'            => [    # 在后台插件配置表单中的键名(统一规范:小写+下划线),会是config[module_name]        'title' => '名称',            # 表单的label标题        'type'  => 'text',           # 表单的类型:text文本,password密码,checkbox复选框,select下拉,radio单选,textarea文本区域,tip提示        'value' => '支付宝当面付',     # 表单的默认值        'tip'   => 'friendly name',  # 表单的帮助提示        'size'  => 200,               # 输入框长度(当type类型为text,password,textarea,tip时,可传入此键)    ],    'app_id'                 => [        'title' => 'appID',        'type'  => 'text',        'value' => '',        'tip'   => '',        'size'  => 200,    ],    'merchant_private_key'   => [        'title' => '商户私钥',        'type'  => 'text',        'value' => '',        'tip'   => '',        'size'  => 200,    ],    'alipay_public_key'      => [        'title' => '支付宝公钥',        'type'  => 'text',        'value' => '',        'tip'   => '',        'size'  => 200,    ],    # 此配置作为范例    'mode'                   => [        'title'      => '模式',        'type'       => 'radio',        'options'    => [            # 当type类型为checkbox,select,radio时,需要有此键,作为选项            'debug'  => '调试',            'online' => '上线',        ],        'value'      => 'online',        'tip'        => '请选择模式',        'attribute'  => 'disabled',  # 属性,加入此键:disabeld表示禁止编辑,只能看;    ],]; 4、需要外部访问,在根目录下创建controller目录,添加控制器,处理异步或同步回调;①创建自定义控制器,如controller/IndexController.php;②自定义异步回调方法,如notifyHandle(),则异步回调地址为:网站地址/gateway/ali_pay_dmf/index/notifyHandle;③在②的方法中处理支付回调逻辑,进行订单等的验证;④支付成功调系统订单处理方法order_pay_handle($param),传入数组参数:$param = [     ‘tmp_order_id’ => 123456, // 临时订单ID     ‘amount’ => 1.00, // 支付金额     ‘trans_id’ => 22483701327490139472, // 交易流水ID     ‘currency’ => ‘CNY’, // 货币代码     ‘paid_time’ => ‘2022-08-09 15:52:19’, // 时间,注意必须是此标准格式     ‘gateway’ => ‘AliPayDmf’, // 支付接口标识]; 5、到后台支付接口管理界面刷新就会看到新添加的支付接口,安装、配置即可使用。6、(新增,10.4.3版本后可用)对于同步回调的跳转地址,可以通过订单ID调用系统方法获取:get_gateway_return_url($tmp_order_id) 四、示例参考支付宝当面付ali_pay_dmf 五、常见问题1、url链接嵌入html被转义问题返回html时:$html = "<a id='ali_pay_h5' href='$url' target='_blank'>去支付</a>    <script>            document.getElementById('ali_pay_h5').click()    </script>";return $html;如果遇到url链接为:https://payment.com/dci/payment/pay/visacard?amount=10&captureDelay=0¤cy=SGD&merchant_id=Guest&merchant_name=Mobile+Commerce&merchant_order=1708996332599¬_use_ui=0¬ify_url=https%3A%2F%2Fwww.rvers.com其中¬嵌入html中会被转义为¬这个符号,其他转义符号自行查阅;可以通过urlencode编码解决,修改后的html代码如下:$urlss= urlencode($response_data->qr_code_url);$html = "<a id='ali_pay_h5' href='$url' target='_blank'>去支付</a>    <script>    const btn =document.getElementById('ali_pay_h5')         btn.onclick=()=>{                  window.open(decodeURIComponent(btn.getAttribute('href'))                )         }         btn.click()     </script>";return $html; 2、如何兼容iPad默认跳转$urlss= urlencode($response_data->qr_code_url);$html = "<a id='mct' href1='$urlss' target='_blank' >去支付</a>    <script>    const btn =document.getElementById('mct')    const url = btn.getAttribute('href1')    btn.setAttribute('href',decodeURIComponent(url));    // 创建一个点击事件        const clickEvent = new MouseEvent('click', {            'view': window,            'bubbles': true,            'cancelable': true    });    // 设置 target 为 '_blank',在新标签页中打开链接    Object.defineProperty(clickEvent, 'target', {      value: '_blank',      writable: false,      enumerable: true,      configurable: true    });     // 触发点击事件    btn.dispatchEvent(clickEvent);     </script>";return $html;   
业务系统使用文档>12、应用管理>插件功能>模板控制器
fault官网主题配置(1) 导航设置:系统提供给了默认数据,除了首页和产品导航不能删除之外,其他的一级导航和二级导航均可根据实际应用场景进行修改、删除;文件地址说明:一级导航二级导航文件地址首页不支持添加二级导航index.html产品物理裸机dedicated.html云服务器cloud.htmlSSL证书ssl.html短信服务sms.html商标注册trademark.html服务器托管trusteeship.html机柜租用rent.html域名注册domain.htmlICP办理icp.html解决方案电商行业solution/ecommerce.html金融行业solution/finance.html游戏行业solution/game.html汽车行业solution/auto.html文旅行业solution/travel.html教育行业solution/education.html医疗行业solution/medical.html农业行业solution/agriculture.html合作伙伴CPS推广partner/cps.html代理伙伴partner/agent.html客户支持文档中心document.html服务保障service-guarantee.html联系我们contact.html官方公告announce.html关于我们公司介绍about.html人才招聘recruit.html新闻资讯news.html  (2) 默认产品配置:此处的默认产品是(1)中给出的默认产品显示的,此处的产品  (3) 底部栏配置:该处配置的数据,显示在网页的最底部,如下图(4) 官网参数配置:该处配置的数据,会在官网多次地方引用(5) SEO管理:为需要做SEO的网页配置关键字信息,页面地址前不要加/(6) 首页轮播图:配置的轮播图,将在官网首页轮播显示 (7) 侧边浮窗管理:配置的数据,将在官网的右侧边悬浮展示出来  l MF_101官网主题(1) 导航设置:系统提供给了默认数据,除了首页和产品导航不能删除之外,其他的一级导航和二级导航均可根据实际应用场景进行修改、删除;注意该套主题不支持二级导航,因此只能在一级导航填写需要展示的文件地址文件地址说明:一级导航文件地址备注首页index.html最新活动active.html产品云服务器cloud.htm、物理服务器dcim.html;配置其中一个解决方案未提供,可以删除该导航合作伙伴未提供,可以删除该导航客户支持未提供,可以删除该导航关于我们about.html  (2) 默认产品配置:只支持云服务器和物理服务器的产品配置   (3) 底部栏配置:该处配置的数据,显示在网页的最底部,如下图 (4) 官网参数配置:该处配置的数据,显示在网页的最底部,如下图圈定位置;其中无友情链接、荣誉资质、合作伙伴显示,可不做配置。  (5) SEO管理:为需要做SEO的网页配置关键字信息,页面地址前不要加/ (6) 首页轮播图:该配置对于该套主题无效,可不作配置 (7) 侧边浮窗管理:该配置对于该套主题无效,可不作配置
业务系统使用文档>开发文档>主题开发文档
fault)2、主题目录1)、后台模板地址:public/admin/template/主题名/2)、会员中心模板地址:public/clientarea/template放主题文件主题缩略图名字theme.jpg,放在主题目录下(default/theme.jpg)3)、插件模板地址:前台文件目录:/public/plugins/addon/插件名/template/admin插件路由地址:域名/admin/plugin/插件名/xxxx.html说明:路由xxxx.html在插件文件中获取找xxxx.php 前台文件目录:/public/plugins/addon/插件名/template/clientarea插件路由地址:域名/page/插件ID/xxxx.html说明:路由xxxx.html在插件文件中获取找xxxx.php 3、子主题1)、创建主题名例如:child2)、在child目录下创建文件theme.config3)、theme.config文件中写name:"child"//子主题名description:""//描述author:""//开发者config-parent-theme:"default"//继承的主题名称 语言:后台是在public/admin/language目录前台是在public/clientarea/language目录每种语言有两个文件组成,一个php和一个js后缀。js后缀的就是模板中的语言文字信息,php后缀的就是接口中返回的语言文字信息。 
业务系统使用文档>开发文档>短信接口开发文档
fig.php。2、文件中规范(以idcsmart短信插件开发为例)1)、创建命名空间  namespace sms\idcsmart;2)、使用插件 use app\common\lib\Plugin;2)、创建类名 Idcsmart   (类名和文件名一致,继承Plugin类)3)、类中配置函数 (下面四个函数名是固定,不能改也不能缺失,其它需要的功能自己写函数) 3、类中参数、基本函数1)、 基础信息(不能为空)public $info = array(    'name'        => 'Idcsmart',//插件标识名    'title'       => '智简魔方',    'description' => '智简魔方官方短信平台接口',    'status'      => 1,    'author'      => '魔方财务',    'version'     => '1.0',    'help_url'    => 'https://www.idcsmat.com/',//申请接口地址);2)、install (安装插件函数) 安装插件,这里如果写了返回导入的模板信息,在安装时就会创建模板。导入模板的数据格式看idcsmart目录下的config/smsTemplate.php 不需要导入模板,返回true。3)、uninstall (卸载插件函数,没有操作返回true)4、类中短信接口操作函数系统返回给以下函数的公共参数$params['config'] //config.php中的配置项在安装插件后,设置后的数组1)、getCnTemplate($params) //获取国内模板   函数接收参数:    $params['template_id'] //模板ID   返回数据格式:    status//状态只有两种(成功success,失败error)    template_id//模板的ID(获取的模板ID)    template_status//只能是1,2,3(1正在审核,2审核通过,3未通过审核)    msg//接口返回的错误消息传给msg参数    [        'status'=>'success',        'template'=>[            'template_id'=>'w34da',            'template_status'=>2,            'msg'=>"模板审核失败",        ]    ]    获取失败    [        'status'=>'error',        'msg'=>'模板ID错误',    ]2)、createCnTemplate($params) //创建国内模板  函数接收参数:    $params['title'] //模板标题    $params['content'] //模板内容    $params['remark'] //模板备注   返回数据格式:    status//状态只有两种(成功success,失败error)    template_id//模板的ID,    template_status//只能是1,2,3(1正在审核,2审核通过,3未通过审核)    msg//接口返回的错误消息传给msg参数    成功    [        'status'=>'success',        'template'=>[            'template_id'=>'w34da',            'template_status'=>1,        ]    ]    失败    [        'status'=>'error',        'msg'=>'模板ID错误',    ]3)、putCnTemplate($params) //修改国内模板  函数接收参数:    $params['template_id'] //模板ID    $params['title'] //模板标题    $params['content'] //模板内容    $params['remark'] //模板备注   返回数据格式:    status//状态只有两种(成功success,失败error)    template_status//只能是1,2,3(1正在审核,2审核通过,3未通过审核)    msg//接口返回的错误消息传给msg参数    成功    [        'status'=>'success',        'template'=>[            'template_status'=>2,        ]    ]    失败    [        'status'=>'error',        'msg'=>'模板ID错误',    ]4)、deleteCnTemplate($params) //删除国内模板  函数接收参数:    $params['template_id'] //模板ID   返回数据格式:    status//状态只有两种(成功success,失败error)    template_status//只能是1,2,3(1正在审核,2审核通过,3未通过审核)    msg//接口返回的错误消息传给msg参数    成功    [        'status'=>'success',    ]    失败    [        'status'=>'error',        'msg'=>'模板ID错误',    ]5)、sendCnSms($params) //发送国内短信  函数接收参数:    $params['template_id'] //模板ID    $params['templateParam'] //替换模板内容的参数    $params['content'] //模板内容    $params['mobile'] //模板手机号   返回数据格式:    status//状态只有两种(成功success,失败error)    content//替换参数过后的模板内容    msg//接口返回的错误消息传给msg参数    成功    [        'status'=>'success',        'content'=>'验证码43543发送成功',    ]    失败    [        'status'=>'error',        'content'=>'error',        'msg'=>'手机号错误',    ]6)、国际接口函数(如果该接口支持国际接口就写,没有则不写)    国际接口函数有    getGlobalTemplate//获取国际模板    createGlobalTemplate//创建国际模板    putGlobalTemplate//修改国际模板    deleteGlobalTemplate//删除国际模板    sendGlobalTemplate//发送国际短信        函数接收参数: 同国内函数对应    返回数据格式: 同国内函数对应   
业务系统使用文档>开发文档>邮件接口开发文档
fig.php。2、文件中规范(以smtp邮件插件开发为例)(1) 创建命名空间  namespace mail\smtp;(2) 使用插件 use app\common\lib\Plugin;(3) 创建类名 Smtp(类名和文件名一致,继承Plugin类)(4) 类中配置函数 (下面一个函数名是固定,不能改也不能缺失,其它需要的功能自己写函数)3、类中参数、基本函数(1) 基础信息(不能为空)① public $info = array(    'name'        => 'Smtp',//标识名    'title'       => 'Smtp',    'description' => '智简魔方官方邮件平台接口',    'status'      => 1,    'author'      => '魔方财务',    'version'     => '1.0',    'help_url'    => 'https://www.idcsmat.com/',//申请接口地址);(2) install (安装插件函数)① 安装时逻辑处理,无逻辑return true(3) uninstall (卸载插件函数,没有操作返回true)4、类中邮件接口操作函数(1) 系统返回给以下函数的公共参数,$params['config'] //config.php中的配置项在安装插件后,设置后的数组(2) Send($params) // 邮件发送① $params[‘email’] (要发送的邮件地址)② $params[‘subject’] (邮件标题)③ $params[‘content’] (邮件内容)④ $params[‘attachments’] (邮件附件)5、返回格式(1) 成功 [status => success](2) 失败 [status => error, msg => errorMsg] 
魔方云系统使用文档>4. 磁盘与存储>磁盘产品使用教程
磁盘产品属于专业版功能,免费版不支持产品说明:开启后系统可以独立创建磁盘,以他们作为独立对象进行管理 前提条件:在系统设置-功能开关页面,开启磁盘产品的开关  1、业务管理-磁盘管理,创建磁盘 选择所属客户,填写磁盘的名称、大小后,点击确定按钮,成功创建磁盘 2、磁盘挂载实例可以在磁盘管理列表直接挂载实例,也可以去实例内页挂载磁盘(方式一)点击挂载按钮,选择需要挂载的实例 (方式二)进入实例内页,点击添加按钮,选择挂载磁盘产品; 3、删除磁盘(情况1)磁盘产品未挂载情况:直接删除创建的磁盘产品,可以选择放入磁盘回收站,或者强制删除该磁盘; 放入回收站的磁盘,会根据回收站的回收机制,进行磁盘回收;也支持磁盘还原,还原后的磁盘,为未挂载状态 (情况2)磁盘产品已挂载情况:删除实例(放入回收站)或者强制删除实例,会直接卸载该磁盘;如果在回收站还原该实例,磁盘不会自动挂载回去,需要手动挂载 
业务系统使用文档>开发文档>产品模块开发文档
fter_server_delete钩子add_hook('after_server_delete', function($param){// 具体处理}); 3.多语言使用lang_plugins('语言标识',$param=[])实现多语言; 4.路由,自定义方法注意:方法只有登录验证,其他鉴权需要开发者自己处理默认路由前台/console/v1/module/:module/:controller/:method 例如/console/v1/module/cloud/host/hard_off将会访问到cloud模块 controller/home/HostController的hardOff 方法 后台/admin/v1/module/:module/:controller/:method 例如/admin/v1/module/cloud/host/hard_off将会访问到cloud模块 controller/admin/HostController的hardOff 方法自定义路由,需要自己控制登录插件目录下定义route.php,下面举例工单插件路由前台路由:Route::group('console/v1',function (){Route::get('ticket', "\\addon\\idcsmart_ticket\\controller\\clientarea\\TicketController@ticketList")})->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");})->middleware(\app\http\middleware\ParamFilter::class)->middleware(\app\http\middleware\CheckAdmin::class); # 需要登录就使用此中间件 5. 系统方法和参数方法在模块主文件里实现参数定义:①   标准产品操作参数数组 ['host'=>$HostModel, 'client'=>$ClientModel, 'product'=>$ProductModel, 'server'=>$ServerModel, 'config_option'=>$ConfigOption];②   自定义参数  键名:['custom'=>’自定义数据’]  返回定义:ⅰ. 标准返回: 成功信息返回:['status'=>200, 'msg'=>'提示信息', 'data'=>[]]失败信息返回:['status'=>400, 'msg'=>'提示信息'] 方法以及说明:方法名称描述参数返回metaData配置无["display_name"=>"显示名称",   "version"=>"1.0"]testConnect测试接口连接状态['server'=>$ServerModel]标准返回afterCreateFirstServer在使用模块创建第一个接口成功后调用,主要用于开发者自定义添加表无无afterDeleteLastServer删除使用模块的最后一个接口成功后调用,主要用于开发者删除自己添加的表无无createAccount产品开通标准产品操作参数标准返回suspendAccount产品暂停标准产品操作参数标准返回unsuspendAccount产品解除暂停标准产品操作参数标准返回terminateAccount删除产品标准产品操作参数标准返回renew续费订单完成后调用标准产品操作参数无changePackage升降级配置项订单完成后调用标准产品操作参数+自定义参数无changeProduct升降级商品订单完成后调用标准产品操作参+自定义参数无cartCalculatePrice商品价格计算,包含场景前台购物车,升降级产品,后台下单,升降级商品['product'=>$ProductModel,'custome'=>'自定义参数']['status'=>200, 'msg'=>提示信息,'data'=>['price'=>0.01, //首次价格'renew_price'=>0.01,   //续费价格'billing_cycle'=>'周期名称','duration'=>30*24*3600, //周期时长'preview'=>[['name'=>'cpu', // 名称'value'=>'1核', // 值'price'=>'1.00' //价格] ]  ]serverConfigOption后台商品切换接口输出['product'=>$ProductModel,]输出内容,支持模板clientArea前台产品内页输出标准产品操作参数输出内容,支持模板adminArea后台产品内页输出标准产品操作参数输出内容,支持模板clientProductConfigOption前台商品配置输出,购物车,单独订购,升降级商品时输出['product'=>$ProductModel,'tag'=>'价格显示标识']输出内容,支持模板adminProductConfigOption后台商品配置输出,新建订单,升降级商品时输出['product'=>$ProductModel,'tag'=>'价格显示标识']输出内容,支持模板afertSettle在结算之后调用,用于保存产品和 ProductModel 商品配置项的关联关系['custom'=>自定义参数,'host_id'=>产品ID,"product"=>$ProductModel]无durationPrice获取当前产品所有周期价格标准产品操作参数['status'=>200,'msg'=>提示信息,'data'=>[['price'=>0.01, //价格'billing_cycle'=>'周期名称','duration'=>30*24*3600, //周期时长]]allConfigOption获取商品所有配置项,该方法用于优惠码设置['product'=>$ProductModel]['status'=>200,'msg'=>提示信息,'data'=>[['name'=>'配置项名称','field'=>'字段名称,和订购时生成订单接收的参数一致','type'=>'dropdown',//下拉选择,暂时只支持这种,'option'=>[['name'=>'选项名称','value'=>'选项值']]] ]  ]currentConfigOptioin获取当前产品配置项标准产品操作参数['status'=>200,'msg'=>提示信息,'data'=>['字段'=>'当前值',]] 
财务系统使用文档>第三方平台对接>对接各大支付接口>支付宝网页支付常见问题排查
fy_handle 或者https://域名/gateway/ali_pay_h5/index/notify_handle 常见错误写法:仅写了魔方财务的域名https://域名故障现象二:如图可能的故障原因:支付宝公钥 商户私钥配置错误了正确的应该填写这两个参数1、支付宝公钥:应该填写,接口加签方式这里的 支付宝公钥2、商户私钥:这是需要用 “支付宝开放平台密钥工具”生成的配置好后,充值就能看到这个界面第三:若是 确认,支付宝 回调接口 配置正常,支付宝私钥 以及 商户私钥 都配置正常 还是不能正常的充值,可以 变更下 加签密钥 并 重新生成 商户 私钥进行 配置测试,若 还是 不行,联系 售后技术支持查看