<?php ob_start();
require_once 'lib/nusoap.php';
require_once 'config.php';
require_once 'telegram.php';
$telegram = new telegram(TOKEN,HOST,USERNAME,PASSWORD,DBNAME);

$TokenCode = PAYPINGMD;

if(!isset($_GET['type'])) exit;


$action = isset($_GET['action']) ? $_GET['action'] : 'pay';
$type = $_GET['type'];
$callback_url = baseURI."/payping.php?type=$type&action=verify";
$gateways = $telegram->db->query("select * from gateway where id=1")->fetch(2);
if($type == 'renew'){
    if($action == 'pay'){
        $token = base64_decode($_GET['token']);
        $input = explode('#',$token); 
        $userid = intval($input[0]);
        $fid = intval($input[1]);
        $oid = intval($input[2]);
        $order = $telegram->db->query("select * from fl_order where id=$oid")->fetch(2);
        //$fid = $order['fileid'];
        $remark = $order['remark'];
        $server_id = $order['server_id'];
        $inbound_id = $order['inbound_id'];
        $respd = $telegram->db->query("select * from fl_file WHERE id='$fid' and active=1")->fetch(2);
        $name = $respd['title'];
        $days = $respd['days'];
        $volume = $respd['volume'];
        $price = $respd['price'];
        payping_payment($price, $TokenCode, base64_encode($token), $callback_url);
    }elseif($action == 'verify'){
        if(!isset($_POST['data'])) die('error');
        if(!json_decode($_POST['data'])->clientRefId) die('no id');
        $token = json_decode($_POST['data'])->clientRefId;
        
        $token = base64_decode($token);
        $input = explode('#',$token);
        $userid = intval($input[0]);
        $fid = intval($input[1]);
        $oid = intval($input[2]);
        $order = $telegram->db->query("select * from fl_order where id=$oid")->fetch(2);
        //$fid = $order['fileid'];
        $remark = $order['remark'];
        $server_id = $order['server_id'];
        $inbound_id = $order['inbound_id'];
        $expire_date = $order['expire_date'];
        $expire_date = ($expire_date > $time) ? $expire_date : $time;
        $respd = $telegram->db->query("select * from fl_file WHERE id='$fid' and active=1")->fetch(2);
        $name = $respd['title'];
        $days = $respd['days'];
        $volume = $respd['volume'];
        $price = $respd['price'];
        $time = time();
        $pay_result = payping_verify($price, $TokenCode);
        if($pay_result == 'success'){
            echo 'تراکنش با موفقیت انجام شد';
            $msg = "✅ سفارش شما با موفقیت ثبت شد";
            $telegram->sendMessage($userid, $msg);
    
            require_once('vray.php');
            if($inbound_id > 0)
                $response = renew_client($server_id, $inbound_id, $remark, $volume, $days);
            else
                $response = renew_inbound($server_id, $remark, $volume, $days);
            if($response->success){
                $telegram->db->query("update fl_order set expire_date= $expire_date + $days * 86400,notif=0 where id='$oid'"); 
                $telegram->db->query("INSERT INTO `fl_extra_order` VALUES (NULL, '$userid', '$server_id', '$inbound_id', '$remark', '$price', '$time');");
                $telegram->sendMessage($userid, "✅سرویس $remark با موفقیت تمدید شد");

                $sndmsgg = "
                خرید درگاه پی پینگ
                قیمت : $price
            آیدی کاربر : $userid
            آیدی سرور : $server_id
            لینک دریافتی :
            
            $remark
            ";
                $telegram->sendMessage($sendchnl,$sndmsgg);
                exit;
        
            }else {
                die("مشکل فنی در ارتباط با سرور. لطفا به مدیریت اطلاع بدید");
            }
        }
        
        
    }
}

