Test Failed
Push — feature/post-pay ( e3663d...906e88 )
by Remco
04:22
created

Order::set_timestamp()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 2
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Order
4
 *
5
 * @author    Pronamic <[email protected]>
6
 * @copyright 2005-2018 Pronamic
7
 * @license   GPL-3.0-or-later
8
 * @package   Pronamic\WordPress\Pay\Gateways\OmniKassa2
9
 */
10
11
namespace Pronamic\WordPress\Pay\Gateways\OmniKassa2;
12
13
use DateTime;
14
use Pronamic\WordPress\Pay\Payments\PaymentLines;
15
16
/**
17
 * Order
18
 *
19
 * @author  Remco Tolsma
20
 * @version 2.0.2
21
 * @since   1.0.0
22
 */
23
class Order extends Message {
24
	/**
25
	 * ISO 8601 standard Date / time on which the order is announced at ROK.
26
	 * As a rule, this is the current date / time.
27
	 *
28
	 * This field is mandatory and provides protection against so-called
29
	 * replay (playback) attacks
30
	 *
31
	 * @var DateTime
32
	 */
33
	private $timestamp;
34
35
	/**
36
	 * Generated by Merchant. If your webshop wants to use AfterPay, this field must be unique.
37
	 *
38
	 * @var string
39
	 */
40
	private $merchant_order_id;
41
42
	/**
43
	 * Description of the order.
44
	 *
45
	 * @var string
46
	 */
47
	private $description;
48
49
	/**
50
	 * The order items.
51
	 *
52
	 * @var OrderItems
0 ignored issues
show
Bug introduced by
The type Pronamic\WordPress\Pay\G...s\OmniKassa2\OrderItems was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
53
	 */
54
	private $order_items;
55
56
	/**
57
	 * Amount.
58
	 *
59
	 * @var Money
60
	 */
61
	private $amount;
62
63
	/**
64
	 * The shipping address.
65
	 *
66
	 * @var Address
67
	 */
68
	private $shipping_detail;
69
70
	/**
71
	 * The billing address.
72
	 *
73
	 * @var Address
74
	 */
75
	private $billing_detail;
76
77
	/**
78
	 * The customer information.
79
	 *
80
	 * @var CustomerInformation
81
	 */
82
	private $customer_information;
83
84
	/**
85
	 * Language.
86
	 *
87
	 * ISO 639-1 standard. Not Case sensitive.
88
	 *
89
	 * @var string
90
	 */
91
	private $language;
92
93
	/**
94
	 * Merchant return URL.
95
	 *
96
	 * The URL to which the consumer's browser will be sent after the payment.
97
	 *
98
	 * @var string
99
	 */
100
	private $merchant_return_url;
101
102
	/**
103
	 * Payment brand.
104
	 *
105
	 * This field is optional and is used to enforce a specific
106
	 * payment method with the consumer instead of the consumer
107
	 * selecting a payment method on the payment method selection
108
	 * page.
109
	 *
110
	 * Valid values are:
111
	 * • IDEAL
112
	 * • AFTERPAY
113
	 * • PAYPAL
114
	 * • MASTERCARD
115
	 * • VISA
116
	 * • BANCONTACT
117
	 * • MAESTRO
118
	 * • V_PAY
119
	 * • CARDS
120
	 *
121
	 * The CARDS value ensures that the consumer can choose
122
	 * between payment methods: MASTERCARD, VISA, BANCONTACT,
123
	 * MAESTRO and V_PAY
124
	 *
125
	 * @var string|null
126
	 */
127
	private $payment_brand;
128
129
	/**
130
	 * Payment brand force.
131
	 *
132
	 * This field should only be delivered if the paymentBrand field (see
133
	 * above) is also specified. This field can be used to send or, after
134
	 * a failed payment, the consumer can or can not select another payment
135
	 * method to still pay the payment.
136
	 *
137
	 * Valid values are:
138
	 * • FORCE_ONCE
139
	 * • FORCE_ALWAYS
140
	 *
141
	 * In the case of FORCE_ONCE, the indicated paymentBrand is only
142
	 * enforced on the first transaction. If this fails, the consumer
143
	 * can still choose another payment method. When FORCE_ALWAYS is
144
	 * chosen, the consumer can not choose another payment method.
145
	 *
146
	 * @var string|null
147
	 */
148
	private $payment_brand_force;
149
150
	/**
151
	 * Construct order.
152
	 *
153
	 * @param string $merchant_order_id    Merchant order ID.
154
	 * @param Money  $amount               Amount.
155
	 * @param string $merchant_return_url  Merchant return URL.
156
	 */
157
	public function __construct( $merchant_order_id, $amount, $merchant_return_url ) {
158
		$this->timestamp           = new DateTime();
159
		$this->merchant_order_id   = $merchant_order_id;
160
		$this->amount              = $amount;
161
		$this->merchant_return_url = $merchant_return_url;
162
	}
163
164
	/**
165
	 * Set timestamp.
166
	 *
167
	 * @param DateTime $timestamp Timestamp.
168
	 */
169
	public function set_timestamp( DateTime $timestamp ) {
170
		$this->timestamp = $timestamp;
171
	}
172
173
	/**
174
	 * Set description.
175
	 *
176
	 * @param string $description Description.
177
	 */
178
	public function set_description( $description ) {
179
		$this->description = $description;
180
	}
181
182
	/**
183
	 * Set language.
184
	 *
185
	 * @param string $language Language.
186
	 */
187
	public function set_language( $language ) {
188
		$this->language = $language;
189
	}
190
191
	/**
192
	 * Set payment brand.
193
	 *
194
	 * @param string|null $payment_brand Payment brand.
195
	 */
196
	public function set_payment_brand( $payment_brand ) {
197
		$this->payment_brand = $payment_brand;
198
	}
199
200
	/**
201
	 * Set payment brand force.
202
	 *
203
	 * @param string $payment_brand_force Payment brand force.
204
	 */
205
	public function set_payment_brand_force( $payment_brand_force ) {
206
		$this->payment_brand_force = $payment_brand_force;
207
	}
208
209
	/**
210
	 * Create and set new order items.
211
	 *
212
	 * @return OrderItems
213
	 */
214
	public function new_items() {
215
		$this->order_items = new OrderItems();
216
217
		return $this->order_items;
218
	}
219
220
	/**
221
	 * Set order items.
222
	 *
223
	 * @param OrderItems|null $order_items Order items.
224
	 */
225
	public function set_order_items( OrderItems $order_items = null ) {
226
		$this->order_items = $order_items;
227
	}
228
229
	/**
230
	 * Set shipping detail.
231
	 *
232
	 * @param Address|null $shipping_detail Shipping address details.
233
	 */
234
	public function set_shipping_detail( Address $shipping_detail = null ) {
235
		$this->shipping_detail = $shipping_detail;
236
	}
237
238
	/**
239
	 * Set billing detail.
240
	 *
241
	 * @param Address|null $billing_detail Billing address details.
242
	 */
243
	public function set_billing_detail( Address $billing_detail = null ) {
244
		$this->billing_detail = $billing_detail;
245
	}
246
247
	/**
248
	 * Set customer information.
249
	 *
250
	 * @param CustomerInformation $customer_information Customer information.
251
	 */
252
	public function set_customer_information( CustomerInformation $customer_information ) {
253
		$this->customer_information = $customer_information;
254
	}
255
256
	/**
257
	 * Get JSON object.
258
	 *
259
	 * @return object
260
	 */
261
	public function get_json() {
262
		$object = (object) array();
263
264
		$object->timestamp       = $this->timestamp->format( DATE_ATOM );
265
		$object->merchantOrderId = $this->merchant_order_id;
266
267
		if ( null !== $this->description ) {
268
			$object->description = $this->description;
269
		}
270
271
		if ( null !== $this->order_items ) {
272
			$object->orderItems = $this->order_items->get_json();
273
		}
274
275
		$object->amount = $this->amount->get_json();
276
277
		if ( null !== $this->shipping_detail ) {
278
			$object->shippingDetail = $this->shipping_detail->get_json();
279
		}
280
281
		if ( null !== $this->billing_detail ) {
282
			$object->billingDetail = $this->billing_detail->get_json();
283
		}
284
285
		if ( null !== $this->customer_information ) {
286
			$object->customerInformation = $this->customer_information->get_json();
287
		}
288
289
		if ( null !== $this->language ) {
290
			$object->language = $this->language;
291
		}
292
293
		$object->merchantReturnURL = $this->merchant_return_url;
294
295
		if ( null !== $this->payment_brand ) {
296
			$object->paymentBrand = $this->payment_brand;
297
		}
298
299
		if ( null !== $this->payment_brand_force ) {
300
			$object->paymentBrandForce = $this->payment_brand_force;
301
		}
302
303
		return $object;
304
	}
305
306
	/**
307
	 * Get signature fields.
308
	 *
309
	 * @param array $fields Fields.
310
	 * @return array
311
	 */
312
	public function get_signature_fields( $fields = array() ) {
313
		$fields[] = $this->timestamp->format( DATE_ATOM );
314
		$fields[] = $this->merchant_order_id;
315
		$fields[] = $this->amount->get_currency();
316
		$fields[] = $this->amount->get_amount();
317
		$fields[] = $this->language;
318
		$fields[] = $this->description;
319
		$fields[] = $this->merchant_return_url;
320
321
		if ( null !== $this->order_items ) {
322
			$fields = $this->order_items->get_signature_fields( $fields );
323
		}
324
325
		if ( null !== $this->shipping_detail ) {
326
			$fields = $this->shipping_detail->get_signature_fields( $fields );
327
		}
328
329
		if ( null !== $this->payment_brand ) {
330
			$fields[] = $this->payment_brand;
331
		}
332
333
		if ( null !== $this->payment_brand_force ) {
334
			$fields[] = $this->payment_brand_force;
335
		}
336
337
		if ( null !== $this->customer_information ) {
338
			$fields = $this->customer_information->get_signature_fields( $fields );
339
		}
340
341
		if ( null !== $this->billing_detail ) {
342
			$fields = $this->billing_detail->get_signature_fields( $fields );
343
		}
344
345
		return $fields;
346
	}
347
}
348