LeninDie
15.11.2016, 13:10
в данном скрипте есть скуля в post параметре market_id. помогите пожалуйста от нее избавиться.
скуля: {"error":{"type":"Illuminate\\Database\\QueryException","message":"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '_!@4dilemma:1' for key 'group_key' (SQL: select * ,sum(`from_value`) as total_from_value, sum(`to_value`) as total_to_value from `orders` where `market_id` = '-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52 ),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109 ),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'' and `type` = 'sell' and `status` in ('active','partly filled') group by `price` order by `price` asc limit 100)","file":"/var/www/site.ru/vendor/laravel/framework/src/Illuminate/Database/Connection.php","line":625}}
.SpoilerTarget" type="button">Spoiler: code
PHP:
'error','message'=>Lang::get('messages.login_to_buy')));
exit;
}
$logFile='trades.log';
Log::useDailyFiles(storage_path().'/logs/trades/'.$logFile);
Log::info('------------------------- Do Buy -----------------------------');
$user=Confide::user();
$price_buy=sprintf('%.8f',$_POST['price']);
$amount_buy=$amount_buy_temp=sprintf('%.8f',$_POST['amount']);
$total_buy=$price_buy*$amount_buy;//sprintf('%.8f',$price_buy*$amount_buy);
$market_id=$_POST['market_id'];//Session::get('market_id');
//get info market
$market_default=Market::find($market_id);
if(!isset($market_default->active) ||$market_default->active==0){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.market_not_active')));
exit;
}
$wallet_from=$market_default->wallet_from;
$wallet_to=$market_default->wallet_to;
$wallet= newWallet();
$from=$wallet->getType($wallet_from);
$to=$wallet->getType($wallet_to);
//cleck limit trade
$limit_trade=WalletLimitTrade::where('wallet_id',$ wallet_from)->first();
if($limit_trade)$limit_trade=$limi t_trade->toArray();
else$limit_trade=array('min_amount '=>0.000001,'max_amount'=>10000000);
if(sprintf('%.8f',$_POST['amount'])$limit_trade['max_amount']){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.message_limit_trade')));
exit;
}
//set default return value
$status='error';
$message=Lang::get('messages.error_contact_admin') ;
$balance= newBalance();
$message_socket= array();
$message_socket['market_id'] =$market_id;
//sub $total_buy money
if($balance->takeMoney($total_buy,$wallet_to,$user->id)){//true not buy unless (reduction of)
$orders_buy= newOrder();
$orders_buy->price=$price_buy;
$orders_buy->status='active';
$orders_buy->from_value=$amount_buy;
$orders_buy->to_value=$total_buy;
$orders_buy->market_id=$market_id;
$orders_buy->user_id=$user->id;
$orders_buy->type='buy';
$amount_real=0;
$amount_rest=0;
$total_rest=0;
//get list order sell matching
$orders= newOrder();
$sell_orders_matching=$orders->getSellOrdersMatching($market_id,$price_buy);
$sell_orders_matching=$sell_orders_matching->toArray();
Log::info('sell_orders_matching: market_id: '.$m arket_id.' -- Price: '.$price_buy,$sell_orders_matching);
if(count($sell_orders_matc hing)>0){
//fee_buy, fee_sell
$fee_trade= newFeeTrade();
$fee=$fee_trade->getFeeTrade($market_id);
$per_fee_buy=$fee['fee_buy'];
$per_fee_sell=$fee['fee_sell'];
$message='';
foreach($sell_orde rs_matchingas$sell_orders) {
$amount_rest=0;
$total_rest=0;
$amount_bought=0;
if($amount _buy>0){
$amount_real=$amount_buy;
$trade_history= newTrade();
Log::info("\n".'---*****-----BUY : amount_buy: '.$amount_buy.' -- Price: '.$price_buy);
$sell_matching=$sell_orders;//$sell_orders_matching[0];
$price_sell=$sell_matching['price'];
$amount_sell=$sell_matching['from_value'];
$total_sell=$sell_matching['to_value'];
$user_sell=$sell_matching['user_id'];
$class_price=str_replace(".","-",$price_sell);
$class_price=str_replace(",","-",$price_sell);
if ($amount_buy==$amount_sell){
$fee_buy= ($total_sell*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
//add coin for seller/buyer
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
$balance->addMoney($amount_buy,$wallet_from,$user->id);//cong tien nguoi mua
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user_sell);//cong tien cho nguoi ban voi so tien da tr u phi
Order::where('id',$sell_matching['id'])->update(array('status'=>'filled'));
$status='success';
$message1="\n".''.Lang::get('messages.filled').'
Bought '.$amount_buy.' '.$from.' at a price of '.$price_sell.'
Fee buy: '.sprintf('%.8f',$fee_buy).' '.$to.'
Total amount paid: '.($total_sell+$fee_buy).' '.$to.'';
$message.=$message1;
Log::info($message1);
$orders_buy->status='filled';
//add history
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_buy,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
$message_socket['message_socket'][$class_price]['order_s'] = array('action'=>"delete",'id'=>$sell_matching['id'],'price'=>$price_sell);
$message_socket['message_socket'][$sell_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_buy,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell,"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$sell_matching['id']);
}else{
$message.=Lang::get('messages.balance_not_enought_ for_fee');
}
}e lseif($amount_buy>$amount_sell){
$fee_buy= ($total_sell*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
//add coin for seller/buyer
$balance->addMoney($amount_sell,$wallet_from,$user->id);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user_sell);
$amount_rest=sprintf('%.8f',$amount_buy-$amount_sell);
$total_rest=$amount_rest*$price_buy;//sprintf('%.8f',$amount_rest * $price_buy);
Order::where('id',$sell_matching['id'])->update(array('status'=>'filled'));
$status='success';
$message1="\n".''.Lang::get('messages.partly_filled').'
Bought '.$amount_sell.' '.$from.' at a price of '.$price_sell.'
Fee buy: '.sprintf('%.8f',$fee_buy).' '.$to.'
Total amount paid: '.($total_sell+$fee_buy).' '.$to.'';
Log::info($message1);
$message.=$message1;
$orders_buy->status='partly filled';
$orders_buy->from_value=$amount_rest;
$orders_buy->to_value=$total_rest;
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_sell,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
$amount_real=$amount_sell;
//call socket
$message_socket['message_socket'][$class_price]['order_s'] = array("action"=>"delete","id"=>$sell_matching['id'],'price'=>$price_sell);
$message_socket['message_socket'][$sell_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_sell,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$sell_matching['id']);
}else{
$message.=Lang::get('messages.balance_not_enought_ for_fee');
}
}e lse{
$total_sell=$amount_buy*$price_sell;//sprintf('%.8f',$amount_buy*$price_sell);
$fee_buy= ($total_buy*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
if(isset($message_socket['message_socket'][$class_price]['order_s']['amount']))
$amount_bought=$message_socket['message_socket'][$class_price]['order_s']['amount']+$amount_buy;
else$amount_bought=$amount_buy;
//add coin for seller/buyer
$balance->addMoney($amount_buy,$wallet_from,$user->id);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user_sell);
$amount_rest=sprintf('%.8f',$amount_sell-$amount_buy);
$total_rest=$amount_rest*$price_sell;//sprintf('%.8f',$amount_rest * $price_sell);
Order::where('id',$sell_matching['id'])->update(array('status'=>'partly filled','from_value'=>$amount_rest,'to_value'=>$total_rest));
$status='success';
$message1="\n".''.Lang::get('messages.filled').'
Bought '.$amount_buy.' '.$from.' at a price of '.$price_sell.'
Fee buy: '.sprintf('%.8f',$fee_buy).' '.$to.'
Total amount paid: '.($total_sell+$fee_buy).' '.$to.'';
Log::info($message1);
$message.=$message1;
$orders_buy->status='filled';
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_buy,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
//call socket
$message_socket['message_socket'][$class_price]['order_s'] = array("action"=>"update","id"=>$sell_matching['id'],"amount"=>$amount_bought,"price"=>$price_sell,"total"=>($amount_bought*$price_sell),"type"=>"buy");//tra ve so luong da ban de tru ra trne da nh sach hien thi , ko phai so luong con lai
$message_socket['message_socket'][$sell_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_buy,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$sell_matching['id']);
}else{
$message.=Lang::get('messages.balance_not_enought_ for_fee');
}
}
//refund money
if($price_buy>$price_sell){
$total_refunds= ($amount_real*$price_buy) - ($amount_real*$price_sell);//sprintf('%.8f',($amount_real*$price_buy) - ($amount_real*$price_sell));
Log::info('-------Refund: '.$total_refunds);
$message.="
".'- Refund: '.$total_refunds;
$balance->addMoney($total_refunds,$wallet_to,$user->id);
}
//update amount
$amount_buy=sprintf('%.8f',$amount_buy-$amount_real);
}
}
Log::info('-------amount_buy final: '.$amount_buy);
if($amount_buy>0) {
$orders_buy->save();
$message_socket['message_socket'][$orders_buy->id]['order_b'] = array('action'=>"insert","amount"=>$amount_buy,"price"=>$price_buy,"total"=>$total_rest,"type"=>"buy");
$message_socket['message_socket'][$orders_buy->id]['order_b']['id']=$orders_buy->id;
$message_socket['message_socket'][$orders_buy->id]['order_b']['created_at']=$orders_buy->created_at;
}
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($market_id);
$balance= newBalance();
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
$message_socket['change_price']['total_volume']=$trade->getVolume($market_id);
$message_socket['change_price']['cur_price']=$price_buy;
}else{
$orders_buy->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_buy->id]['order_b'] = array('action'=>"insert","id"=>$orders_buy->id,"amount"=>$orders_buy->from_value,"price"=>$orders_buy->price,"total"=>$orders_buy->to_value,'type'=>'buy','created_at'=>$orders_buy->created_at);
//BrainSocket::message('doTrade', array('message'=>$message_socket));
}
// added by tech //
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($market_id);
$balance= newBalance();
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
$message_socket['trade_user'] =$user->id;
// ended by tech //
$this->triggerPusherTicket($market_id);
}else{
$message=Lang::get("messages.not_enough_purchase", array('type'=>strtoupper($to)));
}
echojson_encode(array('status'=>$status,'message'=>$message,"message_socket"=>$message_socket));
exit;
}
public functiondoSell(){
if (Auth::guest() ){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.login_to_buy')));
exit;
}
$logFile='trades.log';
Log::useDailyFiles(storage_path().'/logs/trades/'.$logFile);
Log::info('------------------------- Do Sell -----------------------------');
$user=Confide::user();
$price_sell=sprintf('%.8f',$_POST['price']);
$amount_sell=sprintf('%.8f',$_POST['amount']);
$total_sell=$price_sell*$amount_sell;//sprintf('%.8f',$price_sell*$amount_sell);
$market_id=$_POST['market_id'];//Session::get('market_id');
// echo 'lol1';
//get info market
$market_default=Market::find($market_id);
if(!isset($market_default->active) ||$market_default->active==0){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.market_not_active')));
exit;
}
$wallet_from=$market_default->wallet_from;
$wallet_to=$market_default->wallet_to;
// echo 'lol2';
$wallet= newWallet();
$from=$wallet->getType($wallet_from);
$to=$wallet->getType($wallet_to);
//cleck limit trade
$limit_trade=WalletLimitTrade::where('wallet_id',$ wallet_from)->first();
if($limit_trade)$limit_trade=$limi t_trade->toArray();
else$limit_trade=array('min_amount '=>0.0001,'max_amount'=>1000);
if(sprintf('%.8f',$_POST['amount'])$limit_trade['max_amount']){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.message_limit_trade')));
exit;
}
// echo 'lol3';
//set default return value
$status='error';
$message=Lang::get('messages.error_contact_admin') ;
$balance= newBalance();
$message_socket= array();
$message_socket['market_id'] =$market_id;
//sub $total_buy money
if($balance->takeMoney($amount_sell,$wallet_from,$user->id)){
$orders_sell= newOrder();
$orders_sell->price=$price_sell;
$orders_sell->status='active';
$orders_sell->from_value=$amount_sell;
$orders_sell->to_value=$total_sell;
$orders_sell->market_id=$market_id;
$orders_sell->user_id=$user->id;
$orders_sell->type='sell';
// echo 'lol4';
$amount_real=0;
$amount_rest=0;
$total_rest=0;
//get list order sell matching
$orders= newOrder();
$buy_orders_matching=$orders->getBuyOrdersMatching($market_id,$price_sell);
$buy_orders_matching=$buy_orders_matching->toArray();
Log::info('buy_orders_matching: market_id: '.$ma rket_id.' -- Price: '.$price_sell,$buy_orders_matching);
if(count($buy_orders_match ing)>0){
// echo 'lol5';
//fee_buy, fee_sell
$fee_trade= newFeeTrade();
$fee=$fee_trade->getFeeTrade($market_id);
$per_fee_buy=$fee['fee_buy'];
$per_fee_sell=$fee['fee_sell'];
$message='';
foreach ($buy_ord ers_matchingas$buy_order) {
$amount_rest=0;
$total_rest=0;
$amount_sold=0;
if($amount _sell>0){
$amount_real=$amount_sell;
$trade_history= newTrade();
Log::info("\n".'---*****-----SELL : amount_sell: '.$amount_sell.' -- Price: '.$price_sell);
$buy_matching=$buy_order;//$buy_orders_matching[0];
$price_buy=$buy_matching['price'];
$amount_buy=$buy_matching['from_value'];
$total_buy=$buy_matching['to_value'];
$user_buy=$buy_matching['user_id'];
// ec ho 'lol6';
$class_price=str_replace(".","-",$price_buy);
$class_price=str_replace(",","-",$price_buy);
if ($amount_buy==$amount_sell){
$total_sell=$amount_sell*$price_buy;//sprintf('%.8f',$amount_sell*$price_buy);//really total sell;
$fee_buy= ($total_buy*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
//add coin for seller/buyer
$balance->addMoney($amount_buy,$wallet_from,$user_buy);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user->id);
Order::where('id',$buy_matching['id'])->update(array('status'=>'filled'));
$status='success';
//$message .= "\n".Lang::get('messages.filled').' : Fee buy: '.s printf('%.8f',$fee_buy).' - Fee Sell: '.sprintf('%.8f',$fee_sell).' - Total buy: '.(sprintf('%.8f',$amount_buy)) . ' - Total sell: '.sprintf('%.8f',($total_sell-$fee_sell));
$message.=''.Lang::get('messages.filled').'
Sold '.$amount_buy.' '.$from.' at a price of '.$price_buy.'
Fee sell: '.sprintf('%.8f',$fee_sell).' '.$to.'
Received: '.($total_sell-$fee_sell).' '.$to.'';
Log::info('amount_buy = amount_sell Update sel l orders: ', array('status'=>'filled'));
$orders_sell->status='filled';
//add history
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_buy,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
// echo 'lol7';
$message_socket['message_socket'][$class_price]['order_b'] = array('action'=>"delete",'id'=>$buy_matching['id'],'price'=>$price_buy);
$message_socket['message_socket'][$buy_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_buy,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$buy_matching['id']);
}else{
// echo 'lol7e';
$orders_sell->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","id"=>$orders_sell->id,"amount"=>$orders_sell->from_value,"price"=>$orders_sell->price,"total"=>$orders_sell->to_value,'type'=>'sell','created_at'=>$orders_sell->created_at);
}
}e lseif($amount_buy>$amount_sell){
// echo 'lol8';
$total_sell=$amount_sell*$price_buy;//really total sell;
$fee_buy= ($total_sell*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
if(isset($message_socket['message_socket'][$class_price]['order_s']['amount']))
$amount_sold=$message_socket['message_socket'][$class_price]['order_b']['amount']+$amount_sell;
else$amount_sold=$amount_sell;
// echo 'lol9';
//add coin for seller/buyer
$balance->addMoney($amount_sell,$wallet_from,$user_buy);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user->id);
// echo 'lol9.1';
$amount_rest=sprintf('%.8f',$amount_buy-$amount_sell);
$total_rest=$amount_rest*$price_buy;//sprintf('%.8f',$amount_rest * $price_buy);
// echo 'lol9.2';
Order::where('id',$buy_matching['id'])->update(array('status'=>'partly filled','from_value'=>$amount_rest,'to_value'=>$total_rest));
Log::info('amount_buy > amount_sell Update sell orders: ', array('s tatus'=>'partly filled','from_value'=>$amount_rest,'to_value'=>$total_rest));
$status='success';
// echo 'lol9.3';
//$message .= "\n".Lang::get('messages.partly_filled').' : Fee bu y: '.sprintf('%.8f',$fee_buy).' - Fee Sell: '.sprintf('%.8f',$fee_sell).' - Total buy: '.(sprintf('%.8f',$amount_sell)) . ' - Total sell: '.sprintf('%.8f',($total_sell-$fee_sell));
$message.=''.Lang::get('messages.filled').'
Sold '.$amount_sell.' '.$from.' at a price o f '.$price_buy.'
Fee sell: '.sprintf('%.8f',$fee_sell).' '.$to.'
Received: '.($total_sell-$fee_sell).' '.$to.'';
// echo 'lol9.3.1';
$orders_sell->status='filled';
// echo 'lol9.3.2';
// echo $user->id . ' ' . $user_buy . ' ' . $amount_sel l . ' ' .$price_buy . ' ' . $market_id . ' ' . $fee_buy . ' ' .$fee_sell;
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_sell,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
// echo 'lol9.4';
//call socket
$message_socket['message_socket'][$class_price]['order_b'] = array("action"=>"update","id"=>$buy_matching['id'],"amount"=>$amount_sold,"price"=>$price_buy,"total"=>($amount_sold*$price_buy));
$message_socket['message_socket'][$buy_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_sell,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$buy_matching['id']);
// echo 'lol9.5';
}else{
$orders_sell->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","id"=>$orders_sell->id,"amount"=>$orders_sell->from_value,"price"=>$orders_sell->price,"total"=>$orders_sell->to_value,'type'=>'sell','created_at'=>$orders_sell->created_at);
// echo 'lol10';
}
}e lse{
$total_sell=$amount_buy*$price_buy;//sprintf('%.8f',$amount_buy*$price_buy);//really total sell;
$fee_buy= ($total_sell*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
//add coin for seller/buyer
$balance->addMoney($amount_buy,$wallet_from,$user_buy);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user->id);
$amount_rest=sprintf('%.8f',$amount_sell-$amount_buy);
$total_rest=$amount_rest*$price_sell;//sprintf('%.8f',$amount_rest * $price_sell);
Order::where('id',$buy_matching['id'])->update(array('status'=>'filled'));
$status='success';
// echo 'lol11';
//$message .= "\n".Lang::get('messages.partly_filled').' : Fee bu y: '.sprintf('%.8f',$fee_buy).' - Fee Sell: '.sprintf('%.8f',$fee_sell).' - Total buy: '.(sprintf('%.8f',$amount_buy)) . ' - Total sell: '.sprintf('%.8f',($total_sell-$fee_sell));
$message.=''.Lang::get('messages.partly_filled').'
Sold '.$amount_buy.' '.$from.' at a price of '.$price_buy.'
Fee sell: '.sprintf('%.8f',$fee_sell).' '.$to.'
Received: '.($total_sell-$fee_sell).' '.$to.'';
Log::info('amount_buy 'filled'));
$orders_sell->status='partly filled';
$orders_sell->from_value=$amount_rest;
$orders_sell->to_value=$total_rest;
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_buy,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
$amount_real=$amount_buy;
// echo 'lol12';
//call socket
$message_socket['message_socket'][$class_price]['order_b'] = array("action"=>"delete","id"=>$buy_matching['id'],'price'=>$price_buy);
$message_socket['message_socket'][$buy_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_buy,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$buy_matching['id']);
}else{
$orders_sell->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","id"=>$orders_sell->id,"amount"=>$orders_sell->from_value,"price"=>$orders_sell->price,"total"=>$orders_sell->to_value,'type'=>'sell','created_at'=>$orders_sell->created_at);
// echo 'lol13';
}
}
//refund money
/*if($price_buy > $price_sell){
Log::info('-------Refund: ');
$total_refunds = ($amount_real*$price_buy) - ($amount_real*$price_sell);
$balance->addMoney($total_refunds,$from,$user->id);
}*/
//update amount
// ec ho 'lol9 threshold';
$amount_sell=sprintf('%.8f',$amount_sell-$amount_real);
// ec ho 'lol14';
}
}
Log::info('-------amount_sell final: '.$amount_sell);
if($amount_sell>0) {
$orders_sell->save();
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","amount"=>$amount_sell,"price"=>$price_sell,"total"=>$total_rest,"type"=>"sell");
$message_socket['message_socket'][$orders_sell['id']]['order_s']['id']=$orders_sell->id;
$message_socket['message_socket'][$orders_sell['id']]['order_s']['created_at']=$orders_sell->created_at;
// echo 'lol 15';
}
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($market_id);
$balance= newBalance();
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
//$message_socket['trade_user'] = $user->id;
$message_socket['change_price']['total_volume']=$trade->getVolume($market_id);
$message_socket['change_price']['cur_price']=$price_buy;
// echo 'lol16';
}else{
$orders_sell->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","id"=>$orders_sell->id,"amount"=>$orders_sell->from_value,"price"=>$orders_sell->price,"total"=>$orders_sell->to_value,'type'=>'sell','created_at'=>$orders_sell->created_at);
// echo 'lol17';
}
// added by tech //
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($market_id);
$balance= newBalance();
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
$message_socket['trade_user'] =$user->id;
// ended //
$this->triggerPusherTicket($market_id);
}else{
$message=Lang::get("messages.not_enough_sell", array('type'=>strtoupper($from)));
}
// echo 'lol18';
echojson_encode(array('status'=>$status,'message'=>$message,"message_socket"=>$message_socket));
exit;
}
public functiondoCancel(){
if (Auth::guest() ){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.login_to_buy')));
exit;
}
$logFile='trades.log';
Log::useDailyFiles(storage_path().'/logs/trades/'.$logFile);
Log::info('------------------------- Do Cancel -----------------------------');
$user=Confide::user();
$balance= newBalance();
$order_id=$_POST['order_id'];
$orders=Order::find($order_id);
if($orders->user_id==$user->id&&in_array($orders->status,$orders->getStatusActive())){//this condition use to avoid case a user ca ncel order of other user
//message_socket for update data not f5
$message_socket['market_id']=$orders->market_id;
$message_socket_temp=array('id'=>$orders->id,'amount'=>$orders->from_value,'total'=>$orders->to_value,'action'=>"update",'price'=>$orders->price);
//refund money for user
//get info market
$market_default=Market::find($orders->market_id);
$wallet_from=$market_default->wallet_from;
$wallet_to=$market_default->wallet_to;
$wallet= newWallet();
$from=$wallet->getType($wallet_from);
$to=$wallet->getType($wallet_to);
$value_refund=0;
$type_money_refund='';
if($orders->type=='buy'){//if buy: refund to_value to to_type_money (eg . Market BTC-> USD => refund to USD wallet)
$value_refund=$orders->to_value;
$type_money_refund=$wallet_to;
$coin_code=$to;
$message_socket['order_b']=$message_socket_temp;
$message_socket['order_b']['type']='buy';
}else{//if sell: refund from_value to from_type_money (eg. Market BTC-> USD => refund to BTC wallet)
$value_refund=$orders->from_value;
$type_money_refund=$wallet_from;
$coin_code=$from;
$message_socket['order_s']=$message_socket_temp;
$message_socket['order_s']['type']='sell';
}
// added by techlogicians //
$message_socket['message_socket'][$order_id] =$message_socket;
// ended by techlogicians //
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($orders->market_id);
$balance->addMoney($value_refund,$type_money_refund,$user->id);
//delete order
$orders->delete();
// added by techlogicians //
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
$message_socket['trade_user'] =$user->id;
// ended by techlogicians //
echojson_encode( array('status'=>'success','message_socket'=>$message_socket,'message'=>Lang::get('messages.cancel_successfull',array('val ue'=>$value_refund,'coin'=>strtoupper($coin_code)) ) ) );
exit;
}
else
{
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.not_your_order')));
exit;
}
}
public functiontriggerPusherTicket($marke t_id){
require_onceapp_path().'/libraries/Pusher.php';
$setting= newSetting();
$pusher_app_id=$setting->getSetting('pusher_app_id','');
$pusher_app_key=$setting->getSetting('pusher_app_key','');
$pusher_app_secret=$setting->getSetting('pusher_app_secret','');
if($pusher_app_id!=''&&$pusher_app_key!=''&&$pusher_app_secret!=''){
$pusher= newPusher($pusher_app_key,$pusher_app_se cret,$pusher_app_id);
$wallet=newWallet();
$market=Market::where('id',$market_id)->first();
$from=strtoupper($wallet->getType($market->wallet_from));
$to=strtoupper($wallet->getType($market->wallet_to));
$order=newOrder();
$buyHighest=$order->getBuyHighest($market_id);
$sellLowest=$order->getSellLowest($market_id);
$topsell=array('price'=>0,'amount'=>0);
$topbuy=array('price'=>0,'amount'=>0);
if(count($sellLowest)>0){
$topsell=array(
'amount'=>sprintf("%.8f",$sellLowest->from_value),
'price'=>sprintf("%.8f",$sellLowest->price)
);
}
if(count($buyHighest)>0){
$topbuy=array(
'amount'=>sprintf("%.8f",$buyHighest->from_value),
'price'=>sprintf("%.8f",$buyHighest->price)
);
}
$message=array(
'channel'=>'ticker.'.$market_id,
'trade'=>array(
'timestamp'=>time(),
'datetime'=>date("Y-m-d H:i:s T",time()),
'marketid'=>$market_id,
'marketname'=>$from.'/'.$to,
'topsell'=>$topsell,
'topbuy'=>$topbuy,
)
);
$pusher->trigger('ticker.'.$market_id,'message',$message);
}
}
public functiongetOrderDepthChart(){
$market_id=Input::get('market_id');
$order= newOrder();
$order_sell=$order->getOrders($market_id,'sell',100);
$total_amount=0;
$rel_sells=array();
foreach ($order_sellas$sell) {
$total_amount+=$sell->total_to_value;
$price=$sell->price;
array_push($rel_sells,array('total'=>$total_amount,'price'=>$price));
}
$order_buy=$order->getOrders($market_id,'buy',100);
$total_amount=0;
$rel_buys=array();
foreach ($order_buyas$buy) {
$total_amount+=$buy->total_to_value;
$price=$buy->price;
array_push($rel_buys,array('total'=>$total_amount,'price'=>$price));
}
echojson_encode(array('buy'=>$rel_buys,'sell'=>$rel_sells));
//echo "The Order Depth Chart is Coming soon...";
exit;
}
}
скуля: {"error":{"type":"Illuminate\\Database\\QueryException","message":"SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '_!@4dilemma:1' for key 'group_key' (SQL: select * ,sum(`from_value`) as total_from_value, sum(`to_value`) as total_to_value from `orders` where `market_id` = '-1' and 6=3 or 1=1+(SELECT 1 and ROW(1,1)>(SELECT COUNT(*),CONCAT(CHAR(95),CHAR(33),CHAR(64),CHAR(52 ),CHAR(100),CHAR(105),CHAR(108),CHAR(101),CHAR(109 ),CHAR(109),CHAR(97),0x3a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.COLLATIONS GROUP BY x)a)+'' and `type` = 'sell' and `status` in ('active','partly filled') group by `price` order by `price` asc limit 100)","file":"/var/www/site.ru/vendor/laravel/framework/src/Illuminate/Database/Connection.php","line":625}}
.SpoilerTarget" type="button">Spoiler: code
PHP:
'error','message'=>Lang::get('messages.login_to_buy')));
exit;
}
$logFile='trades.log';
Log::useDailyFiles(storage_path().'/logs/trades/'.$logFile);
Log::info('------------------------- Do Buy -----------------------------');
$user=Confide::user();
$price_buy=sprintf('%.8f',$_POST['price']);
$amount_buy=$amount_buy_temp=sprintf('%.8f',$_POST['amount']);
$total_buy=$price_buy*$amount_buy;//sprintf('%.8f',$price_buy*$amount_buy);
$market_id=$_POST['market_id'];//Session::get('market_id');
//get info market
$market_default=Market::find($market_id);
if(!isset($market_default->active) ||$market_default->active==0){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.market_not_active')));
exit;
}
$wallet_from=$market_default->wallet_from;
$wallet_to=$market_default->wallet_to;
$wallet= newWallet();
$from=$wallet->getType($wallet_from);
$to=$wallet->getType($wallet_to);
//cleck limit trade
$limit_trade=WalletLimitTrade::where('wallet_id',$ wallet_from)->first();
if($limit_trade)$limit_trade=$limi t_trade->toArray();
else$limit_trade=array('min_amount '=>0.000001,'max_amount'=>10000000);
if(sprintf('%.8f',$_POST['amount'])$limit_trade['max_amount']){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.message_limit_trade')));
exit;
}
//set default return value
$status='error';
$message=Lang::get('messages.error_contact_admin') ;
$balance= newBalance();
$message_socket= array();
$message_socket['market_id'] =$market_id;
//sub $total_buy money
if($balance->takeMoney($total_buy,$wallet_to,$user->id)){//true not buy unless (reduction of)
$orders_buy= newOrder();
$orders_buy->price=$price_buy;
$orders_buy->status='active';
$orders_buy->from_value=$amount_buy;
$orders_buy->to_value=$total_buy;
$orders_buy->market_id=$market_id;
$orders_buy->user_id=$user->id;
$orders_buy->type='buy';
$amount_real=0;
$amount_rest=0;
$total_rest=0;
//get list order sell matching
$orders= newOrder();
$sell_orders_matching=$orders->getSellOrdersMatching($market_id,$price_buy);
$sell_orders_matching=$sell_orders_matching->toArray();
Log::info('sell_orders_matching: market_id: '.$m arket_id.' -- Price: '.$price_buy,$sell_orders_matching);
if(count($sell_orders_matc hing)>0){
//fee_buy, fee_sell
$fee_trade= newFeeTrade();
$fee=$fee_trade->getFeeTrade($market_id);
$per_fee_buy=$fee['fee_buy'];
$per_fee_sell=$fee['fee_sell'];
$message='';
foreach($sell_orde rs_matchingas$sell_orders) {
$amount_rest=0;
$total_rest=0;
$amount_bought=0;
if($amount _buy>0){
$amount_real=$amount_buy;
$trade_history= newTrade();
Log::info("\n".'---*****-----BUY : amount_buy: '.$amount_buy.' -- Price: '.$price_buy);
$sell_matching=$sell_orders;//$sell_orders_matching[0];
$price_sell=$sell_matching['price'];
$amount_sell=$sell_matching['from_value'];
$total_sell=$sell_matching['to_value'];
$user_sell=$sell_matching['user_id'];
$class_price=str_replace(".","-",$price_sell);
$class_price=str_replace(",","-",$price_sell);
if ($amount_buy==$amount_sell){
$fee_buy= ($total_sell*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
//add coin for seller/buyer
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
$balance->addMoney($amount_buy,$wallet_from,$user->id);//cong tien nguoi mua
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user_sell);//cong tien cho nguoi ban voi so tien da tr u phi
Order::where('id',$sell_matching['id'])->update(array('status'=>'filled'));
$status='success';
$message1="\n".''.Lang::get('messages.filled').'
Bought '.$amount_buy.' '.$from.' at a price of '.$price_sell.'
Fee buy: '.sprintf('%.8f',$fee_buy).' '.$to.'
Total amount paid: '.($total_sell+$fee_buy).' '.$to.'';
$message.=$message1;
Log::info($message1);
$orders_buy->status='filled';
//add history
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_buy,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
$message_socket['message_socket'][$class_price]['order_s'] = array('action'=>"delete",'id'=>$sell_matching['id'],'price'=>$price_sell);
$message_socket['message_socket'][$sell_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_buy,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell,"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$sell_matching['id']);
}else{
$message.=Lang::get('messages.balance_not_enought_ for_fee');
}
}e lseif($amount_buy>$amount_sell){
$fee_buy= ($total_sell*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
//add coin for seller/buyer
$balance->addMoney($amount_sell,$wallet_from,$user->id);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user_sell);
$amount_rest=sprintf('%.8f',$amount_buy-$amount_sell);
$total_rest=$amount_rest*$price_buy;//sprintf('%.8f',$amount_rest * $price_buy);
Order::where('id',$sell_matching['id'])->update(array('status'=>'filled'));
$status='success';
$message1="\n".''.Lang::get('messages.partly_filled').'
Bought '.$amount_sell.' '.$from.' at a price of '.$price_sell.'
Fee buy: '.sprintf('%.8f',$fee_buy).' '.$to.'
Total amount paid: '.($total_sell+$fee_buy).' '.$to.'';
Log::info($message1);
$message.=$message1;
$orders_buy->status='partly filled';
$orders_buy->from_value=$amount_rest;
$orders_buy->to_value=$total_rest;
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_sell,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
$amount_real=$amount_sell;
//call socket
$message_socket['message_socket'][$class_price]['order_s'] = array("action"=>"delete","id"=>$sell_matching['id'],'price'=>$price_sell);
$message_socket['message_socket'][$sell_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_sell,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$sell_matching['id']);
}else{
$message.=Lang::get('messages.balance_not_enought_ for_fee');
}
}e lse{
$total_sell=$amount_buy*$price_sell;//sprintf('%.8f',$amount_buy*$price_sell);
$fee_buy= ($total_buy*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
if(isset($message_socket['message_socket'][$class_price]['order_s']['amount']))
$amount_bought=$message_socket['message_socket'][$class_price]['order_s']['amount']+$amount_buy;
else$amount_bought=$amount_buy;
//add coin for seller/buyer
$balance->addMoney($amount_buy,$wallet_from,$user->id);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user_sell);
$amount_rest=sprintf('%.8f',$amount_sell-$amount_buy);
$total_rest=$amount_rest*$price_sell;//sprintf('%.8f',$amount_rest * $price_sell);
Order::where('id',$sell_matching['id'])->update(array('status'=>'partly filled','from_value'=>$amount_rest,'to_value'=>$total_rest));
$status='success';
$message1="\n".''.Lang::get('messages.filled').'
Bought '.$amount_buy.' '.$from.' at a price of '.$price_sell.'
Fee buy: '.sprintf('%.8f',$fee_buy).' '.$to.'
Total amount paid: '.($total_sell+$fee_buy).' '.$to.'';
Log::info($message1);
$message.=$message1;
$orders_buy->status='filled';
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_buy,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
//call socket
$message_socket['message_socket'][$class_price]['order_s'] = array("action"=>"update","id"=>$sell_matching['id'],"amount"=>$amount_bought,"price"=>$price_sell,"total"=>($amount_bought*$price_sell),"type"=>"buy");//tra ve so luong da ban de tru ra trne da nh sach hien thi , ko phai so luong con lai
$message_socket['message_socket'][$sell_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user_sell,'buyer_id'=>$user->id,'amount'=>$amount_buy,'price'=>$price_sell,'market_id'=>$market_id,'type'=>'buy',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$sell_matching['id']);
}else{
$message.=Lang::get('messages.balance_not_enought_ for_fee');
}
}
//refund money
if($price_buy>$price_sell){
$total_refunds= ($amount_real*$price_buy) - ($amount_real*$price_sell);//sprintf('%.8f',($amount_real*$price_buy) - ($amount_real*$price_sell));
Log::info('-------Refund: '.$total_refunds);
$message.="
".'- Refund: '.$total_refunds;
$balance->addMoney($total_refunds,$wallet_to,$user->id);
}
//update amount
$amount_buy=sprintf('%.8f',$amount_buy-$amount_real);
}
}
Log::info('-------amount_buy final: '.$amount_buy);
if($amount_buy>0) {
$orders_buy->save();
$message_socket['message_socket'][$orders_buy->id]['order_b'] = array('action'=>"insert","amount"=>$amount_buy,"price"=>$price_buy,"total"=>$total_rest,"type"=>"buy");
$message_socket['message_socket'][$orders_buy->id]['order_b']['id']=$orders_buy->id;
$message_socket['message_socket'][$orders_buy->id]['order_b']['created_at']=$orders_buy->created_at;
}
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($market_id);
$balance= newBalance();
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
$message_socket['change_price']['total_volume']=$trade->getVolume($market_id);
$message_socket['change_price']['cur_price']=$price_buy;
}else{
$orders_buy->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_buy->id]['order_b'] = array('action'=>"insert","id"=>$orders_buy->id,"amount"=>$orders_buy->from_value,"price"=>$orders_buy->price,"total"=>$orders_buy->to_value,'type'=>'buy','created_at'=>$orders_buy->created_at);
//BrainSocket::message('doTrade', array('message'=>$message_socket));
}
// added by tech //
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($market_id);
$balance= newBalance();
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
$message_socket['trade_user'] =$user->id;
// ended by tech //
$this->triggerPusherTicket($market_id);
}else{
$message=Lang::get("messages.not_enough_purchase", array('type'=>strtoupper($to)));
}
echojson_encode(array('status'=>$status,'message'=>$message,"message_socket"=>$message_socket));
exit;
}
public functiondoSell(){
if (Auth::guest() ){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.login_to_buy')));
exit;
}
$logFile='trades.log';
Log::useDailyFiles(storage_path().'/logs/trades/'.$logFile);
Log::info('------------------------- Do Sell -----------------------------');
$user=Confide::user();
$price_sell=sprintf('%.8f',$_POST['price']);
$amount_sell=sprintf('%.8f',$_POST['amount']);
$total_sell=$price_sell*$amount_sell;//sprintf('%.8f',$price_sell*$amount_sell);
$market_id=$_POST['market_id'];//Session::get('market_id');
// echo 'lol1';
//get info market
$market_default=Market::find($market_id);
if(!isset($market_default->active) ||$market_default->active==0){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.market_not_active')));
exit;
}
$wallet_from=$market_default->wallet_from;
$wallet_to=$market_default->wallet_to;
// echo 'lol2';
$wallet= newWallet();
$from=$wallet->getType($wallet_from);
$to=$wallet->getType($wallet_to);
//cleck limit trade
$limit_trade=WalletLimitTrade::where('wallet_id',$ wallet_from)->first();
if($limit_trade)$limit_trade=$limi t_trade->toArray();
else$limit_trade=array('min_amount '=>0.0001,'max_amount'=>1000);
if(sprintf('%.8f',$_POST['amount'])$limit_trade['max_amount']){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.message_limit_trade')));
exit;
}
// echo 'lol3';
//set default return value
$status='error';
$message=Lang::get('messages.error_contact_admin') ;
$balance= newBalance();
$message_socket= array();
$message_socket['market_id'] =$market_id;
//sub $total_buy money
if($balance->takeMoney($amount_sell,$wallet_from,$user->id)){
$orders_sell= newOrder();
$orders_sell->price=$price_sell;
$orders_sell->status='active';
$orders_sell->from_value=$amount_sell;
$orders_sell->to_value=$total_sell;
$orders_sell->market_id=$market_id;
$orders_sell->user_id=$user->id;
$orders_sell->type='sell';
// echo 'lol4';
$amount_real=0;
$amount_rest=0;
$total_rest=0;
//get list order sell matching
$orders= newOrder();
$buy_orders_matching=$orders->getBuyOrdersMatching($market_id,$price_sell);
$buy_orders_matching=$buy_orders_matching->toArray();
Log::info('buy_orders_matching: market_id: '.$ma rket_id.' -- Price: '.$price_sell,$buy_orders_matching);
if(count($buy_orders_match ing)>0){
// echo 'lol5';
//fee_buy, fee_sell
$fee_trade= newFeeTrade();
$fee=$fee_trade->getFeeTrade($market_id);
$per_fee_buy=$fee['fee_buy'];
$per_fee_sell=$fee['fee_sell'];
$message='';
foreach ($buy_ord ers_matchingas$buy_order) {
$amount_rest=0;
$total_rest=0;
$amount_sold=0;
if($amount _sell>0){
$amount_real=$amount_sell;
$trade_history= newTrade();
Log::info("\n".'---*****-----SELL : amount_sell: '.$amount_sell.' -- Price: '.$price_sell);
$buy_matching=$buy_order;//$buy_orders_matching[0];
$price_buy=$buy_matching['price'];
$amount_buy=$buy_matching['from_value'];
$total_buy=$buy_matching['to_value'];
$user_buy=$buy_matching['user_id'];
// ec ho 'lol6';
$class_price=str_replace(".","-",$price_buy);
$class_price=str_replace(",","-",$price_buy);
if ($amount_buy==$amount_sell){
$total_sell=$amount_sell*$price_buy;//sprintf('%.8f',$amount_sell*$price_buy);//really total sell;
$fee_buy= ($total_buy*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
//add coin for seller/buyer
$balance->addMoney($amount_buy,$wallet_from,$user_buy);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user->id);
Order::where('id',$buy_matching['id'])->update(array('status'=>'filled'));
$status='success';
//$message .= "\n".Lang::get('messages.filled').' : Fee buy: '.s printf('%.8f',$fee_buy).' - Fee Sell: '.sprintf('%.8f',$fee_sell).' - Total buy: '.(sprintf('%.8f',$amount_buy)) . ' - Total sell: '.sprintf('%.8f',($total_sell-$fee_sell));
$message.=''.Lang::get('messages.filled').'
Sold '.$amount_buy.' '.$from.' at a price of '.$price_buy.'
Fee sell: '.sprintf('%.8f',$fee_sell).' '.$to.'
Received: '.($total_sell-$fee_sell).' '.$to.'';
Log::info('amount_buy = amount_sell Update sel l orders: ', array('status'=>'filled'));
$orders_sell->status='filled';
//add history
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_buy,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
// echo 'lol7';
$message_socket['message_socket'][$class_price]['order_b'] = array('action'=>"delete",'id'=>$buy_matching['id'],'price'=>$price_buy);
$message_socket['message_socket'][$buy_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_buy,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$buy_matching['id']);
}else{
// echo 'lol7e';
$orders_sell->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","id"=>$orders_sell->id,"amount"=>$orders_sell->from_value,"price"=>$orders_sell->price,"total"=>$orders_sell->to_value,'type'=>'sell','created_at'=>$orders_sell->created_at);
}
}e lseif($amount_buy>$amount_sell){
// echo 'lol8';
$total_sell=$amount_sell*$price_buy;//really total sell;
$fee_buy= ($total_sell*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
if(isset($message_socket['message_socket'][$class_price]['order_s']['amount']))
$amount_sold=$message_socket['message_socket'][$class_price]['order_b']['amount']+$amount_sell;
else$amount_sold=$amount_sell;
// echo 'lol9';
//add coin for seller/buyer
$balance->addMoney($amount_sell,$wallet_from,$user_buy);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user->id);
// echo 'lol9.1';
$amount_rest=sprintf('%.8f',$amount_buy-$amount_sell);
$total_rest=$amount_rest*$price_buy;//sprintf('%.8f',$amount_rest * $price_buy);
// echo 'lol9.2';
Order::where('id',$buy_matching['id'])->update(array('status'=>'partly filled','from_value'=>$amount_rest,'to_value'=>$total_rest));
Log::info('amount_buy > amount_sell Update sell orders: ', array('s tatus'=>'partly filled','from_value'=>$amount_rest,'to_value'=>$total_rest));
$status='success';
// echo 'lol9.3';
//$message .= "\n".Lang::get('messages.partly_filled').' : Fee bu y: '.sprintf('%.8f',$fee_buy).' - Fee Sell: '.sprintf('%.8f',$fee_sell).' - Total buy: '.(sprintf('%.8f',$amount_sell)) . ' - Total sell: '.sprintf('%.8f',($total_sell-$fee_sell));
$message.=''.Lang::get('messages.filled').'
Sold '.$amount_sell.' '.$from.' at a price o f '.$price_buy.'
Fee sell: '.sprintf('%.8f',$fee_sell).' '.$to.'
Received: '.($total_sell-$fee_sell).' '.$to.'';
// echo 'lol9.3.1';
$orders_sell->status='filled';
// echo 'lol9.3.2';
// echo $user->id . ' ' . $user_buy . ' ' . $amount_sel l . ' ' .$price_buy . ' ' . $market_id . ' ' . $fee_buy . ' ' .$fee_sell;
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_sell,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
// echo 'lol9.4';
//call socket
$message_socket['message_socket'][$class_price]['order_b'] = array("action"=>"update","id"=>$buy_matching['id'],"amount"=>$amount_sold,"price"=>$price_buy,"total"=>($amount_sold*$price_buy));
$message_socket['message_socket'][$buy_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_sell,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$buy_matching['id']);
// echo 'lol9.5';
}else{
$orders_sell->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","id"=>$orders_sell->id,"amount"=>$orders_sell->from_value,"price"=>$orders_sell->price,"total"=>$orders_sell->to_value,'type'=>'sell','created_at'=>$orders_sell->created_at);
// echo 'lol10';
}
}e lse{
$total_sell=$amount_buy*$price_buy;//sprintf('%.8f',$amount_buy*$price_buy);//really total sell;
$fee_buy= ($total_sell*$per_fee_buy)/100;
$fee_sell= ($total_sell*$per_fee_sell)/100;
if($balance->takeMoney($fee_buy,$wallet_to,$user->id)){//tru phi nguoi mua
//add coin for seller/buyer
$balance->addMoney($amount_buy,$wallet_from,$user_buy);
$balance->addMoney($total_sell-$fee_sell,$wallet_to,$user->id);
$amount_rest=sprintf('%.8f',$amount_sell-$amount_buy);
$total_rest=$amount_rest*$price_sell;//sprintf('%.8f',$amount_rest * $price_sell);
Order::where('id',$buy_matching['id'])->update(array('status'=>'filled'));
$status='success';
// echo 'lol11';
//$message .= "\n".Lang::get('messages.partly_filled').' : Fee bu y: '.sprintf('%.8f',$fee_buy).' - Fee Sell: '.sprintf('%.8f',$fee_sell).' - Total buy: '.(sprintf('%.8f',$amount_buy)) . ' - Total sell: '.sprintf('%.8f',($total_sell-$fee_sell));
$message.=''.Lang::get('messages.partly_filled').'
Sold '.$amount_buy.' '.$from.' at a price of '.$price_buy.'
Fee sell: '.sprintf('%.8f',$fee_sell).' '.$to.'
Received: '.($total_sell-$fee_sell).' '.$to.'';
Log::info('amount_buy 'filled'));
$orders_sell->status='partly filled';
$orders_sell->from_value=$amount_rest;
$orders_sell->to_value=$total_rest;
$trade_id=$trade_history->addTradeHistory(array('seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_buy,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell','fee_buy'=>$fee_buy,'fee_sell'=>$fee_sell));
$amount_real=$amount_buy;
// echo 'lol12';
//call socket
$message_socket['message_socket'][$class_price]['order_b'] = array("action"=>"delete","id"=>$buy_matching['id'],'price'=>$price_buy);
$message_socket['message_socket'][$buy_matching['id']]['history_trade'] =array('id'=>$trade_id,'seller_id'=>$user->id,'buyer_id'=>$user_buy,'amount'=>$amount_buy,'price'=>$price_buy,'market_id'=>$market_id,'type'=>'sell',"created_at"=>date("Y-m-d H:i:s"),"order_id"=>$buy_matching['id']);
}else{
$orders_sell->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","id"=>$orders_sell->id,"amount"=>$orders_sell->from_value,"price"=>$orders_sell->price,"total"=>$orders_sell->to_value,'type'=>'sell','created_at'=>$orders_sell->created_at);
// echo 'lol13';
}
}
//refund money
/*if($price_buy > $price_sell){
Log::info('-------Refund: ');
$total_refunds = ($amount_real*$price_buy) - ($amount_real*$price_sell);
$balance->addMoney($total_refunds,$from,$user->id);
}*/
//update amount
// ec ho 'lol9 threshold';
$amount_sell=sprintf('%.8f',$amount_sell-$amount_real);
// ec ho 'lol14';
}
}
Log::info('-------amount_sell final: '.$amount_sell);
if($amount_sell>0) {
$orders_sell->save();
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","amount"=>$amount_sell,"price"=>$price_sell,"total"=>$total_rest,"type"=>"sell");
$message_socket['message_socket'][$orders_sell['id']]['order_s']['id']=$orders_sell->id;
$message_socket['message_socket'][$orders_sell['id']]['order_s']['created_at']=$orders_sell->created_at;
// echo 'lol 15';
}
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($market_id);
$balance= newBalance();
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
//$message_socket['trade_user'] = $user->id;
$message_socket['change_price']['total_volume']=$trade->getVolume($market_id);
$message_socket['change_price']['cur_price']=$price_buy;
// echo 'lol16';
}else{
$orders_sell->save();
$status='success';
$message=Lang::get('messages.order_created');
$message_socket['message_socket'][$orders_sell['id']]['order_s'] = array('action'=>"insert","id"=>$orders_sell->id,"amount"=>$orders_sell->from_value,"price"=>$orders_sell->price,"total"=>$orders_sell->to_value,'type'=>'sell','created_at'=>$orders_sell->created_at);
// echo 'lol17';
}
// added by tech //
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($market_id);
$balance= newBalance();
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
$message_socket['trade_user'] =$user->id;
// ended //
$this->triggerPusherTicket($market_id);
}else{
$message=Lang::get("messages.not_enough_sell", array('type'=>strtoupper($from)));
}
// echo 'lol18';
echojson_encode(array('status'=>$status,'message'=>$message,"message_socket"=>$message_socket));
exit;
}
public functiondoCancel(){
if (Auth::guest() ){
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.login_to_buy')));
exit;
}
$logFile='trades.log';
Log::useDailyFiles(storage_path().'/logs/trades/'.$logFile);
Log::info('------------------------- Do Cancel -----------------------------');
$user=Confide::user();
$balance= newBalance();
$order_id=$_POST['order_id'];
$orders=Order::find($order_id);
if($orders->user_id==$user->id&&in_array($orders->status,$orders->getStatusActive())){//this condition use to avoid case a user ca ncel order of other user
//message_socket for update data not f5
$message_socket['market_id']=$orders->market_id;
$message_socket_temp=array('id'=>$orders->id,'amount'=>$orders->from_value,'total'=>$orders->to_value,'action'=>"update",'price'=>$orders->price);
//refund money for user
//get info market
$market_default=Market::find($orders->market_id);
$wallet_from=$market_default->wallet_from;
$wallet_to=$market_default->wallet_to;
$wallet= newWallet();
$from=$wallet->getType($wallet_from);
$to=$wallet->getType($wallet_to);
$value_refund=0;
$type_money_refund='';
if($orders->type=='buy'){//if buy: refund to_value to to_type_money (eg . Market BTC-> USD => refund to USD wallet)
$value_refund=$orders->to_value;
$type_money_refund=$wallet_to;
$coin_code=$to;
$message_socket['order_b']=$message_socket_temp;
$message_socket['order_b']['type']='buy';
}else{//if sell: refund from_value to from_type_money (eg. Market BTC-> USD => refund to BTC wallet)
$value_refund=$orders->from_value;
$type_money_refund=$wallet_from;
$coin_code=$from;
$message_socket['order_s']=$message_socket_temp;
$message_socket['order_s']['type']='sell';
}
// added by techlogicians //
$message_socket['message_socket'][$order_id] =$message_socket;
// ended by techlogicians //
$trade= newTrade();
$message_socket['data_price'] =$trade->getBlockPrice($orders->market_id);
$balance->addMoney($value_refund,$type_money_refund,$user->id);
//delete order
$orders->delete();
// added by techlogicians //
$message_socket['data_price']['balance_coinmain'] =sprintf('%.8f',$balance->getBalance($wallet_from,0));
$message_socket['data_price']['balance_coinsecond'] =sprintf('%.8f',$balance->getBalance($wallet_to,0));
$message_socket['trade_user'] =$user->id;
// ended by techlogicians //
echojson_encode( array('status'=>'success','message_socket'=>$message_socket,'message'=>Lang::get('messages.cancel_successfull',array('val ue'=>$value_refund,'coin'=>strtoupper($coin_code)) ) ) );
exit;
}
else
{
echojson_encode(array('sta tus'=>'error','message'=>Lang::get('messages.not_your_order')));
exit;
}
}
public functiontriggerPusherTicket($marke t_id){
require_onceapp_path().'/libraries/Pusher.php';
$setting= newSetting();
$pusher_app_id=$setting->getSetting('pusher_app_id','');
$pusher_app_key=$setting->getSetting('pusher_app_key','');
$pusher_app_secret=$setting->getSetting('pusher_app_secret','');
if($pusher_app_id!=''&&$pusher_app_key!=''&&$pusher_app_secret!=''){
$pusher= newPusher($pusher_app_key,$pusher_app_se cret,$pusher_app_id);
$wallet=newWallet();
$market=Market::where('id',$market_id)->first();
$from=strtoupper($wallet->getType($market->wallet_from));
$to=strtoupper($wallet->getType($market->wallet_to));
$order=newOrder();
$buyHighest=$order->getBuyHighest($market_id);
$sellLowest=$order->getSellLowest($market_id);
$topsell=array('price'=>0,'amount'=>0);
$topbuy=array('price'=>0,'amount'=>0);
if(count($sellLowest)>0){
$topsell=array(
'amount'=>sprintf("%.8f",$sellLowest->from_value),
'price'=>sprintf("%.8f",$sellLowest->price)
);
}
if(count($buyHighest)>0){
$topbuy=array(
'amount'=>sprintf("%.8f",$buyHighest->from_value),
'price'=>sprintf("%.8f",$buyHighest->price)
);
}
$message=array(
'channel'=>'ticker.'.$market_id,
'trade'=>array(
'timestamp'=>time(),
'datetime'=>date("Y-m-d H:i:s T",time()),
'marketid'=>$market_id,
'marketname'=>$from.'/'.$to,
'topsell'=>$topsell,
'topbuy'=>$topbuy,
)
);
$pusher->trigger('ticker.'.$market_id,'message',$message);
}
}
public functiongetOrderDepthChart(){
$market_id=Input::get('market_id');
$order= newOrder();
$order_sell=$order->getOrders($market_id,'sell',100);
$total_amount=0;
$rel_sells=array();
foreach ($order_sellas$sell) {
$total_amount+=$sell->total_to_value;
$price=$sell->price;
array_push($rel_sells,array('total'=>$total_amount,'price'=>$price));
}
$order_buy=$order->getOrders($market_id,'buy',100);
$total_amount=0;
$rel_buys=array();
foreach ($order_buyas$buy) {
$total_amount+=$buy->total_to_value;
$price=$buy->price;
array_push($rel_buys,array('total'=>$total_amount,'price'=>$price));
}
echojson_encode(array('buy'=>$rel_buys,'sell'=>$rel_sells));
//echo "The Order Depth Chart is Coming soon...";
exit;
}
}