if($type == 'day'){
    if($action == 'pay'){
        $token = base64_decode($_GET['token']);
        $input = explode('#',$token); 
        $server_id = intval($input[0]);
        $inbound_id = intval($input[1]);
        $remark = htmlspecialchars(strip_tags($input[2]));
        $planid = intval($input[3]);
        $userid = intval($input[4]); 
        $res = $telegram->db->query("select * from extra_day where id=$planid")->fetch(2);  
        $price = $res['price'];
        $volume = $res['volume'];
        payping_payment($price, $TokenCode, base64_encode($token), $callback_url);
    }elseif($action == 'verify'){
        if(!isset($_POST['data'])) die('error');
        if(!json_decode($_POST['data'])->clientRefId) die('no id');
        $token = json_decode($_POST['data'])->clientRefId;
        
        $token = base64_decode($_GET['token']);
        $input = explode('#',$token);
        $server_id = $input[0];
        $inbound_id = $input[1];
        $remark = $input[2];
        $planid = $input[3];
        $userid = $input[4];
        $res = $telegram->db->query("select * from extra_day where id=$planid")->fetch(2);  
        $amount = $res['price'];
        $price = $res['volume'];
        $time = time();

        $pay_result = payping_verify($price, $TokenCode);
        if($pay_result == 'success'){
            echo 'تراکنش با موفقیت انجام شد';
            $msg = "✅ سفارش شما با موفقیت ثبت شد";
            $telegram->sendMessage($userid, $msg);
    
            require_once('vray.php');
            if($inbound_id > 0)
                $response = update_client_traffic($server_id, $inbound_id, $remark, 0, $volume);
            else
                $response = update_inbound_traffic($server_id, $remark, 0, $volume);
            if($response->success){
                $telegram->db->query("update fl_order set expire_date= expire_date + $volume * 86400,notif=0 where remark='$remark'");
                $telegram->db->query("INSERT INTO `fl_extra_order` VALUES (NULL, '$userid', '$server_id', '$inbound_id', '$remark', '$price', '$time');");
                $telegram->sendMessage($userid, "✅$volume روز به مدت زمان سرویس شما اضافه شد");
        
            }else {
                die("مشکل فنی در ارتباط با سرور. لطفا به مدیریت اطلاع بدید");
            }
        }
        
        
    }
}

if($type == 'volume'){
    if($action == 'pay'){
        $token = base64_decode($_GET['token']);
        $input = explode('#',$token); 
        $server_id = intval($input[0]);
        $inbound_id = intval($input[1]);
        $remark = htmlspecialchars(strip_tags($input[2]));
        $planid = intval($input[3]);
        $userid = intval($input[4]); 
        $res = $telegram->db->query("select * from extra_plan where id=$planid")->fetch(2);  
        $price = $res['price'];
        $volume = $res['volume'];
        payping_payment($price, $TokenCode, base64_encode($token), $callback_url);
    }elseif($action == 'verify'){
        if(!isset($_POST['data'])) die('error');
        if(!json_decode($_POST['data'])->clientRefId) die('no id');
        $token = json_decode($_POST['data'])->clientRefId;
        
        $token = base64_decode($token);
        $input = explode('#',$token);
        $server_id = $input[0];
        $inbound_id = $input[1];
        $remark = $input[2];
        $planid = $input[3];
        $userid = $input[4];
        $res = $telegram->db->query("select * from extra_plan where id=$planid")->fetch(2);  
        $price = $res['price'];
        $volume = $res['volume'];
        $time = time();

        $pay_result = payping_verify($price, $TokenCode);
        if($pay_result == 'success'){
            echo 'تراکنش با موفقیت انجام شد';
            $msg = "✅ سفارش شما با موفقیت ثبت شد";
            $telegram->sendMessage($userid, $msg);
    
            require_once('vray.php');
            if($inbound_id > 0)
                $response = update_client_traffic($server_id, $inbound_id, $remark, $volume, 0);
            else
                $response = update_inbound_traffic($server_id, $remark, $volume, 0);
            if($response->success){
                $telegram->db->query("update fl_order set notif=0 where remark='$remark'");
                $telegram->db->query("INSERT INTO `fl_extra_order` VALUES (NULL, '$userid', '$server_id', '$inbound_id', '$remark', '$price', '$time');");
                $telegram->sendMessage($userid, "✅$volume گیگ به حجم سرویس شما اضافه شد");
            }else {
                die("مشکل فنی در ارتباط با سرور. لطفا به مدیریت اطلاع بدید");
            }
        }
        
        
    }
}

