mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-03 20:27:33 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
class Payment_Validator
 | 
						|
{
 | 
						|
	public function __construct($payments)
 | 
						|
	{
 | 
						|
		$this->utility = $payments['utility'];
 | 
						|
		$this->payments_config = $payments['payments_config'];
 | 
						|
		$this->lang = $payments['lang'];
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Make sure params are as expected
 | 
						|
	 *
 | 
						|
	 * @param	array	array of params to check to ensure proper formatting
 | 
						|
	 * @param	array	array of required params
 | 
						|
	 * @return	mixed	Will return TRUE if all pass.  Will return an object if a param is bad.
 | 
						|
	 */			
 | 
						|
	public static function validate($method, $params, $required_params)
 | 
						|
	{
 | 
						|
		//Append _method to method name
 | 
						|
		$method = $method."_method";
 | 
						|
 | 
						|
		//We'll need this later
 | 
						|
		$lang = Payment_Utility::load('lang', 'english/response_details');
 | 
						|
 | 
						|
		//Ensure no invalid methods were passed
 | 
						|
		include_once('payment_methods/'.$method.'.php');
 | 
						|
		$m = new $method;
 | 
						|
 | 
						|
		$method_params = $m->get_params();
 | 
						|
 | 
						|
		$bad_params = array();
 | 
						|
		foreach($params as $k=>$v)
 | 
						|
		{
 | 
						|
			if(!isset($method_params[$k]))
 | 
						|
			{
 | 
						|
				$bad_params[] = "$k " . $lang['is_not_a_param'];
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if(count($bad_params) > 0)
 | 
						|
		{
 | 
						|
			return Payment_Response::instance()->local_response(
 | 
						|
				'failure',
 | 
						|
				'invalid_input',
 | 
						|
				implode(', ', $bad_params)
 | 
						|
			);
 | 
						|
		}
 | 
						|
 | 
						|
		//Ensure no required params are missing
 | 
						|
		$missing = array();
 | 
						|
		foreach($required_params as $k=>$v)
 | 
						|
		{	
 | 
						|
			if(!array_key_exists($v, $params) OR empty($params[$v]) OR is_null($params[$v]) OR $params[$v] == ' ')
 | 
						|
			{
 | 
						|
				$key = 'missing_'.$v;
 | 
						|
				if(isset($lang[$key]))
 | 
						|
				{
 | 
						|
					$missing[] = $lang[$key];
 | 
						|
				}
 | 
						|
				else
 | 
						|
				{
 | 
						|
					error_log("$key does not exist in response message language file.");
 | 
						|
					$missing[] = "$v is required but was not provided";
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if(count($missing) > 0)
 | 
						|
		{
 | 
						|
			return Payment_Response::instance()->local_response(
 | 
						|
				'failure', 
 | 
						|
				'required_params_missing', 
 | 
						|
				implode(', ', $missing)
 | 
						|
			);					
 | 
						|
		}
 | 
						|
		
 | 
						|
		//Ensure dates match MMYYYY format
 | 
						|
		if(array_key_exists('cc_exp', $params))
 | 
						|
		{
 | 
						|
			$exp_date = $params['cc_exp'];
 | 
						|
			$m1 = $exp_date[0];
 | 
						|
			
 | 
						|
			if(strlen($exp_date) != 6 OR !is_numeric($exp_date) OR $m1 > 1)
 | 
						|
			{
 | 
						|
				return Payment_Response::instance()->local_response(
 | 
						|
					'failure', 
 | 
						|
					'invalid_input',
 | 
						|
					'invalid_date_format'
 | 
						|
				);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		//Ensure billing period is submitted in normalized form
 | 
						|
		if(array_key_exists('billing_period', $params))
 | 
						|
		{
 | 
						|
			$accepted_billing_period = array(
 | 
						|
				'Month',
 | 
						|
				'Day',
 | 
						|
				'Week',
 | 
						|
				'Year'
 | 
						|
			);
 | 
						|
			
 | 
						|
			if(!in_array($params['billing_period'], $accepted_billing_period))
 | 
						|
			{
 | 
						|
				return Payment_Response::instance()->local_response(
 | 
						|
					'failure', 
 | 
						|
					'invalid_input',
 | 
						|
					'invalid_billing_period'
 | 
						|
				);			
 | 
						|
			}
 | 
						|
		}
 | 
						|
		
 | 
						|
		return TRUE;
 | 
						|
	}
 | 
						|
}
 |