API文档>QStack>插件>云计算 > 业务操作处理

业务操作处理

发布时间:2022-03-30 15:45

一、简要描述:

  • 以腾讯云为例,文件:QcloudOperate.php
  • 本文只介绍产品同步所需的方法、参数、返回参数,接口具体实现方式由开发者自行编写
  • 类的方法访问权限均采用 public
  • 必须严格按照本文规范进行编写代码

注:

  • 除了方法名、参数 和 返回信息格式需与本文一致,其余可自行编写。

  • 购买、续费时长均带有单位,月:m,比如1月 为 1m

  • 部分常用业务状态、运行状态对照表,具体请查阅:CloudStatusCode.php

二、主要接口方法实现

  • queryPrice 方法,主要用于业务购买询价
/**
* 业务购买询价
*param array $data 业务购买参数
**/
public function queryPrice(array $data){

    //调用查询价格接口
    $result = (new QcloudApi())->queryPrice($data);
    //失败
    if(){
         return ['result' => false,'text' => '失败原因'];
    }

    //原价
    $originPrice = $result['originPrice'];
    return ['result' => true, 'originPrice' => $originPrice];

}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
originPrice float 价格
  • buy 方法,主要用于业务购买
/**
* 业务购买
*param array $cloud 业务数据
*param array $data 业务购买参数
**/
public function buy($cloud, $data){

    $return_data = [];
    foreach($cloud as $k => $v){
        //业务标识(上级服务器名称)
        $data['suid'] = $v['suid'];
        $data['number'] =1;
        //开通api
        $buy = (new QcloudApi())->buy($data);
        $update = [];
        $result = true;
        if(array_key_exists('Error',$buy['Response'])
            $result = false;
        }else{
            $update = ['guid' => $buy['Response']['InstanceIdSet'][0]];
        }

        $return_data[] = [
            'result' => $result,
            'api_data' => json_encode($buy),
            'server_id' => $v['id'],
            'suid' => $v['suid'],
            'update' => $update
        ];
    }

     return $return_data;
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
server_id int 业务ID
suid string 业务标识
update array 需要更新到业务表的数据
  • queryRenewPrice 方法,主要用于业务续费询价
/**
* 续费询价
*param array $cloud 业务数据
*param string  $months 续费时长
**/

public function queryRenewPrice($cloud, $months){

    $queryRenewPrice = (new QcloudApi())->queryRenewPrice($cloud['line_no'], $cloud['guid'], $months);
    //失败
    if(array_key_exists('Error',$queryRenewPrice['Response']){
         return ['result' => false,'text' => '失败原因'];
    }

    $orginalPrice = $queryRenewPrice['Response']['Price']['InstancePrice']['DiscountPrice'];
    return ['result' => true, 'originPrice' => $orginalPrice];

}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
originPrice float 价格
  • renewApi 方法,用于业务续费
/**
* 业务续费
*param array $cloud 业务数据
*param array $data 业务续费参数
**/
public function renew($cloud, $data){

    //续费
    $renew = (new QcloudApi())->renew($cloud['line_no'], $cloud['guid'], $data['months']);
    $result = true;
    if(array_key_exists('Error',$renew['Response']){
       $result = false;
    }

    return ['result' => $result, 'api_data' => json_encode($renew)];

}            

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
  • queryUpgradePrice 方法主要用于业务升级询价
/**
* 升级询价
*param array $cloud 业务数据
*param array $data 业务升级参数
**/
public function queryUpgradePrice($cloud,$data){

    $originalPrice = 0;
     //升级规格询价
    $specPrice = (new QcloudApi())->specPrice($cloud['line_no'], $cloud['guid'], $data['spec_no']);

    //失败
    if(array_key_exists('Error',$specPrice['Response']){
        return ['result' => false,'text' => '失败原因'];
    }

    $originalPrice += $specPrice;

    //升级带宽询价
    if(!empty($data['bandwidth'])){
        $bandWidthPrice = (new QcloudApi())->bandwidthPrice($cloud['line_no'],     $cloud['guid'],date('Y-m-d',time()),date('Y-m-d',strtotime($cloud['end_time'])), $data['bandwidth']);
        //失败
        if(array_key_exists('Error',$bandWidthPrice['Response']){
            return ['result' => false,'text' => '失败原因'];
        }

        $originalPrice += $bandWidthPrice;
    }

    //升级磁盘(数据盘询价)
    if(!empty($data['harddisks'])){
        $diskPrice = (new QcloudApi())->diskPrice($cloud['line_no'], $cloud['disk_id'], $data['harddisks']);
    //失败
        if(array_key_exists('Error',$diskPrice['Response']){
            return ['result' => false,'text' => '失败原因'];
        }
        $originalPrice += $diskPrice;
    }

    if($originalPrice <= 0){
        return ['result' => false,'text' => '失败原因'];
    }

    return ['result' => true, 'originPrice' => $originalPrice];

}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
originPrice float 价格
  • upgrade 方法,主要用于业务升级
/**
* 业务升级
*param array $cloud 业务数据
*param array $data 业务升级参数
**/
public function upgrade($cloud, $data){

$api_data = [];    
if(!empty($data['spec_no']))
    //升级规格
    $spec = (new QcloudApi())->upgradeSpec('ResetInstancesType',$cloud['line_no'], $cloud['guid'], $data['spec_no']);
    //失败
    if(array_key_exists('Error',$spec['Response']){
        return ['result' => false, 'api_data' => json_encode($spec)];
    }

    $api_data[] = json_encode($spec);
    sleep(10);
}

if(!empty($data['bandwidth'])){
    //升级带宽
    $bandWidth = (new QcloudApi())->upgradeBandwidth('ResetInstancesInternetMaxBandwidth', $cloud['line_no'], $cloud['guid'],date('Y-m-d',time()),date('Y-m-d',strtotime($cloud['end_time'])), $data['bandwidth']);
    $api_data[] = json_encode($bandWidth);
    if(array_key_exists('Error',$bandWidth['Response']){
        return ['result' => false, 'api_data' => implode(',',$api_data)];
    }
    sleep(10);
}

if(!empty($data['harddisks'])){
    //升级磁盘
    $disk = (new QcloudApi())->upgradeDisk('ResizeDisk', $cloud['line_no'], $cloud['disk_id'], $data['harddisks']);
    $api_data[] = json_encode($disk);
    if(array_key_exists('Error',$disk['Response']){
        return ['result' => false, 'api_data' => implode(',',$api_data)];
    }
}

return ['result' => true , 'api_data' => implode(',',$api_data)];

}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
  • reopen 方法,主要用于重新开通
/**
* 重新开通
*param array $cloud 业务数据
**/
public function reopen($cloud, $data){

    //同步上级数据,查看是否已开通
    $sync = (new QcloudApi())->syncBusiness($cloud['line_no'],'',$cloud['suid']);

    //已开通,直接返回结果
    $update = [];
    if($sync['Response']['InstanceSet']){
        $update = [
            'guid' => $sync[0]['InstanceId'][0]['InstanceId']
        ];
        return ['result'=>true,'update'=> $update];
    }

    //补充参数
    $data['suid'] = $cloud['suid'];
    $data['number'] = 1;
    //开通api
    $buy = (new QcloudApi())->buy($data);
    //失败
    $result = true;
    if(array_key_exists('Error',$buy['Response']){
        $result = false;
    }else{
        $update = ['guid' => $buy['Response']['InstanceIdSet'][0]];
    }

    return ['result' => $result, 'api_data' => json_encode($buy), 'update'=> $update];

}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
update array 需要更新到业务表的数据
  • rebuy 方法,主要用于重新支付新购订单
/**
* 重新支付新购订单
*param array $cloud 业务数据
*param array $data 业务购买参数

**/
public function rebuy($cloud, $data){

    $return_data = [];
    foreach($cloud as $k => $v){

        //同步上级数据,查看是否已开通
        $sync = (new QcloudApi())->describeInstances($cloud['line_no'],'',$cloud['suid']);

        //已开通,直接更新数据
        $update = [];
        $result = true;
        if($sync['Response']['InstanceSet']){
            $update = [
                'guid' => $sync['Response']['InstanceSet'][0]['InstanceId'],
            ];
        }else{
            $data['suid'] = $cloud['suid'];
            $data['number'] = 1;
            $buy = (new QcloudApi())->buy($data);
            if(array_key_exists('Error',$buy['Response']){
                $result = false;
            }else{
                $update = ['guid' => $buy['Response']['InstanceIdSet'][0]];
            }    
        }

        $return_data[] = [
            'result' => $result,
            'api_data' => json_encode($buy),
            'server_id' => $v['id'],
            'suid' => $v['suid'],
            'update' => $update
        ];
    }

    return $return_data;
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
server_id int 业务ID
suid string 业务标识
update array 需要更新到业务表的数据
  • rerenewOrderPay 方法,主要用于重新支付续费订单
public function rerenewOrderPay($cloud, $data){

    return $this->renew($cloud, $data);

}
  • reupgradeOrderPay 方法,主要用于重新支付升级订单
public function reupgradeOrderPay($cloud, $data){

    //向上级查询业务信息
    $sync = (new QcloudApi())->describeInstances($cloud['line_no'], $cloud['guid']);
    if(array_key_exists('Error',$sync['Response']){
        return ['result' => false, 'api_data' => json_encode($sync)];
    }
    $instance = $sync['Response']['InstanceSet'];

    if($data['spec_no'] && $instance['instancetypeid'] != $data['spec_no']){
        //升级规格
        $spec = (new QcloudApi())->upgradeSpec('ResetInstancesType',$cloud['line_no'], $cloud['guid'], $data['spec_no']);
//失败
        if(array_key_exists('Error',$spec['Response']){
            return ['result' => false, 'api_data' => json_encode($spec)];
        }
        $api_data[] = json_encode($spec);
        sleep(10);
    }

    if($data['bandwidth'] && $instance[0]['InternetAccessible']['InternetMaxBandwidthOut'] != $data['bandwidth']){
        //升级带宽
        $bandWidth = (new QcloudApi())->upgradeBandwidth('ResetInstancesInternetMaxBandwidth', $cloud['line_no'], $cloud['guid'],date('Y-m-d',time()),date('Y-m-d',strtotime($cloud['end_time'])), $data['bandwidth']);
        $api_data[] = json_encode($bandWidth);
        if(array_key_exists('Error',$bandWidth['Response']){
            return ['result' => false, 'api_data' => implode(',',$api_data)];
        }
        sleep(10);

    }

    if($data['harddisks'] && $instance['0']['DataDisks'][0]['DiskSize'] != $data['harddisks']){
        //升级磁盘
        $disk = (new QcloudApi())->upgradeDisk('ResizeDisk', $cloud['line_no'], $cloud['disk_id'], $data['harddisks']);
        $api_data[] = json_encode($disk);
        if(array_key_exists('Error',$disk['Response']){
            return ['result' => false, 'api_data' => implode(',',$api_data)];
        }
    }


    return ['result' => true , 'api_data' => implode(',',$api_data)];



}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
  • start 方法,主要用于开机
/**
* 开机
*param array $cloud 业务数据
**/
public function start($cloud){
    $start = (new QcloudApi())->start($cloud['line_no'],$cloud['guid']);
    $result = true;
    if(array_key_exists("Error",$start['Response'])){
        $result = false;
    }

    return ['result' => $result, 'api_data' => json_encode($start)];
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
  • stop 方法主要用于关机
/**
* 关机
*param array $cloud 业务数据
**/
public function stop($cloud){
    $stop = (new QcloudApi())->stop($cloud['line_no'],$cloud['guid']);
    $result = true;
    if(array_key_exists("Error",$stop['Response'])){
        $result = false;
    }

    return ['result' => $result, 'api_data' => json_encode($stop)];
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
  • restart 方法,主要用于重启
/**
* 重启
*param array $cloud 业务数据
**/
public function restart($cloud){
    $restart  = (new QcloudApi())->restart($cloud['line_no'],$cloud['guid']);
    $result = true;
    if(array_key_exists("Error",$restart['Response'])){
        $result = false;
    }

    return ['result' => $result, 'api_data' => json_encode($restart)];
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
  • install 方法,主要用于重启
/**
* 重装系统
*param array $cloud 业务数据
*param string $system_no 操作系统编号
*param string $login_password 系统密码
**/
public function install($cloud, $system_no, $login_password){
    $install  = (new QcloudApi())->install($cloud['line_no'],$cloud['guid'],$system_no, $login_password);
    $result = true;
    if(array_key_exists("Error",$install['Response'])){
        $result = false;
    }

    return ['result' => $result, 'api_data' => json_encode($install)];
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
  • resetPassword 方法,主要用于重置密码
/**
* 重置密码
*param array $cloud 业务数据
*param string $login_password 系统密码
**/
public function resetPassword($cloud, $login_password){
    $resetPassword  = (new QcloudApi())->resetPassword($cloud['line_no'],$cloud['guid'], $login_password);
    $result = true;
    if(array_key_exists("Error",$resetPassword['Response'])){
        $result = false;
    }

    return ['result' => $result, 'api_data' => json_encode($resetPassword)];
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
  • vncUrl 方法,主要用于获取远程终端地址
    示例:
/**
* 获取远程终端地址
*param array $cloud 业务数据
**/
public function vncUrl($cloud){

    $url = 'https://img.qcloud.com/qcloud/app/active_vnc/index.html?InstanceVncUrl=';
    $vncUrl  = (new QcloudApi())->vncUrl($cloud['line_no'],$cloud['guid'], $login_password);
    $instanceVncUrl = $vncUrl['Response']['InstanceVncUrl'];
    if(array_key_exists("Error",$vncUrl['Response'])){
        return ['result'=>false,'text' => '获取终端地址失败'];
    }

    return ['result' => $result, 'text' => $url . $instanceVncUrl];
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
text string 返回信息
  • sync 方法,同于同步上级数据
/**
* 获取远程终端地址
*param array $cloud 业务数据
**/
public function sync($cloud){
    //同步
    $sync = (new QcloudApi())->sync($cloud['line_no'],$cloud['guid']);
    $total_count = $sync['Response']['TotalCount'] ?? 0;
    if(array_key_exists("Error",$sync['Response']) || $total_count == '0'){
        return ['result' => false, 'api_data' => json_encode($sync)];
    }
    //获取需要更新的数据
    $update = [];
    $instance = $sync['Response']['InstanceSet']['0'];
    date_default_timezone_set('PRC'); //修改时区
    $buyTime = strtotime($instance['CreatedTime']);
    $endTime = strtotime($instance['ExpiredTime']);
    $update = [
        'guid' => $instance['InstanceId'], //guid
        'buy_time'=> date('Y-m-d H:i:s',$buyTime), //购买时间
        'end_time' => date('Y-m-d H:i:s',$endTime), //过期时间
        'ip' => $instance['PublicIpAddresses']['0'], //外网IP
        'local_ip' => $instance['PrivateIpAddresses']['0']//内网IP
    ];

    //只有当业务处在开通中,才会更新业务状态
    if($cloud['order_status] == 0){
        $update['order_status] = 1;
    }

    //运行状态
    switch($instance['InstanceState']){
        case 'RUNNING':
            $run_status = '1'; //运行中
        break;    
        case 'STOPPED':
            $run_status = '-1';//已关机
        break;    
        case 'REBOOTING':
            $run_status = '4';//重启中
        break;    
    }

    $update['run_status] = $run_status;
    return ['result' => true, 'text' => '同步成功', 'update' => $new_server_data, 'api_data' => '成功'];
}

返回参数说明

参数名 类型 说明
result bool 成功:true, 失败:false
api_data string api返回信息
update array 需要更新到业务表的数据
本文导读