mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-06-13 21:44:35 -04:00
148 lines
3.0 KiB
PHP
Executable File
148 lines
3.0 KiB
PHP
Executable File
<?php
|
|
|
|
class Amazon_SimplePay_Driver extends Payment_Driver
|
|
{
|
|
/**
|
|
* The PHP-Payments Library Method Being Utilized
|
|
*/
|
|
private $_lib_method;
|
|
|
|
/**
|
|
* The Config Array
|
|
*/
|
|
private $_config;
|
|
|
|
/**
|
|
* If the Request Returns a Button
|
|
*/
|
|
private $_is_button;
|
|
|
|
/**
|
|
* The Mode. Either "sandbox" or "prod"
|
|
*/
|
|
private $_mode;
|
|
|
|
/**
|
|
* Class Constructor
|
|
*/
|
|
public function __construct($config)
|
|
{
|
|
$this->_mode = ($config['mode'] == 'test') ? 'sandbox' : 'prod';
|
|
$this->_config = $config;
|
|
}
|
|
|
|
/**
|
|
* The Caller Magic Method
|
|
*/
|
|
public function __call($method, $params)
|
|
{
|
|
$this->_lib_method = $method;
|
|
|
|
$args = $params[0];
|
|
|
|
try{
|
|
$request = $this->_build_request($args);
|
|
}
|
|
catch(Exception $e){
|
|
return Payment_Response::instance()->local_response(
|
|
'failure',
|
|
$e->getMessage()
|
|
);
|
|
}
|
|
|
|
return $this->_parse_response($request);
|
|
}
|
|
|
|
/**
|
|
* Maps PHP-Payments Keys to Gateway
|
|
*/
|
|
public function method_map()
|
|
{
|
|
$map = array(
|
|
'oneoff_payment_button' => array(
|
|
'api' => 'ButtonGenerator',
|
|
'method' => 'GenerateForm',
|
|
'required' => array(
|
|
'amt',
|
|
'desc',
|
|
'currency_code'
|
|
),
|
|
'keymatch' => array(
|
|
'amount' => 'amount',
|
|
'desc' => 'description',
|
|
'identifier' => 'referenceId'
|
|
),
|
|
'static' => array(
|
|
'signature_method' => 'HmacSHA256',
|
|
'abandon_url' => $this->_config['abandon_url'],
|
|
'return_url' => $this->_config['return_url'],
|
|
'immediate_return' => $this->_config['immediate_return'],
|
|
'process_immediate' => $this->_config['process_immediate'],
|
|
'ipn_url' => $this->_config['ipn_url'],
|
|
'collect_shipping_address' => $this->_config['collect_shipping_address']
|
|
)
|
|
)
|
|
);
|
|
|
|
return $map;
|
|
}
|
|
|
|
/**
|
|
* Build the Request
|
|
*
|
|
* @param array Params array
|
|
* @return mixed array for requests, strings for buttons
|
|
*/
|
|
protected function _build_request($params)
|
|
{
|
|
$map = $this->method_map();
|
|
$l = $this->_lib_method;
|
|
|
|
$api = $map[$l]['api'];
|
|
$method = $map[$l]['method'];
|
|
$static = $map[$l]['static'];
|
|
|
|
if($api == 'ButtonGenerator')
|
|
{
|
|
Payment_Utility::load('file', 'vendor/amazon_simplepay/ButtonGenerationWithSignature/src/ButtonGenerator');
|
|
$this->_is_button = true;
|
|
|
|
ob_start();
|
|
$api::$method(
|
|
$this->_config['access_key'],
|
|
$this->_config['secret_key'],
|
|
$params['currency_code'] . ' ' . $params['amt'],
|
|
$params['desc'],
|
|
(isset($params['identifier'])) ? $params['identifier'] : '',
|
|
$static['immediate_return'],
|
|
$static['return_url'],
|
|
$static['abandon_url'],
|
|
$static['process_immediate'],
|
|
$static['ipn_url'],
|
|
$static['collect_shipping_address'],
|
|
$static['signature_method'],
|
|
$this->_mode
|
|
);
|
|
$string = ob_get_clean();
|
|
return $string;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Parse the Response
|
|
*
|
|
* @param array Raw response
|
|
* @return object Payment_Response
|
|
*/
|
|
protected function _parse_response($response)
|
|
{
|
|
if($this->_is_button)
|
|
{
|
|
return Payment_Response::instance()->local_response(
|
|
'success',
|
|
$this->_lib_method.'_success',
|
|
$response
|
|
);
|
|
}
|
|
}
|
|
} |