Skip to content

Commit

Permalink
Merge pull request #15 from forter/Forter-Adyen-Support
Browse files Browse the repository at this point in the history
Forter adyen support
  • Loading branch information
Alexandre Farber committed Aug 19, 2020
2 parents 7e96ce6 + 89b6a38 commit 7dbfbe7
Show file tree
Hide file tree
Showing 7 changed files with 171 additions and 42 deletions.
80 changes: 50 additions & 30 deletions Cron/SendQueue.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,13 @@ public function execute()
$items = $this->forterQueue
->create()
->getCollection()
->addFieldToFilter('sync_flag', '0');
->addFieldToFilter('sync_flag', '0')
->addFieldToFilter(
'sync_date',
[
'from' => date('Y-m-d H:i:s', strtotime('-24 hour')),
'to' => date('Y-m-d H:i:s', strtotime($this->dateTime->gmtDate()))]
);

$items->setPageSize(15)->setCurPage(1);

Expand All @@ -93,27 +99,23 @@ public function execute()

$method = $order->getPayment()->getMethod();

if ($item->getEntityType() == 'order' && $item->getData('entity_body') == 'approve') {
$this->approve->handleApproveImmediatly($order);
} elseif ($item->getEntityType() == 'order' && $item->getData('entity_body') == 'decline') {
if ($order->canUnhold()) {
$order->unhold()->save();
}
$this->decline->handlePostTransactionDescision($order);
} elseif ($item->getEntityType() == 'pre_sync_order') {
if ($method == 'adyen_cc' && $order->getPayment()->getAdyenPspReference()) {
$this->handlePreSyncOrder($order, $item);
if ($item->getEntityType() == 'pre_sync_order') {
if (strpos($method, 'adyen') !== false && !$order->getPayment()->getAdyenPspReference()) {
continue;
}

continue;
$this->handlePreSyncMethod($order, $item);
$item->setSyncFlag('1');
} elseif ($item->getEntityType() == 'order') {
$this->handleForterResponse($order, $item->getData('entity_body'));
$item->setSyncFlag('1');
}

$item->setSyncFlag('1');
$item->save();
}
}

private function handleAdyenMethod($order)
private function handlePreSyncMethod($order, $item)
{
try {
$data = $this->requestBuilderOrder->buildTransaction($order, 'AFTER_PAYMENT_ACTION');
Expand All @@ -130,31 +132,49 @@ private function handleAdyenMethod($order)
return false;
}

$this->handleForterResponse($order, $responseArray->action);

$order->setForterStatus($responseArray->action);
$order->save();

return $responseArray->status ? true : false;
} catch (\Exception $e) {
$this->abstractApi->reportToForterOnCatch($e);
}
}

private function handlePreSyncOrder($order, $item)
private function handleForterResponse($order, $response)
{
$item->setSyncFlag('1');
$item->save();
$forterResponse = $this->handleAdyenMethod($order);

if ($forterResponse) {
$storeId = $order->getStore()->getId();
$currentTime = $this->dateTime->gmtDate();
$this->forterConfig->log('Increment ID:' . $order->getIncrementId());
$this->forterQueue->create()
->setStoreId($storeId)
->setEntityType('order')
->setIncrementId($order->getIncrementId())
->setEntityBody($order->getForterStatus())
->setSyncDate($currentTime)
->save();
if ($this->forterConfig->getIsCron()) {
if ($response == 'approve') {
if ($this->forterConfig->getApproveCron() == '1') {
$this->approve->handleApproveImmediatly($order);
}
} elseif ($response == 'not reviewed') {
if ($this->forterConfig->getNotReviewCron() == '1') {
$this->approve->handleApproveImmediatly($order);
}
} elseif ($response == 'decline') {
switch ($this->forterConfig->getDeclineCron()) {
case 1:
$this->decline->handlePostTransactionDescision($order);
return;
case 2:
$this->decline->markOrderPaymentReview();
return;
}
}

return;
} else {
if ($response == 'approve') {
$this->approve->handleApproveImmediatly($order);
} elseif ($response == 'decline') {
if ($order->canUnhold()) {
$order->unhold()->save();
}
$this->decline->handlePostTransactionDescision($order);
}
}
}
}
24 changes: 24 additions & 0 deletions Model/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -329,6 +329,30 @@ public function getApprovePost()
return $this->scopeConfig->getValue('forter/immediate_post_pre_decision/approve_post');
}

/**
* @return mixed
*/
public function getApproveCron()
{
return $this->scopeConfig->getValue('forter/immediate_post_pre_decision/approve_cron');
}

/**
* @return mixed
*/
public function getDeclineCron()
{
return $this->scopeConfig->getValue('forter/immediate_post_pre_decision/decline_cron');
}

/**
* @return mixed
*/
public function getNotReviewCron()
{
return $this->scopeConfig->getValue('forter/immediate_post_pre_decision/not_review_cron');
}

