diff --git a/src/Api/Transactions/OrderRequest.php b/src/Api/Transactions/OrderRequest.php index aaffe53..f7a5a8b 100644 --- a/src/Api/Transactions/OrderRequest.php +++ b/src/Api/Transactions/OrderRequest.php @@ -15,6 +15,7 @@ use MultiSafepay\Api\Transactions\OrderRequest\Arguments\Description; use MultiSafepay\Api\Transactions\OrderRequest\Arguments\GatewayInfoInterface; use MultiSafepay\Api\Transactions\OrderRequest\Arguments\GoogleAnalytics; +use MultiSafepay\Api\Transactions\OrderRequest\Arguments\PaymentData; use MultiSafepay\Api\Transactions\OrderRequest\Arguments\PaymentOptions; use MultiSafepay\Api\Transactions\OrderRequest\Arguments\PluginDetails; use MultiSafepay\Api\Transactions\OrderRequest\Arguments\SecondChance; @@ -116,6 +117,11 @@ class OrderRequest extends RequestBody implements OrderRequestInterface */ protected $checkoutOptions; + /** + * @var PaymentData + */ + protected $paymentData; + /** * @var int */ @@ -494,6 +500,16 @@ public function addCheckoutOptions(CheckoutOptions $checkoutOptions): OrderReque return $this; } + /** + * @param PaymentData $paymentData + * @return OrderRequest + */ + public function addPaymentData(PaymentData $paymentData): OrderRequest + { + $this->paymentData = $paymentData; + return $this; + } + /** * @param int $seconds * @return OrderRequest @@ -620,6 +636,7 @@ public function getData(): array 'delivery' => $this->delivery ? $this->delivery->getData() : null, 'shopping_cart' => $this->shoppingCart ? $this->shoppingCart->getData() : null, 'checkout_options' => $this->checkoutOptions ? $this->checkoutOptions->getData() : null, + 'payment_data' => $this->paymentData ? $this->paymentData->getData() : null, 'days_active' => $this->daysActive, 'seconds_active' => $this->secondsActive, 'plugin' => $this->pluginDetails ? $this->pluginDetails->getData() : null, diff --git a/src/Api/Transactions/OrderRequest/Arguments/PaymentData.php b/src/Api/Transactions/OrderRequest/Arguments/PaymentData.php new file mode 100644 index 0000000..65f58ea --- /dev/null +++ b/src/Api/Transactions/OrderRequest/Arguments/PaymentData.php @@ -0,0 +1,73 @@ +payload = $payload; + return $this; + } + + /** + * @param string $gateway + * @return PaymentData + */ + public function addGateway(string $gateway): PaymentData + { + $this->gateway = $gateway; + return $this; + } + + /** + * @param bool $tokenize + * @return PaymentData + */ + public function addTokenize(bool $tokenize): PaymentData + { + $this->tokenize = $tokenize; + return $this; + } + + /** + * @return array + */ + public function getData(): array + { + return $this->removeNullRecursive([ + 'payload' => $this->payload, + 'gateway' => $this->gateway, + 'tokenize' => $this->tokenize, + ]); + } +} diff --git a/tests/Unit/Api/Transactions/OrderRequestTest.php b/tests/Unit/Api/Transactions/OrderRequestTest.php index f472176..315c055 100644 --- a/tests/Unit/Api/Transactions/OrderRequestTest.php +++ b/tests/Unit/Api/Transactions/OrderRequestTest.php @@ -2,6 +2,7 @@ namespace MultiSafepay\Tests\Unit\Api\Transactions; use MultiSafepay\Api\Transactions\OrderRequest; +use MultiSafepay\Api\Transactions\OrderRequest\Arguments\PaymentData; use MultiSafepay\Api\Transactions\OrderRequest\Arguments\ShoppingCart\Item as ShoppingCartItem; use MultiSafepay\Exception\InvalidArgumentException; use MultiSafepay\Exception\InvalidTotalAmountException; @@ -229,4 +230,31 @@ public function testOrderWithAffiliate() $this->assertArrayHasKey('affiliate', $data); $this->assertArrayHasKey('split_payments', $data['affiliate']); } + + /** + * Test if we can get payment data, within an order request + * @throws InvalidArgumentException + * @throws InvalidTotalAmountException + */ + public function testOrderWithPaymentData() + { + $orderRequest = $this->createIdealOrderRedirectRequestFixture(); + $orderRequest->addPaymentData((new PaymentData())->addPayload('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.KMUFsIDTnFmyG3nMiGM6H9FNFUROf3wh7SmqJp-QV30')); + $data = $orderRequest->getData(); + + $this->assertArrayHasKey('payment_data', $data); + } + + /** + * Test if we can get payment data, within an order request + * @throws InvalidArgumentException + * @throws InvalidTotalAmountException + */ + public function testOrderWithoutPaymentData() + { + $orderRequest = $this->createIdealOrderRedirectRequestFixture(); + $data = $orderRequest->getData(); + + $this->assertArrayNotHasKey('payment_data', $data); + } }