Failed Conditions
Push — develop ( eeb50e...eb62e3 )
by Remco
03:13
created

src/NotificationRequestItem.php (3 issues)

1
<?php
2
/**
3
 * Notification request item
4
 *
5
 * @author    Pronamic <[email protected]>
6
 * @copyright 2005-2019 Pronamic
7
 * @license   GPL-3.0-or-later
8
 * @package   Pronamic\WordPress\Pay\Gateways\Adyen
9
 */
10
11
namespace Pronamic\WordPress\Pay\Gateways\Adyen;
12
13
use DateTime;
14
use InvalidArgumentException;
15
16
/**
17
 * Notification request item
18
 *
19
 * @link    https://docs.adyen.com/developers/api-reference/notifications-api#notificationrequestitem
20
 * @author  Remco Tolsma
21
 * @version 1.0.0
22
 * @since   1.0.0
23
 */
24
class NotificationRequestItem {
25
	/**
26
	 * Amount.
27
	 *
28
	 * @var Amount
29
	 */
30
	private $amount;
31
32
	/**
33
	 * Adyen's 16-character unique reference associated with the transaction/the request. This value is globally unique; quote it when communicating with us about this request.
34
	 *
35
	 * @var string
36
	 */
37
	private $psp_reference;
38
39
	/**
40
	 * The type of event the notification item refers to.
41
	 *
42
	 * @var string
43
	 */
44
	private $event_code;
45
46
	/**
47
	 * The time when the event was generated.
48
	 *
49
	 * @var DateTime
50
	 */
51
	private $event_date;
52
53
	/**
54
	 * The merchant account identifier used in the transaction the notification item refers to.
55
	 *
56
	 * @var string
57
	 */
58
	private $merchant_account_code;
59
60
	/**
61
	 * This field holds a list of the modification operations supported by the transaction the notification item refers to.
62
	 *
63
	 * @var array
64
	 */
65
	private $operations;
66
67
	/**
68
	 * A reference to uniquely identify the payment. 
69
	 *
70
	 * @var string
71
	 */
72
	private $merchant_reference;
73
74
	/**
75
	 * The payment method used in the transaction the notification item refers to.
76
	 *
77
	 * @var string
78
	 */
79
	private $payment_method;
80
81
	/**
82
	 * Informs about the outcome of the event (`eventCode`) the notification refers to:
83
	 *
84
	 * - `true`: the event (`eventCode`) the notification refers to was executed successfully.
85
	 * - `false`: the event was not executed successfully.
86
	 *
87
	 * @var boolean
88
	 */
89
	private $success;
90
91
	/**
92
	 * Get amount.
93
	 *
94
	 * @return Amount
95
	 */
96
	public function get_amount() {
97
		return $this->amount;
98
	}
99
100
	/**
101
	 * Set amount.
102
	 *
103
	 * @param Amount $amount Amount.
104
	 */
105 1
	public function set_amount( Amount $amount ) {
106 1
		$this->amount = $amount;
107 1
	}
108
109
	/**
110
	 * Get PSP reference.
111
	 *
112
	 * @return string
113
	 */
114 1
	public function get_psp_reference() {
115 1
		return $this->psp_reference;
116
	}
117
118
	/**
119
	 * Set PSP reference.
120
	 *
121
	 * @param string $psp_reference PSP reference.
122
	 */
123 1
	public function set_psp_reference( $psp_reference ) {
124 1
		$this->psp_reference = $psp_reference;
125 1
	}
126
127
	/**
128
	 * Get event code.
129
	 *
130
	 * @return Amount
131
	 */
132 1
	public function get_event_code() {
133 1
		return $this->event_code;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->event_code returns the type string which is incompatible with the documented return type Pronamic\WordPress\Pay\Gateways\Adyen\Amount.
Loading history...
134
	}
135
136
	/**
137
	 * Set event code.
138
	 *
139
	 * @param string $event_code Event code.
140
	 */
141 1
	public function set_event_code( $event_code ) {
142 1
		$this->event_code = $event_code;
143 1
	}
144
145
	/**
146
	 * Get event date.
147
	 *
148
	 * @return DateTime
149
	 */
150 1
	public function get_event_date() {
151 1
		return $this->event_date;
152
	}
153
154
	/**
155
	 * Set event date.
156
	 *
157
	 * @param DateTime $event_date Event date.
158
	 */
159 1
	public function set_event_date( DateTime $event_date ) {
160 1
		$this->event_date = $event_date;
161 1
	}
162
163
	/**
164
	 * Get merchant account code.
165
	 *
166
	 * @return DateTime
167
	 */
168 1
	public function get_merchant_account_code() {
169 1
		return $this->merchant_account_code;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->merchant_account_code returns the type string which is incompatible with the documented return type DateTime.
Loading history...
170
	}
171
172
	/**
173
	 * Set merchant account code.
174
	 *
175
	 * @param string $merchant_account_code Merchant account code.
176
	 */
177 1
	public function set_merchant_account_code( $merchant_account_code ) {
178 1
		$this->merchant_account_code = $merchant_account_code;
179 1
	}
180
181
	/**
182
	 * Get operations.
183
	 *
184
	 * @return array
185
	 */
186 1
	public function get_operations() {
187 1
		return $this->operations;
188
	}
189
190
	/**
191
	 * Set operations.
192
	 *
193
	 * @param array $operations Operations.
194
	 */
195 1
	public function set_operations( $operations ) {
196 1
		$this->operations = $operations;
197 1
	}
198
199
	/**
200
	 * Get operations.
201
	 *
202
	 * @return array
203
	 */
204 1
	public function get_merchant_reference() {
205 1
		return $this->merchant_reference;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->merchant_reference returns the type string which is incompatible with the documented return type array.
Loading history...
206
	}
207
208
	/**
209
	 * Set merchant reference.
210
	 *
211
	 * @param string $merchant_reference Merchant reference.
212
	 */
213 1
	public function set_merchant_reference( $merchant_reference ) {
214 1
		$this->merchant_reference = $merchant_reference;
215 1
	}
216
217
	/**
218
	 * Get payment method.
219
	 *
220
	 * @return string
221
	 */
222 1
	public function get_payment_method() {
223 1
		return $this->payment_method;
224
	}
225
226
	/**
227
	 * Set payment method.
228
	 *
229
	 * @param string $payment_method Payment method.
230
	 */
231 1
	public function set_payment_method( $payment_method ) {
232 1
		$this->payment_method = $payment_method;
233 1
	}
234
235
	/**
236
	 * Is success.
237
	 *
238
	 * @return boolean
239
	 */
240 1
	public function is_success() {
241 1
		return $this->success;
242
	}
243
244
	/**
245
	 * Set success.
246
	 *
247
	 * @param boolean $success Success.
248
	 */
249 1
	public function set_success( $success ) {
250 1
		$this->success = $success;
251 1
	}
252
253
	/**
254
	 * Create notification request item from object.
255
	 *
256
	 * @param object $object Object.
257
	 * @return NotificationRequestItem
258
	 * @throws InvalidArgumentException Throws invalid argument exception when object does not contains the required properties.
259
	 */
260 1
	public static function from_object( $object ) {
261 1
		if ( ! isset( $object->amount ) ) {
262
			throw new InvalidArgumentException( 'Object must contain `amount` property.' );
263
		}
264
265 1
		if ( ! isset( $object->pspReference ) ) {
266
			throw new InvalidArgumentException( 'Object must contain `pspReference` property.' );
267
		}
268
269 1
		if ( ! isset( $object->eventCode ) ) {
270
			throw new InvalidArgumentException( 'Object must contain `eventCode` property.' );
271
		}
272
273 1
		if ( ! isset( $object->eventDate ) ) {
274
			throw new InvalidArgumentException( 'Object must contain `eventDate` property.' );
275
		}
276
277 1
		if ( ! isset( $object->merchantAccountCode ) ) {
278
			throw new InvalidArgumentException( 'Object must contain `merchantAccountCode` property.' );
279
		}
280
281 1
		if ( ! isset( $object->operations ) ) {
282
			throw new InvalidArgumentException( 'Object must contain `operations` property.' );
283
		}
284
285 1
		if ( ! isset( $object->merchantReference ) ) {
286
			throw new InvalidArgumentException( 'Object must contain `merchantReference` property.' );
287
		}
288
289 1
		if ( ! isset( $object->paymentMethod ) ) {
290
			throw new InvalidArgumentException( 'Object must contain `paymentMethod` property.' );
291
		}
292
293 1
		if ( ! isset( $object->success ) ) {
294
			throw new InvalidArgumentException( 'Object must contain `success` property.' );
295
		}
296
297 1
		if ( ! is_array( $object->operations ) ) {
298
			throw new InvalidArgumentException( 'Object property `operations` must be an array.' );			
299
		}
300
301 1
		$item = new self();
302
303 1
		$item->set_amount( Amount::from_object( $object->amount ) );
304 1
		$item->set_psp_reference( $object->pspReference );
305 1
		$item->set_event_code( $object->eventCode );
306 1
		$item->set_event_date( new DateTime( $object->eventDate ) );
307 1
		$item->set_merchant_account_code( $object->merchantAccountCode );
308 1
		$item->set_operations( $object->operations );
309 1
		$item->set_merchant_reference( $object->merchantReference );
310 1
		$item->set_payment_method( $object->paymentMethod );
311 1
		$item->set_success( filter_var( $object->success, FILTER_VALIDATE_BOOLEAN ) );
312
313 1
		return $item;
314
	}
315
}
316