<?php
require_once 'lib/nusoap.php';
require_once 'config.php';
include_once 'telegram.php';
$telegram = new telegram(TOKEN,HOST,USERNAME,PASSWORD,DBNAME);
$order_id = intval(base64_decode($_GET['token']));
$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'];

$Authority = $_GET['Authority'];
if ($_GET['Status'] == 'OK') {
    // Old SOAP method
    /*
    $client = new nusoap_client('https://www.zarinpal.com/pg/services/WebGate/wsdl', 'wsdl');
    $client->soap_defencoding = 'UTF-8';
    $result = $client->call('PaymentVerification', [
        [
            'MerchantID'     => ZARINPALMID,
            'Authority'      => $Authority,
            'Amount'         => $price,
        ],
    ]);
    */

    // New REST API v4 method (amount in Rial, not Toman)
    $data = [
        'merchant_id' => ZARINPALMID,
        'authority'   => $Authority,
        'amount'      => $price * 10, // REST API v4 requires amount in Rial (Toman * 10)
    ];
    
    $ch = curl_init('https://api.zarinpal.com/pg/v4/payment/verify.json');
    curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v4');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    
    $response = curl_exec($ch);
    curl_close($ch);
    
    $responseData = json_decode($response, true);
    
    if (isset($responseData['data']['code']) && $responseData['data']['code'] == 100) {
        $result = [
            'Status' => 100,
            'RefID' => isset($responseData['data']['ref_id']) ? $responseData['data']['ref_id'] : ''
        ];
    } elseif (isset($responseData['data']['code']) && $responseData['data']['code'] == 101) {
        $result = [
            'Status' => 101
        ];
    } else {
        $result = [
            'Status' => isset($responseData['errors']['code']) ? $responseData['errors']['code'] : -1
        ];
    }

    if ($result['Status'] == 100) {
        $refid = ltrim($Authority, "0");  
    
    // V2ray Api
    require_once('vray.php');
    $token = generateRandomString2(16);
    $srv_type = $telegram->db->query("select * from server_info WHERE id='$server_id'")->fetch(2)['ptype'];
    if($srv_type == 'marzban'){
        $token = '';
        // marzban Api
        require_once('marz.php');
    
        $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'];
        $uremark = $telegram->db->query("select * from fl_remark where userid=$userid")->fetch(2);
        if($uremark) $uremark = $uremark['remark']; else $uremark = $srv_remark;
        $remark = "{$uremark}_{$last_num}";
        $remark = str_replace('@', '', $remark);
        $username = $remark;
		
        file_put_contents('savedinfo.txt',$port.'-'.$last_num);
        
        $protocol = explode('|', $protocol);
        $response = adduser($server_id, $username, $expire_date, $volume, $protocol);  

        if(is_null($response) or !$response){
            die('🔻اتصال به سرور برقرار نیست. لطفا به مدیریت اطلاع بدید');
        }
    
    	if(!$response->subscription_url){
            die('🔻خطا در ساخت کانفیگ. لطفا به مدیریت اطلاع بدید');
        }
    
        $panel_url = $telegram->db->query("SELECT * FROM server_info WHERE id=$server_id")->fetch(2)['panel_url'];
        $sublink = $response->subscription_url;
		$vray_link = $sublink;
        $acc_text = "<code>$sublink</code>" . " \n\n  برای کپی کردن لینک روی آن کلیک کنید \n";
    	include 'phpqrcode/qrlib.php';
    	$file = "images/$userid".time().".png";
        QRcode::png($sublink, $file, 'L', 10, 5);
        	
    	$acc_text = "✅سرویس شما با موفقیت ایجاد شد
👤 نام سرویس : $username

🔗 لینک اتصال :
$acc_text";

	    $telegram->sendPhoto($userid,$acc_text,$file);
    
    bot('sendMessage', [
    'chat_id' => $userid,
    'text' => $amozesh_text,
    'parse_mode' => 'HTML',
    ]);
    
	    $telegram->db->query("UPDATE `fl_server` SET `ucount` = ucount - 1 WHERE id=$server_id");
    }else{
        
        $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 = "";
    	
    	$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";
    
        
        include 'phpqrcode/qrlib.php';
        $path = 'images/';
        $file = $path.$userid.".png"; //unlink($file);
        $ecc = 'L';
        $pixel_Size = 10;
        $frame_Size = 10;
        QRcode::png($vray_link, $file, $ecc, $pixel_Size, $frame_size);
    	addBorderImage($file);
    	$telegram->sendPhoto($userid,$acc_text,$file);
    }
$sndmsg = "
خرید درگاه زرین 
قیمت : $price
آیدی کاربر : $userid
آیدی سرور : $server_id
لینک دریافتی :

$vray_link
";
    $telegram->sendMessage($sendchnl,$sndmsg);
	$order = $telegram->db->query("update `fl_order` set link='$vray_link',remark='$remark',token='$token',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");
    }
    echo '<h1 style="text-align:right;color:green;">تراکنش با موفقیت انجام شد . لطفا به ربات برگردید</h1>';
    $msg = "
✅سفارش شما با موفقیت ثبت شد .
📝 شماره تراکنش : $refid
.";
    $telegram->sendMessage($userid, $msg);
        
    
    // 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 تومان به کیف پول شما اضافه شد👍"); 
    }


    }elseif($result['Status'] == '101'){
        echo '<h1 style="text-align:right;color:green;">تراکنش شما از قبل تایید شده. لطفا از این صفحه خارج بشید و به ربات برگردید :</h1>';
    } else {
        echo 'خطایی در هنگام پرداخت بوجود آمد . لطفا دوباره تلاش کنید . در صورت کسر وجه ، در عرض 24 ساعت به حساب شما برگشت داده می شود'.$result['Status'];
    }
} else {
    echo 'پرداخت توسط کاربر کنسل شد و تایید شده نمی باشد';
}
