<?php
header('Content-Type: text/html; charset=utf-8');
require_once('../../../core/includes/master.inc.php');
$pluginConfig   = pluginHelper::pluginSpecificConfiguration('zarinpal');
$pluginSettings = $pluginConfig['data']['plugin_settings'];
$zarinpal_merchant    = '';
if (strlen($pluginSettings)){
    $pluginSettingsArr = json_decode($pluginSettings, true);
    $zarinpal_merchant       = $pluginSettingsArr['zarinpal_merchant'];
    $zarinpal_server       = $pluginSettingsArr['zarinpal_server'];
}
if (!isset($_REQUEST['days'])){
    coreFunctions::redirect(WEB_ROOT . '/index.html');
}
// require login
if (!isset($_REQUEST['i'])){
    $Auth->requireUser(WEB_ROOT.'/login.'.SITE_CONFIG_PAGE_EXTENSION);
    $userId    = $Auth->id;
    $username  = $Auth->username;
    $userEmail = $Auth->email;
}
else
{
    $user = UserPeer::loadUserByIdentifier($_REQUEST['i']);
    if (!$user)
    {
        die('همچین کاربری وجود ندارد');
    }

    $userId    = $user->id;
    $username  = $user->username;
    $userEmail = $user->email;
}
$days = (int) (trim($_REQUEST['days']));
$fileId = null;
if (isset($_REQUEST['f'])){
    $file = file::loadByShortUrl($_REQUEST['f']);
    if ($file){
        $fileId = $file->id;
    }
}
// create order entry
$orderHash = MD5(time() . $userId);
$amount    = intval(number_format(constant('SITE_CONFIG_COST_FOR_' . $days . '_DAYS_PREMIUM'), 2));
$order     = OrderPeer::create($userId, $orderHash, $days, $amount, $fileId);
$return_url = urldecode(PLUGIN_WEB_ROOT . '/' . $pluginConfig['data']['folder_name'] . '/site/return.php').'?custom='.urlencode($orderHash).'&mc_gross='.$amount;
if ($order)
{    
	//start of zarinpal
	$MerchantID = $zarinpal_merchant;
	$Amount = $amount;
	$Description = 'خرید اکانت '.intval($days).' روزه کاربر '.$username; 
	$Email = isset($userEmail) ? $userEmail : '-'; 
	$Mobile ='-'; 
	$CallbackURL =  $return_url;
	
	if ($zarinpal_server == 'iran')
		$client = new SoapClient('https://ir.zarinpal.com/pg/services/WebGate/wsdl', array('encoding' => 'UTF-8'));
	else
		$client = new SoapClient('https://de.zarinpal.com/pg/services/WebGate/wsdl', array('encoding' => 'UTF-8'));
	$result = $client->PaymentRequest(
					array(
							'MerchantID' 	=> $MerchantID,
							'Amount' 	=> $Amount,
							'Description' 	=> $Description,
							'Email' 	=> $Email,
							'Mobile' 	=> $Mobile,
							'CallbackURL' 	=> $CallbackURL
						)
	);
	
	//Redirect to URL You can do it also by creating a form
	if($result->Status == 100)
	{
		Header('Location: https://www.zarinpal.com/pg/StartPay/'.$result->Authority);
	} 
	else 
	{
		$message = "در حین پرداخت خطایی رخ داده است";
		switch($result->Status){
            
			case "-1" :
				$message = "اطلاعات ارسال شده ناقص است";
            break;

            case "-2" :
				$message = "آی پی یا مرچنت زرین پال اشتباه است";
            break;

            case "-3" :
				$message = "با توجه به محدودیت های شاپرک امکان پرداخت با رقم درخواست شده میسر نمیباشد";
            break;
            
            case "-4" :
				$message = "سطح تایید پذیرنده پایین تر از سطح نقره ای میباشد";
            break;
            
            case "-11" :
				$message = "درخواست مورد نظر یافت نشد";
            break;
            
            case "-21" :
				$message = "هیچ نوع عملیات مالی برای این تراکنش یافت نشد";
            break;
            
            case "-22" :
				$message = "تراکنش نا موفق میباشد";
            break;
            
            case "-33" :
				$message = "رقم تراکنش با رقم وارد شده مطابقت ندارد";
            break;
            
            case "-40" :
				$message = "اجازه دسترسی به متد مورد نظر وجود ندارد";
            break;
            
            case "-54" :
				$message = "درخواست مورد نظر آرشیو شده است";
            break;
            
            case "100" :
				$message = "اتصال با زرین پال به خوبی برقرار شد و همه چیز صحیح است";
            break;
				
            case "101" :
				$message = "تراکنش با موفقیت به پایان رسیده بود و تاییدیه آن نیز انجام شده بود";
            break;			
		}
			
		die('در حین پرداخت خطای رو به رو رخ داده است : '.$message);
	}
	//end of zarinpal
}