if($type == 'wallet'){
    if($action == 'pay'){
        $amount = intval($_GET['amount']);
        //if($amount < $min_wallet_charge) die('مبلغ کمتر از 2هزار تومان است');
        $userid = intval($_GET['userid']);
        $result = $telegram->db->query("select * from fl_user WHERE userid='$userid'")->rowCount();
        if($result == 0) die('اطلاعات ارسال اشتباه است');
        $telegram->db->query("INSERT INTO `fl_wallet` VALUES (NULL, $amount, $userid, '','0');");
        $woid = $telegram->db->lastInsertId();
        payping_payment($amount, $TokenCode, $woid, $callback_url);
    }elseif($action == 'verify'){
        if(!isset($_POST['data'])) die('error');
        if(!json_decode($_POST['data'])->clientRefId) die('no id');
        $woid = intval(json_decode($_POST['data'])->clientRefId);
        
        $res = $telegram->db->query("select * from fl_wallet where id='$woid'")->fetch(2);
        $amount = $res['amount'];
        $userid = $res['userid'];
        $pay_result = payping_verify($amount, $TokenCode);
        if($pay_result == 'success'){
            echo '<h1 style="text-align:right;color:green;">کیف پول شما با موفقیت شارژ شد</h1>' ; 
            $telegram->db->query("update fl_user set wallet= wallet + $amount where userid='$userid'");
            $telegram->db->query("update fl_wallet set status=1 where id=$woid");
            $msg = "✅ کیف پول شما به مبلغ $amount تومان شارژ شد ";
            $telegram->sendMessage($userid, $msg);
        }


        $sndmsgg = "
        خرید درگاه پی پینگ
            قیمت : $amount
            آیدی کاربر : $userid
            
            ";
                $telegram->sendMessage($sendchnl,$sndmsgg);
        
        
    }
}

