Skip to content

Commit

Permalink
[EM-390] Enhance Magento plugin to support FPX (#287)
Browse files Browse the repository at this point in the history
* [EM-390] Enhance Magento plugin to support FPX

* [EM-390] removed unused code and refactor

* [EM-390] fix lint

* [EM-390] fix lint

* [EM-390] fix lint

* handle errors. show error message

* fix select list style

* chancge FPXDataAssignObserver to FpxDataAssignObserver and some frontend validation

* change "If set to specific" to "If not set to all"
  • Loading branch information
Ashraf-alkibsi committed Jun 8, 2021
1 parent 934ae23 commit 99ce2b3
Show file tree
Hide file tree
Showing 42 changed files with 498 additions and 130 deletions.
7 changes: 6 additions & 1 deletion Controller/Callback/Offsite.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use Omise\Payment\Model\Config\Pointsciti;
use Omise\Payment\Model\Config\Installment;
use Omise\Payment\Model\Config\Truemoney;
use Omise\Payment\Model\Config\Fpx;
use Magento\Framework\Exception\LocalizedException;

class Offsite extends Action
Expand Down Expand Up @@ -96,7 +97,8 @@ public function execute()
Internetbanking::CODE,
Installment::CODE,
Truemoney::CODE,
Pointsciti::CODE
Pointsciti::CODE,
Fpx::CODE
]
)) {
$this->invalid(
Expand Down Expand Up @@ -173,6 +175,9 @@ public function execute()
case Pointsciti::CODE:
$dispPaymentMethod = "Citi Pay with Points";
break;
case Fpx::CODE:
$dispPaymentMethod = "FPX";
break;
}

// Add transaction.
Expand Down
15 changes: 15 additions & 0 deletions Gateway/Request/APMBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

use Omise\Payment\Model\Config\Alipay;
use Omise\Payment\Model\Config\Conveniencestore;
use Omise\Payment\Model\Config\Fpx;
use Omise\Payment\Model\Config\Pointsciti;
use Omise\Payment\Model\Config\Internetbanking;
use Omise\Payment\Model\Config\Installment;
Expand All @@ -16,6 +17,7 @@
use Omise\Payment\Model\Config\Truemoney;

use Omise\Payment\Observer\ConveniencestoreDataAssignObserver;
use Omise\Payment\Observer\FpxDataAssignObserver;
use Omise\Payment\Observer\InstallmentDataAssignObserver;
use Omise\Payment\Observer\InternetbankingDataAssignObserver;
use Omise\Payment\Observer\TruemoneyDataAssignObserver;
Expand All @@ -33,6 +35,11 @@ class APMBuilder implements BuilderInterface
*/
const SOURCE_TYPE = 'type';

/**
* @var string
*/
const BANK = 'bank';

/**
* @var string
*/
Expand Down Expand Up @@ -147,6 +154,14 @@ public function build(array $buildSubject)
self::SOURCE_TYPE => 'points_citi'
];
break;
case Fpx::CODE:
$paymentInfo[self::SOURCE] = [
self::SOURCE_TYPE => 'fpx',
self::BANK => $method->getAdditionalInformation(
FpxDataAssignObserver::BANK
)
];
break;
}

return $paymentInfo;
Expand Down
11 changes: 11 additions & 0 deletions Model/Api/Capabilities.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,15 @@ public function isZeroInterest()
{
return $this->capabilities ? $this->capabilities['zero_interest_installments'] : false;
}

/**
* @param string $type
* @return array|null
*/
public function getBackendsByType(string $type)
{
return $this->capabilities ? $this->capabilities->getBackends(
$this->capabilities->makeBackendFilterType($type)
) : null;
}
}
9 changes: 9 additions & 0 deletions Model/Capabilities.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,13 @@ public function isZeroInterest()
{
return $this->capabilitiesAPI->isZeroInterest();
}

/**
* @param string $type
* @return array|null
*/
public function getBackendsByType(string $type)
{
return $this->capabilitiesAPI->getBackendsByType($type);
}
}
13 changes: 13 additions & 0 deletions Model/Config/Fpx.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

