Make Order createTime optional

When the intent is set to authorize and the status is completed in many cases the created time is not returned back
This commit is contained in:
Mészáros Róbert 2020-04-15 11:39:42 +03:00
parent d6d7db48c2
commit 751260c00a
2 changed files with 11 additions and 11 deletions

View file

@ -21,16 +21,15 @@ class Order
*/
public function __construct(
string $id,
\DateTime $createTime,
array $purchaseUnits,
OrderStatus $orderStatus,
Payer $payer = null,
string $intent = 'CAPTURE',
\DateTime $createTime = null,
\DateTime $updateTime = null
) {
$this->id = $id;
$this->createTime = $createTime;
//phpcs:disable Inpsyde.CodeQuality.ArgumentTypeDeclaration.NoArgumentType
$this->purchaseUnits = array_values(array_filter(
$purchaseUnits,
@ -43,6 +42,7 @@ class Order
$this->orderStatus = $orderStatus;
$this->intent = ($intent === 'CAPTURE') ? 'CAPTURE' : 'AUTHORIZE';
$this->purchaseUnits = $purchaseUnits;
$this->createTime = $createTime;
$this->updateTime = $updateTime;
}
@ -51,7 +51,7 @@ class Order
return $this->id;
}
public function createTime() : \DateTime
public function createTime() : ?\DateTime
{
return $this->createTime;
}
@ -96,8 +96,10 @@ class Order
},
$this->purchaseUnits()
),
'create_time' => $this->createTime()->format(\DateTimeInterface::ISO8601),
];
if ($this->createTime()) {
$order['create_time'] = $this->createTime()->format(\DateTimeInterface::ISO8601);
}
if ($this->payer()) {
$order['payer'] =$this->payer()->toArray();
}

View file

@ -28,11 +28,11 @@ class OrderFactory
return new Order(
$order->id(),
$order->createTime(),
$purchaseUnits,
$order->status(),
$order->payer(),
$order->intent(),
$order->createTime(),
$order->updateTime()
);
}
@ -44,11 +44,6 @@ class OrderFactory
__('Order does not contain an id.', 'woocommerce-paypal-commerce-gateway')
);
}
if (! isset($orderData->create_time)) {
throw new RuntimeException(
__('Order does not contain a create time.', 'woocommerce-paypal-commerce-gateway')
);
}
if (! isset($orderData->purchase_units) || !is_array($orderData->purchase_units)) {
throw new RuntimeException(
__('Order does not contain items.', 'woocommerce-paypal-commerce-gateway')
@ -72,6 +67,9 @@ class OrderFactory
$orderData->purchase_units
);
$createTime = (isset($orderData->create_time)) ?
\DateTime::createFromFormat(\DateTime::ISO8601, $orderData->create_time)
: null;
$updateTime = (isset($orderData->update_time)) ?
\DateTime::createFromFormat(\DateTime::ISO8601, $orderData->update_time)
: null;
@ -81,11 +79,11 @@ class OrderFactory
return new Order(
$orderData->id,
\DateTime::createFromFormat(\DateTime::ISO8601, $orderData->create_time),
$purchaseUnits,
new OrderStatus($orderData->status),
$payer,
$orderData->intent,
$createTime,
$updateTime
);
}