if($type == 'buy'){
    if($action == 'pay'){
        if(!isset($_GET['token'])){
            header('location:https://t.me/'.botid);
            exit;
        }
        
        $token = base64_decode($_GET['token']); 
        $token = explode('.',$token);
        $userid = intval($token[0]);
        $fid = intval($token[1]);
        if($token[2]) $dcode = htmlspecialchars(strip_tags($token[2]));
        
        $file_detail = $telegram->db->query("select * from fl_file WHERE id=$fid")->fetch(2); 
        $date = time();
        $days = $file_detail['days'];
        $expire_date = $date + (86400 * $days);
        $protocol = $file_detail['protocol'];
        $price = $file_detail['price'];
        $server_id = $file_detail['server_id'];
        $acount = $file_detail['acount'];
        $inbound_id = $file_detail['inbound_id'];
        
        if($dcode){
            $dcount = $telegram->db->query("select * from fl_discount WHERE code='$dcode' and active=1");
            if($dcount->rowCount() > 0){
                $amount = $dcount->fetch(2)['amount'];
                if($amount <= 100) {
                    $price = $price * (100-$amount)/100;
                }else {
                    $price = $price - $amount ;
                }
            }
        }
            
        if($acount == 0 and $inbound_id != 0){
            echo 'ظرفیت این کانکشن پر شده است';
            exit;
        }
        $order = $telegram->db->query("INSERT INTO `fl_order` VALUES (NULL,  {$userid}, '', {$fid}, $server_id, $inbound_id, '', '$protocol', $expire_date, '','',  $price,0, '$date', 0);");
        $order_id = $telegram->db->lastInsertId();
        payping_payment($price, $TokenCode, $order_id, $callback_url);
    }elseif($action == 'verify'){
        if(!isset($_POST['data'])) die('error');
        if(!json_decode($_POST['data'])->clientRefId) die('no id');
        $order_id = intval(json_decode($_POST['data'])->clientRefId);
        
        $orderDetails = $telegram->db->query("select * from fl_order where id={$order_id}")->fetch(2);
        $userid = $orderDetails['userid'];
        $fid = $orderDetails['fileid'];
        $file_detail = $telegram->db->query("select * from fl_file WHERE id=$fid")->fetch(2);
        $days = $file_detail['days'];
        $date = time();
        $expire_microdate = intval(floor(microtime(true) * 1000) + (864000 * $days * 100));
        $expire_date = $date + (86400 * $days);
        $type = $file_detail['type'];
        $volume = $file_detail['volume'];
        $protocol = $file_detail['protocol'];
        $price = $file_detail['price'];
        $server_id = $file_detail['server_id'];
        $netType = $file_detail['type'];
        $acount = $file_detail['acount'];
        $inbound_id = $file_detail['inbound_id'];
        $limitip = $file_detail['limitip'];
        
        $price = $orderDetails['amount'];
        
        $pay_result = payping_verify($price, $TokenCode);
        if($pay_result == 'success'){
            echo "<h1>پرداخت شما با موفقیت انجام شد. به ربات تلگرام بازگردید<h1>" ;
            $telegram->db->query("update fl_order set status=1 where id='$order_id'");
            $telegram->sendMessage($userid, "✅سفارش شما با موفقیت ثبت شد");
    
            // V2ray Api
            require_once('vray.php');
            $uniqid = generateRandomString(42,$protocol); 
        
            $savedinfo = file_get_contents('savedinfo.txt');
            $savedinfo = explode('-',$savedinfo);
            $port = $savedinfo[0] + 1;
            $last_num = $savedinfo[1] + 1;
        
            $srv_remark = $telegram->db->query("select * from fl_server WHERE id=$server_id")->fetch(2)['remark'];
            $remark = "{$srv_remark}-{$last_num}";
        
            file_put_contents('savedinfo.txt',$port.'-'.$last_num);
            //$telegram->sendMessage($cuserid,"$server_id, $uniqid, $inbound_id, $expire_microdate, $remark, $volume");exit;
            
            if($inbound_id == 0){    
                $response = add_inbound($server_id, $uniqid, $protocol, $port, $expire_microdate, $remark, $volume, $netType); 
                if(! $response->success){
                    // run again
                    $response = add_inbound($server_id, $uniqid, $protocol, $port, $expire_microdate, $remark, $volume, $netType);
                } 
            }else {
                $response = add_inbount_client($server_id, $uniqid, $inbound_id, $expire_microdate, $remark, $volume, $limitip); 
                if(! $response->success){
                    // run again
                    $response = add_inbount_client($server_id, $uniqid, $inbound_id, $expire_microdate, $remark, $volume, $limitip);
                } 
            }
            
            //$telegram->sendMessage($cuserid,json_encode($response));exit;
             
            $vray_link = genLink($server_id, $uniqid, $protocol, $remark, $port, $netType, $inbound_id);
            $addsub = "";
            /*if($gateways['sublink'] == 1){
            	$subid = getsubid($server_id, $inbound_id, $remark);
            	if($subid != '' and !is_null($subid) and $subid != '0'){
            		$server_detail = $telegram->db->query("SELECT * FROM server_info WHERE id=$server_id")->fetch(2);
            		$pnlurl = $server_detail['sublink'];
            		$sublink = $pnlurl."/sub/$subid";
            		$addsub = "\n\n (لینک سابسکریپشن با امکان نمایش حجم و تاریخ انقضا و بروز رسانی لینک ) \n $sublink \n";
            	}
            }*/
        	$token = generateRandomString2(16);
        	$getLink_url = baseURI."sub.php?token=".$token;
        	if($gateways['sublink'] == 1){
        		$addsub = "\n\n 🔗 لینک هوشمند سرویس شما: \n <code>$getLink_url</code>";
        	}
            $acc_text = "🔗 $remark \n <code>$vray_link</code> $addsub" . " \n  برای کپی کردن لینک روی آن کلیک کنید \n";

            $file = "images/{$userid}.{$time}".rand(0,999999).".png";
			create_qrcode($vray_link, $file);
        	$telegram->sendPhoto($userid,$acc_text,$file);
        
        	$order = $telegram->db->query("update `fl_order` set link='$vray_link',token='$token',remark='$remark',status=1 where id=$order_id");
        	
        	if($inbound_id == 0) {
                $server_info = $telegram->db->query("SELECT * FROM fl_server WHERE id=$server_id")->fetch(2);
                if($server_info['ucount'] != 0)
                    $telegram->db->query("UPDATE `fl_server` SET `ucount` = ucount - 1 WHERE id=$server_id");
            }else{
                if($acount != 0) 
                    $telegram->db->query("UPDATE `fl_file` SET `acount` = acount - 1 WHERE id=$fid");
            }
            
            // pay referer
            $userReferer = $telegram->db->query("select * from fl_subuser where userid=$userid");
            if($userReferer->rowCount() ){
                $ures = $userReferer->fetch(2);
                $userToplevel = $ures['toplevel_userid'];
                $ufname = $ures['fname'];
                $amount = ($price) * ($pursant / 100);
                $telegram->db->query("update fl_user set wallet= wallet + $amount WHERE userid=$userToplevel");
                $telegram->sendMessage($userToplevel, "💟کاربر {$ufname} یک خرید به مبلغ  $price تومان انجام داد و $pursant درصد آن یعنی $amount تومان به کیف پول شما اضافه شد👍"); 
				
				$wallet_toplevel = $telegram->db->query("select * from fl_user where userid='$userToplevel'")->fetch(2)['wallet'];
        $msg = "واریز پورسانت
خریدار : $userid
یوزر بالاسری: $userToplevel
مقدار پورسانت: $amount تومان
کیف پول یوزر بالاسری: $wallet_toplevel";
        $telegram->sendMessage($sendchnl, $msg);
            }


            $sndmsgg = "
            خرید درگاه پی پینگ
            قیمت : $price
            آیدی کاربر : $userid
            آیدی سرور : $server_id
            لینک دریافتی :
            
            $vray_link
            ";
                $telegram->sendMessage($sendchnl,$sndmsgg);

            
        }
    } // verify
}



