/
AbstractResponse.php
107 lines (91 loc) · 3.17 KB
/
AbstractResponse.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
<?php
/*
* This file is part of the Marlon Ogone package.
*
* (c) Marlon BVBA <info@marlon.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Ogone;
use InvalidArgumentException;
abstract class AbstractResponse implements Response
{
/**
* Available Ogone parameters
* @var array
*/
protected $ogoneFields = array('AAVADDRESS', 'AAVCHECK', 'AAVZIP', 'ACCEPTANCE', 'ALIAS', 'AMOUNT', 'BIN', 'BRAND', 'CARDNO', 'CCCTY', 'CN',
'COMPLUS', 'CREATION_STATUS', 'CURRENCY', 'CVC', 'CVCCHECK', 'DCC_COMMPERCENTAGE', 'DCC_CONVAMOUNT', 'DCC_CONVCCY', 'DCC_EXCHRATE', 'DCC_EXCHRATESOURCE',
'DCC_EXCHRATETS', 'DCC_INDICATOR', 'DCC_MARGINPERCENTAGE', 'DCC_VALIDHOURS', 'DIGESTCARDNO', 'ECI', 'ED', 'ENCCARDNO', 'IP', 'IPCTY',
'NBREMAILUSAGE','NBRIPUSAGE', 'NBRIPUSAGE_ALLTX', 'NBRUSAGE', 'NCERROR', 'NCERRORCN', 'NCERRORCARDNO', 'NCERRORCVC', 'NCERRORED', 'NCSTATUS', 'ORDERID',
'PAYID', 'PAYIDSUB', 'PM', 'SCO_CATEGORY', 'SCORING', 'STATUS', 'SUBSCRIPTION_ID', 'TRXDATE','VC');
/**
* @var array
*/
protected $parameters;
/**
* @var string
*/
protected $shaSign;
/**
* @param array $httpRequest Typically $_REQUEST
* @throws \InvalidArgumentException
*/
public function __construct(array $httpRequest)
{
// use uppercase internally
$httpRequest = array_change_key_case($httpRequest, CASE_UPPER);
// set sha sign
$this->shaSign = $this->extractShaSign($httpRequest);
// filter request for Ogone parameters
$this->parameters = $this->filterRequestParameters($httpRequest);
}
/**
* Filter http request parameters
* @param array $requestParameters
* @return array
*/
protected function filterRequestParameters(array $requestParameters)
{
// filter request for Ogone parameters
return array_intersect_key($requestParameters, array_flip($this->ogoneFields));
}
/**
* Set Ogone SHA sign
* @param array $parameters
* @throws \InvalidArgumentException
*/
protected function extractShaSign(array $parameters)
{
if (!array_key_exists(self::SHASIGN_FIELD, $parameters) || $parameters[self::SHASIGN_FIELD] == '') {
throw new InvalidArgumentException('SHASIGN parameter not present in parameters.');
}
return $parameters[self::SHASIGN_FIELD];
}
/**
* Retrieves a response parameter
* @param string $key
* @throws \InvalidArgumentException
*/
public function getParam($key)
{
if (method_exists($this, 'get'.$key)) {
return $this->{'get'.$key}();
}
// always use uppercase
$key = strtoupper($key);
if (!array_key_exists($key, $this->parameters)) {
throw new InvalidArgumentException('Parameter ' . $key . ' does not exist.');
}
return $this->parameters[$key];
}
/**
* Get all parameters + SHASIGN
* @return array
*/
public function toArray()
{
return $this->parameters + array('SHASIGN' => $this->shaSign);
}
}