namespace Omise\Payment\Model\Config;

use Omise\Payment\Model\Config\Config;

class Fpx extends Config
{

const CODE = 'omise_offsite_fpx';

const TYPE = 'fpx';
}
19 changes: 13 additions & 6 deletions Model/Ui/CapabilitiesConfigProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Magento\Payment\Api\PaymentMethodListInterface;
use Magento\Store\Model\StoreManagerInterface;
use Omise\Payment\Model\Capabilities;
use Omise\Payment\Model\Config\Fpx;
use Omise\Payment\Model\Config\Installment as OmiseInstallmentConfig;

class CapabilitiesConfigProvider implements ConfigProviderInterface
Expand Down Expand Up @@ -34,14 +35,20 @@ public function __construct(
public function getConfig()
{
$listOfActivePaymentMethods = $this->_paymentLists->getActiveList($this->_storeManager->getStore()->getId());
$configs = [];
foreach ($listOfActivePaymentMethods as $method) {
if ($method->getCode() === OmiseInstallmentConfig::CODE) {
return [
'installment_backends' => $this->capabilities->retrieveInstallmentBackends(),
'is_zero_interest' => $this->capabilities->isZeroInterest()
];
switch ($method->getCode()) {
case OmiseInstallmentConfig::CODE:
$configs['installment_backends'] = $this->capabilities->retrieveInstallmentBackends();
$configs['is_zero_interest'] = $this->capabilities->isZeroInterest();
break;
case Fpx::CODE:
$backendsFpx = $this->capabilities->getBackendsByType(Fpx::TYPE);
$configs['fpx']['banks'] = $backendsFpx ? current($backendsFpx)->banks : [];
break;
}
}
return [];

return $configs;
}
}
27 changes: 1 addition & 26 deletions Observer/ConveniencestoreDataAssignObserver.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use Magento\Payment\Observer\AbstractDataAssignObserver;
use Magento\Quote\Api\Data\PaymentInterface;

class ConveniencestoreDataAssignObserver extends AbstractDataAssignObserver
class ConveniencestoreDataAssignObserver extends OffsiteDataAssignObserver
{
/**
* @var string
Expand All @@ -22,29 +22,4 @@ class ConveniencestoreDataAssignObserver extends AbstractDataAssignObserver
self::EMAIL,
self::CUSTOMER_NAME
];

/**
* @param \Magento\Framework\Event\Observer $observer
*/
public function execute(Observer $observer)
{
$dataObject = $this->readDataArgument($observer);

$additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA);

if (! is_array($additionalData)) {
return;
}

$paymentInfo = $this->readPaymentModelArgument($observer);

foreach ($this->additionalInformationList as $additionalInformationKey) {
if (isset($additionalData[$additionalInformationKey])) {
$paymentInfo->setAdditionalInformation(
$additionalInformationKey,
$additionalData[$additionalInformationKey]
);
}
}
}
}
18 changes: 18 additions & 0 deletions Observer/FpxDataAssignObserver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Omise\Payment\Observer;

class FpxDataAssignObserver extends OffsiteDataAssignObserver
{
/**
* @var string
*/
const BANK = 'bank';

/**
* @var array
*/
protected $additionalInformationList = [
self::BANK
];
}
27 changes: 1 addition & 26 deletions Observer/InstallmentDataAssignObserver.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use Magento\Payment\Observer\AbstractDataAssignObserver;
use Magento\Quote\Api\Data\PaymentInterface;

