mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-03 22:57:32 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
 | 
						|
/**
 | 
						|
* PHP-Payments
 | 
						|
*
 | 
						|
* @package Payments
 | 
						|
* @author Calvin Froedge (www.calvinfroedge.com)
 | 
						|
* @created 07/02/2011
 | 
						|
* @refactored 02/11/2012
 | 
						|
* @license http://www.opensource.org/licenses/mit-license.php
 | 
						|
*/
 | 
						|
 | 
						|
class PHP_Payments
 | 
						|
{
 | 
						|
	/**
 | 
						|
	 * Config Property
 | 
						|
	*/
 | 
						|
	public $config;
 | 
						|
 | 
						|
	/**
 | 
						|
	 * The constructor function.
 | 
						|
	 */	
 | 
						|
	public function __construct($config = array())
 | 
						|
	{
 | 
						|
		$this->config = $config;
 | 
						|
		$this->_bootstrap();
 | 
						|
		Payment_Utility::connection_is_secure($this->config);
 | 
						|
	}
 | 
						|
	
 | 
						|
	/** 
 | 
						|
	 * Sets up Autoload, Sets Some Properties We Need
 | 
						|
	 *
 | 
						|
	 * @return	void
 | 
						|
	*/
 | 
						|
	private function _bootstrap()
 | 
						|
	{	
 | 
						|
		include_once('payment_utility.php');
 | 
						|
		spl_autoload_register(array(new Payment_Utility, 'class_autoload'));
 | 
						|
		$this->config = array_merge($this->config, Payment_Utility::load('config', 'payments')); //Note that here, config file configuration rules are merged with what was passed in the constructor.  If there is a conflict, what was passed in the constructor is used.
 | 
						|
	}
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Make a call to a gateway. Uses other helper methods to make the request.
 | 
						|
	 *
 | 
						|
	 * @param	string	The payment method to use
 | 
						|
	 * @param	array	$params[0] is the gateway, $params[1] are the params for the request.  $params[2] is a config array for the driver.
 | 
						|
	 * @return	object	Should return a success or failure, along with a response.
 | 
						|
	 */		
 | 
						|
	public function __call($method, $params)
 | 
						|
	{
 | 
						|
		$gateway = $params[0].'_Driver';
 | 
						|
		$args = $params[1];
 | 
						|
		$config = (isset($params[2])) ? $params[2] : @Payment_Utility::load('config', 'drivers/'.$params[0]); //Load the driver config if not passed in constructor
 | 
						|
		$config['mode'] = (isset($this->config['mode']) && $this->config['mode'] === 'test') ? 'test' : 'production';
 | 
						|
 | 
						|
		try {
 | 
						|
			$driver = new $gateway($config);
 | 
						|
		} 
 | 
						|
		catch (Exception $e) {
 | 
						|
			return Payment_Response::instance()->local_response('failure', 'not_a_module', $e->getMessage());
 | 
						|
		}
 | 
						|
		
 | 
						|
		$method_map = $driver->method_map();
 | 
						|
 | 
						|
		if(!isset($method_map[$method])) return Payment_Response::instance()->local_response('failure', 'not_a_method');
 | 
						|
 | 
						|
		//Make sure params are in expected format, make sure required have been provided
 | 
						|
		$validation_check = Payment_Validator::validate($method, $args, $method_map[$method]['required']);
 | 
						|
 | 
						|
		return ($validation_check === true) ? $driver->$method($args) : $validation_check;
 | 
						|
	}
 | 
						|
} |