function payping_payment($price, $TokenCode, $oid, $callback_url){
    $data = array(
        'ClientRefId'   => (string) $oid,
        'payerIdentity' => (string) $oid,
        'amount'        => $price,
        'Description'   => '',
        'returnUrl'     => $callback_url
    );

    try{
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => "https://api.payping.ir/v3/pay",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 45,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => json_encode($data),
            CURLOPT_HTTPHEADER => array(
                "accept: application/json",
                "authorization: Bearer " . $TokenCode,
                "cache-control: no-cache",
                "content-type: application/json"
            ),
                )
        );
        $response = curl_exec( $curl );
    
    
        $header = curl_getinfo( $curl );
        $err = curl_error( $curl );
        curl_close( $curl );
    
        if( $err ){
            $msg = 'کد خطا: CURL#' . $er;
            $erro = 'در اتصال به درگاه مشکلی پیش آمد.';
            echo $erro;
        }else{
            if( $header['http_code'] == 200 ){
                $response = json_decode( $response, true );
                if( isset( $response ) and $response != '' ){
                    $paymentCode = $response['paymentCode'];
                    $url = $response['url'];
                    header( 'Location: ' . $url );die;
                }else{
                    $msg = 'تراکنش ناموفق بود - شرح خطا: عدم وجود کد ارجاع';
                }
            }elseif($header['http_code'] == 400){
                $msg = 'تراکنش ناموفق بود، شرح خطا: ' . $response;
            }else{
                $msg = 'تراکنش ناموفق بود، شرح خطا: ' . $header['http_code'];
            }
            echo $msg;
        }
    }catch(Exception $e){
        echo 'تراکنش ناموفق بود، شرح خطا سمت برنامه شما: ' . $e->getMessage();
    }
}

function payping_verify($price, $TokenCode){// var_dump($_POST);die;
    $status = $_POST['status'];
    $errorCode = $_POST['errorCode'];
    if($errorCode != '') {
        die('پرداخت ناموفق');
    }
    
    if(!isset($_POST['data'])) die('error');
    if(!json_decode($_POST['data'])->clientRefId) die('no id');
    
    $data = json_decode($_POST['data']);
        
    if (isset($data->paymentCode)) {
        $paymentCode = $data->paymentCode;
    } else {
        $paymentCode = 0;
    }
    
    if(!isset($data->paymentRefId)){
        die('پرداخت ناموفق');
    }
    $amount = $data->amount; 
    $paymentCode = $data->paymentCode; 
    $paymentRefId = $data->paymentRefId; 
    $post_data = array(
        'Amount' => $amount,
        'PaymentRefId'  => $paymentRefId,
        'paymentCode'  => $paymentCode,
    );
    try{
        $curl = curl_init();
        curl_setopt_array( $curl, array(
            CURLOPT_URL => "https://api.payping.ir/v3/pay/verify",
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => "",
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 45,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => "POST",
            CURLOPT_POSTFIELDS => json_encode($post_data),
            CURLOPT_HTTPHEADER => array(
                "accept: application/json",
                "authorization: Bearer " . $TokenCode,
                "cache-control: no-cache",
                "content-type: application/json",
            ),
        ) );
        $response = curl_exec( $curl ); 
        $err = curl_error( $curl );
        $header = curl_getinfo( $curl );
        curl_close( $curl );
        if($err){
            $msg = 'خطا در ارتباط به پی‌پینگ :شرح خطا' . $err;
        }else{
            if($header['http_code'] == 200){
                $response = json_decode( $response, true ); //var_dump($response);die;
                if( isset($response['paymentRefId']) and $response['amount'] == $price and $response['clientRefId'] == $data->clientRefId){
                    $msg = ' تراکنش موفق بود: ' . $refid;
                    $outp['msg'] = $msg;
                    return 'success';
                }else{
                    $msg = ' سامانه قادر به دریافت کد پیگیری نمی‌باشد! نتیجه درخواست: ' . $header['http_code'];
                }
            }elseif($header['http_code'] == 400){
                $msg = ' تراکنش ناموفق بود، شرح خطا: ' . $response;
                $outp['msg'] = $msg;
            }else{
                $msg = ' تراکنش ناموفق بود، شرح خطا: ' . $header['http_code'];
            }
            echo $msg;
        }
    }catch( Exception $e ){
        echo ' تراکنش ناموفق بود، شرح خطا سمت برنامه شما: ' . $e->getMessage();
    }
}