class InstallmentDataAssignObserver extends AbstractDataAssignObserver
class InstallmentDataAssignObserver extends OffsiteDataAssignObserver
{
/**
* @var string
Expand All @@ -24,29 +24,4 @@ class InstallmentDataAssignObserver extends AbstractDataAssignObserver
self::OFFSITE,
self::TERMS
];

/**
* @param \Magento\Framework\Event\Observer $observer
*/
public function execute(Observer $observer)
{
$dataObject = $this->readDataArgument($observer);

$additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA);

if (! is_array($additionalData)) {
return;
}

$paymentInfo = $this->readPaymentModelArgument($observer);

foreach ($this->additionalInformationList as $additionalInformationKey) {
if (isset($additionalData[$additionalInformationKey])) {
$paymentInfo->setAdditionalInformation(
$additionalInformationKey,
$additionalData[$additionalInformationKey]
);
}
}
}
}
27 changes: 1 addition & 26 deletions Observer/InternetbankingDataAssignObserver.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use Magento\Payment\Observer\AbstractDataAssignObserver;
use Magento\Quote\Api\Data\PaymentInterface;

class InternetbankingDataAssignObserver extends AbstractDataAssignObserver
class InternetbankingDataAssignObserver extends OffsiteDataAssignObserver
{
/**
* @var string
Expand All @@ -18,29 +18,4 @@ class InternetbankingDataAssignObserver extends AbstractDataAssignObserver
protected $additionalInformationList = [
self::OFFSITE
];

/**
* @param \Magento\Framework\Event\Observer $observer
*/
public function execute(Observer $observer)
{
$dataObject = $this->readDataArgument($observer);

$additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA);

if (! is_array($additionalData)) {
return;
}

$paymentInfo = $this->readPaymentModelArgument($observer);

foreach ($this->additionalInformationList as $additionalInformationKey) {
if (isset($additionalData[$additionalInformationKey])) {
$paymentInfo->setAdditionalInformation(
$additionalInformationKey,
$additionalData[$additionalInformationKey]
);
}
}
}
}
40 changes: 40 additions & 0 deletions Observer/OffsiteDataAssignObserver.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<?php

namespace Omise\Payment\Observer;

use Magento\Framework\Event\Observer;
use Magento\Payment\Observer\AbstractDataAssignObserver;
use Magento\Quote\Api\Data\PaymentInterface;

class OffsiteDataAssignObserver extends AbstractDataAssignObserver
{
/**
* @var array
*/
protected $additionalInformationList = [];

/**
* @param \Magento\Framework\Event\Observer $observer
*/
public function execute(Observer $observer)
{
$dataObject = $this->readDataArgument($observer);

$additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA);

if (!is_array($additionalData)) {
return;
}

$paymentInfo = $this->readPaymentModelArgument($observer);

foreach ($this->additionalInformationList as $additionalInformationKey) {
if (isset($additionalData[$additionalInformationKey])) {
$paymentInfo->setAdditionalInformation(
$additionalInformationKey,
$additionalData[$additionalInformationKey]
);
}
}
}
}
27 changes: 1 addition & 26 deletions Observer/TruemoneyDataAssignObserver.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
use Magento\Payment\Observer\AbstractDataAssignObserver;
use Magento\Quote\Api\Data\PaymentInterface;

class TruemoneyDataAssignObserver extends AbstractDataAssignObserver
class TruemoneyDataAssignObserver extends OffsiteDataAssignObserver
{
/**
* @var string
Expand All @@ -18,29 +18,4 @@ class TruemoneyDataAssignObserver extends AbstractDataAssignObserver
protected $additionalInformationList = [
self::PHONE_NUMBER
];

/**
* @param \Magento\Framework\Event\Observer $observer
*/
public function execute(Observer $observer)
{
$dataObject = $this->readDataArgument($observer);

$additionalData = $dataObject->getData(PaymentInterface::KEY_ADDITIONAL_DATA);

if (! is_array($additionalData)) {
return;
}

$paymentInfo = $this->readPaymentModelArgument($observer);

foreach ($this->additionalInformationList as $additionalInformationKey) {
if (isset($additionalData[$additionalInformationKey])) {
$paymentInfo->setAdditionalInformation(
$additionalInformationKey,
$additionalData[$additionalInformationKey]
);
}
}
}
}
Loading

0 comments on commit 99ce2b3

Please sign in to comment.