Skip to content

Commit

Permalink
[PW-7169] Create order with PBL from rest api (#1762)
Browse files Browse the repository at this point in the history
* Initiate PBL from rest api

* Refactor naming

* Fix code smells

* Code smell fixes

* Resolve suggestions

Co-authored-by: system-mr <systemmr@adyen.com>
  • Loading branch information
AlexandrosMor and system-mr committed Oct 10, 2022
1 parent 55960b7 commit df47757
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 11 deletions.
30 changes: 22 additions & 8 deletions Gateway/Request/ExpiryDateDataBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2021 Adyen NV (https://www.adyen.com/)
* Copyright (c) 2022 Adyen NV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
Expand All @@ -12,6 +12,7 @@
namespace Adyen\Payment\Gateway\Request;

use Adyen\Payment\Model\Ui\AdyenPayByLinkConfigProvider;
use Adyen\Payment\Observer\AdyenPayByLinkDataAssignObserver;
use Magento\Framework\App\RequestInterface;
use Magento\Payment\Gateway\Request\BuilderInterface;

Expand All @@ -27,7 +28,8 @@ class ExpiryDateDataBuilder implements BuilderInterface
*/
public function __construct(
RequestInterface $request
) {
)
{
$this->request = $request;
}

Expand All @@ -39,14 +41,26 @@ public function __construct(
*/
public function build(array $buildSubject)
{
$expiryDate = null;
$paymentFormFields = $this->request->getParam('payment');
$expiryDate = date_create_from_format(
AdyenPayByLinkConfigProvider::DATE_TIME_FORMAT,
$paymentFormFields["adyen_pbl_expires_at"] . ' 23:59:59'
);
$paymentExpiryDate = $buildSubject['payment']->getPayment()->getAdditionalInformation()
[AdyenPayByLinkDataAssignObserver::PBL_EXPIRY_DATE];

if (isset($paymentFormFields) && isset($paymentFormFields
[AdyenPayByLinkDataAssignObserver::PBL_EXPIRY_DATE])) {
$expiryDate = $paymentFormFields[AdyenPayByLinkDataAssignObserver::PBL_EXPIRY_DATE];
} elseif (isset($paymentExpiryDate)) {
$expiryDate = $paymentExpiryDate;
}

$request['body']['expiresAt'] = $expiryDate->format(DATE_ATOM);
if ($expiryDate) {
$expiryDateTime = date_create_from_format(
AdyenPayByLinkConfigProvider::DATE_TIME_FORMAT,
$expiryDate . ' 23:59:59'
);

return $request;
$request['body']['expiresAt'] = $expiryDateTime->format(DATE_ATOM);
return $request;
}
}
}
4 changes: 1 addition & 3 deletions Gateway/Request/RecurringDataBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -63,9 +63,7 @@ public function build(array $buildSubject): array
} elseif ($method === PaymentMethods::ADYEN_HPP) {
$brand = $this->stateData->getPaymentMethodVariant($order->getQuoteId());
$body = $this->vaultHelper->buildPaymentMethodRecurringData($storeId, $brand);
} elseif ($method === PaymentMethods::ADYEN_ONE_CLICK) {
$body = $this->adyenRequestsHelper->buildAdyenTokenizedPaymentRecurringData($storeId, $payment);
} else {
} elseif ($method !== PaymentMethods::ADYEN_PAY_BY_LINK) {
$this->adyenLogger->addAdyenWarning(
sprintf('Unknown payment method: %s', $payment->getMethod()),
$this->adyenLogger->getOrderContext($order)
Expand Down
1 change: 1 addition & 0 deletions Helper/PaymentMethods.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class PaymentMethods extends AbstractHelper
const ADYEN_HPP = 'adyen_hpp';
const ADYEN_CC = 'adyen_cc';
const ADYEN_ONE_CLICK = 'adyen_oneclick';
const ADYEN_PAY_BY_LINK = 'adyen_pay_by_link';

const ADYEN_PREFIX = 'adyen_';

Expand Down
59 changes: 59 additions & 0 deletions Observer/AdyenPayByLinkDataAssignObserver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php
/**
*
* Adyen Payment module (https://www.adyen.com/)
*
* Copyright (c) 2022 Adyen NV (https://www.adyen.com/)
* See LICENSE.txt for license details.
*
* Author: Adyen <magento@adyen.com>
*/

namespace Adyen\Payment\Observer;

use Adyen\Service\Validator\DataArrayValidator;
use Magento\Framework\Event\Observer;
use Magento\Payment\Observer\AbstractDataAssignObserver;
use Magento\Quote\Api\Data\PaymentInterface;

class AdyenPayByLinkDataAssignObserver extends AbstractDataAssignObserver
{
const PBL_EXPIRY_DATE = 'adyen_pbl_expires_at';

/**
* Approved root level keys from additional data array
*
* @var array
*/
private static $approvedAdditionalDataKeys = [
self::PBL_EXPIRY_DATE
];

/**
* @param Observer $observer
* @return void
*/
public function execute(Observer $observer)
{
// Get request fields
$data = $this->readDataArgument($observer);
$paymentInfo = $this->readPaymentModelArgument($observer);

// Get additional data array
$additionalData = $data->getData(PaymentInterface::KEY_ADDITIONAL_DATA);
if (!is_array($additionalData)) {
return;
}

// Get a validated additional data array
$additionalData = DataArrayValidator::getArrayOnlyWithApprovedKeys(
$additionalData,
self::$approvedAdditionalDataKeys
);

// Set additional data in the payment
foreach ($additionalData as $key => $data) {
$paymentInfo->setAdditionalInformation($key, $data);
}
}
}
4 changes: 4 additions & 0 deletions etc/events.xml
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,8 @@
<event name="controller_action_postdispatch_vault_cards_deleteAction">
<observer name="adyen_vault_delete" instance="Adyen\Payment\Observer\VaultDeleteTokenObserver"/>
</event>
<event name="payment_method_assign_data_adyen_pay_by_link">
<observer name="adyen_pay_by_link_gateway_data_assign"
instance="Adyen\Payment\Observer\AdyenPayByLinkDataAssignObserver"/>
</event>
</config>

0 comments on commit df47757

Please sign in to comment.