/**
* @return mixed
*/
Expand Down
21 changes: 21 additions & 0 deletions Model/Config/Source/CronAuthApproveOptions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace Forter\Forter\Model\Config\Source;

/**
* Class CaptureInvoiceOptions
* @package Forter\Forter\Model\Config\Source
*/
class CronAuthApproveOptions implements \Magento\Framework\Option\ArrayInterface
{
/**
* @return array
*/
public function toOptionArray()
{
return [
['value' => '1', 'label' => __('Create Invoice and Capture Payments (CRON)')],
['value' => '2', 'label' => __('Do Nothing')]
];
}
}
22 changes: 22 additions & 0 deletions Model/Config/Source/CronAuthDeclineOptions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php

namespace Forter\Forter\Model\Config\Source;

/**
* Class PostDecisionOptions
* @package Forter\Forter\Model\Config\Source
*/
class CronAuthDeclineOptions implements \Magento\Framework\Option\ArrayInterface
{
/**
* @return array
*/
public function toOptionArray()
{
return [
['value' => '1', 'label' => __('Cancel Order, Void or Refund Payment (CRON)')],
['value' => '2', 'label' => __('Set Order to Payment Review State')],
['value' => '3', 'label' => __('Do nothing')]
];
}
}
21 changes: 21 additions & 0 deletions Model/Config/Source/CronAuthNotReviewedOptions.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace Forter\Forter\Model\Config\Source;

/**
* Class PostDecisionOptions
* @package Forter\Forter\Model\Config\Source
*/
class CronAuthNotReviewedOptions implements \Magento\Framework\Option\ArrayInterface
{
/**
* @return array
*/
public function toOptionArray()
{
return [
['value' => '1', 'label' => __('Create Invoice and Capture Payments')],
['value' => '2', 'label' => __('Do Nothing')]
];
}
}
18 changes: 7 additions & 11 deletions Model/RequestBuilder/Payment.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,16 @@ public function generatePaymentInfo($order)
if (strpos($payment_method, 'paypal') !== false) {
$paymentData["paypal"] = $this->paymentMethods->getPaypalDetails($payment);
} else {
switch ($payment_method) {
case 'authorizenet_directpost':
case 'authorizenet_acceptjs':
if (strpos($payment_method, 'adyen') !== false) {
$cardDetails = $this->paymentMethods->getAdyenDetails($payment);
} elseif (strpos($payment_method, 'authorizenet') !== false) {
$cardDetails = $this->paymentMethods->getAuthorizeNetDetails($payment);
break;
case 'braintree':
} elseif (strpos($payment_method, 'braintree') !== false) {
$cardDetails = $this->paymentMethods->getBraintreeDetails($payment);
break;
case 'adyen_cc':
$cardDetails = $this->paymentMethods->getAdyenDetails($payment);
break;
default:
} else {
$cardDetails = $this->paymentMethods->preferCcDetails($payment);
}
}

if (array_key_exists("expirationMonth", $cardDetails) || array_key_exists("expirationYear", $cardDetails) || array_key_exists("lastFourDigits", $cardDetails)) {
$paymentData["creditCard"] = $cardDetails;
}
Expand Down
27 changes: 26 additions & 1 deletion etc/adminhtml/system.xml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
<field id="pre_post_select">2</field>
</depends>
</field>
<field id="approve_post" translate="Module" type="select" sortOrder="5" showInDefault="1" showInWebsite="1" showInStore="1">
<field id="approve_post" translate="Module" type="select" sortOrder="5" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Action On Approve (post-authorization)</label>
<source_model>Forter\Forter\Model\Config\Source\PostAuthApproveOptions</source_model>
<depends>
Expand All @@ -111,6 +111,31 @@
<field id="pre_post_select">2</field>
</depends>
</field>
<field id="approve_cron" translate="Module" type="select" sortOrder="5" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Action On Approve (By Cron)</label>
<source_model>Forter\Forter\Model\Config\Source\CronAuthApproveOptions</source_model>
<depends>
<field id="pre_post_select">3</field>
</depends>
</field>
<field id="decline_cron" translate="Module" type="select" sortOrder="4" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Action On Decline (By Cron)</label>
<comment>
If "Cancel Order, Void or Refund Payment" is selected,
the extension will immediately try set the order to a "hold" state and then cancel it in a cron job.
</comment>
<source_model>Forter\Forter\Model\Config\Source\CronAuthDeclineOptions</source_model>
<depends>
<field id="pre_post_select">3</field>
</depends>
</field>
<field id="not_review_cron" translate="Module" type="select" sortOrder="4" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Action On Not Reviewed (By Cron)</label>
<source_model>Forter\Forter\Model\Config\Source\CronAuthNotReviewedOptions</source_model>
<depends>
<field id="pre_post_select">3</field>
</depends>
</field>
</group>
<group id="connection_information" translate="label" type="text" sortOrder="30" showInDefault="1" showInWebsite="1" showInStore="1">
<label>Connection Information</label>
Expand Down

0 comments on commit 7dbfbe7

Please sign in to comment.