1: <?php
2:
3: namespace Mypos\IPC;
4:
5: /**
6: * Process IPC method: IPCPreAuthorizationCancellation.
7: * Collect, validate and send API params
8: */
9: class PreAuthorizationCancellation extends Base
10: {
11: private $currency = 'EUR', $orderID, $amount;
12:
13: /**
14: * Return purchase object
15: *
16: * @param Config $cnf
17: */
18: public function __construct(Config $cnf)
19: {
20: $this->setCnf($cnf);
21: }
22:
23: /**
24: * Purchase identifier - must be unique
25: *
26: * @param string $orderID
27: *
28: * @return PreAuthorizationCancellation
29: */
30: public function setOrderID($orderID)
31: {
32: $this->orderID = $orderID;
33:
34: return $this;
35: }
36:
37: /**
38: * ISO-4217 Three letter currency code
39: *
40: * @param string $currency
41: *
42: * @return PreAuthorizationCancellation
43: */
44: public function setCurrency($currency)
45: {
46: $this->currency = $currency;
47:
48: return $this;
49: }
50:
51: /**
52: * The amount for completion
53: *
54: * @param mixed $amount
55: *
56: * @return PreAuthorizationCancellation
57: */
58: public function setAmount($amount)
59: {
60: $this->amount = $amount;
61:
62: return $this;
63: }
64:
65: /**
66: * Initiate API request
67: *
68: * @return Response
69: * @throws IPC_Exception
70: */
71: public function process()
72: {
73: $this->validate();
74:
75: $this->_addPostParam('IPCmethod', 'IPCPreAuthCancellation');
76: $this->_addPostParam('IPCVersion', $this->getCnf()->getVersion());
77: $this->_addPostParam('IPCLanguage', $this->getCnf()->getLang());
78: $this->_addPostParam('SID', $this->getCnf()->getSid());
79: $this->_addPostParam('WalletNumber', $this->getCnf()->getWallet());
80: $this->_addPostParam('KeyIndex', $this->getCnf()->getKeyIndex());
81: $this->_addPostParam('Source', $this->getCnf()->getSource());
82:
83: $this->_addPostParam('OrderID', $this->getOrderID());
84:
85: $this->_addPostParam('Amount', $this->getAmount());
86: $this->_addPostParam('Currency', $this->getCurrency());
87:
88: $this->_addPostParam('OutputFormat', $this->getOutputFormat());
89:
90: $this->_addPostParam('ApplicationID', $this->getCnf()->getApplicationID());
91: $this->_addPostParam('PartnerID', $this->getCnf()->getPartnerID());
92:
93: return $this->_processPost();
94: }
95:
96: /**
97: * Validate all set purchase details
98: *
99: * @return boolean
100: * @throws IPC_Exception
101: */
102: public function validate()
103: {
104: try {
105: $this->getCnf()->validate();
106: } catch (\Exception $ex) {
107: throw new IPC_Exception('Invalid Config details: ' . $ex->getMessage());
108: }
109:
110: if (!Helper::versionCheck($this->getCnf()->getVersion(), '1.4')) {
111: throw new IPC_Exception('IPCVersion ' . $this->getCnf()->getVersion() . ' does not support IPCPreAuthorizationCancellation method. Please use 1.4 or above.');
112: }
113:
114: if ($this->getCurrency() === null) {
115: throw new IPC_Exception('Invalid currency');
116: }
117:
118: if ($this->getAmount() === null || !Helper::isValidAmount($this->getAmount())) {
119: throw new IPC_Exception('Empty or invalid amount');
120: }
121:
122: if ($this->getCnf()->getVersion() === '1.4.1') {
123: if ($this->getCnf()->getPartnerID() == null) {
124: throw new IPC_Exception('Required parameter: Partner ID');
125: }
126:
127: if ($this->getCnf()->getApplicationID() == null) {
128: throw new IPC_Exception('Required parameter: Application ID');
129: }
130: }
131:
132: return true;
133: }
134:
135: /**
136: * ISO-4217 Three letter currency code
137: *
138: * @return string
139: */
140: public function getCurrency()
141: {
142: return $this->currency;
143: }
144:
145: /**
146: * Purchase identifier
147: *
148: * @return string
149: */
150: public function getOrderID()
151: {
152: return $this->orderID;
153: }
154:
155: /**
156: * The amount for completion
157: *
158: * @return mixed
159: */
160: public function getAmount()
161: {
162: return $this->amount;
163: }
164:
165: }
166: