diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..c94840d Binary files /dev/null and b/.DS_Store differ diff --git a/app/code/Riskified/Decider/Api/Api.php b/app/code/Riskified/Decider/Api/Api.php index 7917a25..dc2b3da 100644 --- a/app/code/Riskified/Decider/Api/Api.php +++ b/app/code/Riskified/Decider/Api/Api.php @@ -15,6 +15,7 @@ class Api const ACTION_UPDATE = 'update'; const ACTION_SUBMIT = 'submit'; const ACTION_CANCEL = 'cancel'; + const ACTION_REFUND = 'refund'; const ACTION_FULFILL = 'fulfill'; private $version; diff --git a/app/code/Riskified/Decider/Api/Order.php b/app/code/Riskified/Decider/Api/Order.php index bb3894e..6ca6a88 100755 --- a/app/code/Riskified/Decider/Api/Order.php +++ b/app/code/Riskified/Decider/Api/Order.php @@ -84,6 +84,10 @@ public function post($order, $action) $orderForTransport = $this->_orderHelper->getOrderCancellation(); $response = $transport->cancelOrder($orderForTransport); break; + case Api::ACTION_REFUND: + $orderForTransport = $this->loadRefund(); + $response = $transport->refundOrder($orderForTransport); + break; case Api::ACTION_FULFILL: $orderForTransport = $this->_orderHelper->getOrderFulfillments(); $response = $transport->fulfillOrder($orderForTransport); @@ -152,6 +156,16 @@ private function getCustomerSession() return $objectManager->get('Magento\Customer\Model\Session'); } + private function loadRefund() + { + $refund = new Model\Refund(); + $refund->id = strval($this->_orderHelper->getOrderOrigId()); + $refundDetails = $this->_orderHelper->getRefundDetails(); + $refund->refunds = array_filter($refundDetails, 'strlen'); + + return $refund; + } + private function load($model) { $gateway = 'unavailable'; diff --git a/app/code/Riskified/Decider/Api/Order/Helper.php b/app/code/Riskified/Decider/Api/Order/Helper.php index 9a06302..de946e5 100755 --- a/app/code/Riskified/Decider/Api/Order/Helper.php +++ b/app/code/Riskified/Decider/Api/Order/Helper.php @@ -206,6 +206,35 @@ public function getAddress($address) } return new Model\Address($addrArray); } + public function buildRefundDetailsObject($payload) + { + $refundObject = new Model\RefundDetails(array_filter(array( + 'refund_id' => $payload->getIncrementId(), + 'amount' => $payload->getSubtotal(), + 'currency' => $payload->getBaseCurrencyCode(), + 'refunded_at' => $payload->getCreatedAt(), + 'reason' => $payload->getCustomerNote() + ), 'strlen')); + + return $refundObject; + } + public function getRefundDetails() + { + $order = $this->getOrder(); + $creditMemos = $order->getCreditmemosCollection(); + $refundObjectCollection = array(); + if($creditMemos->getSize() > 0){ + foreach($creditMemos as $memo){ + array_push($refundObjectCollection, $this->buildRefundDetailsObject($memo)); + } + } + $currentMemo = $this->getCreditMemoFromRegistry(); + if(!is_null($currentMemo)){ + array_push($refundObjectCollection, $this->buildRefundDetailsObject($currentMemo)); + } + + return $refundObjectCollection; + } public function getPaymentDetails() { $payment = $this->getOrder()->getPayment(); diff --git a/app/code/Riskified/Decider/Observer/OrderPaymentRefund.php b/app/code/Riskified/Decider/Observer/OrderPaymentRefund.php index 665e44b..17fa033 100644 --- a/app/code/Riskified/Decider/Observer/OrderPaymentRefund.php +++ b/app/code/Riskified/Decider/Observer/OrderPaymentRefund.php @@ -9,13 +9,16 @@ class OrderPaymentRefund implements ObserverInterface private $logger; private $apiOrderLayer; private $messageManager; + private $registry; public function __construct( + \Magento\Framework\Registry $registry, \Riskified\Decider\Api\Log $logger, \Riskified\Decider\Api\Order $orderApi, \Magento\Framework\Message\ManagerInterface $messageManager ) { + $this->registry = $registry; $this->logger = $logger; $this->apiOrderLayer = $orderApi; $this->messageManager = $messageManager; @@ -25,7 +28,9 @@ public function execute(\Magento\Framework\Event\Observer $observer) { try { $order = $observer->getPayment()->getOrder(); - $this->apiOrderLayer->post($order, Api::ACTION_CANCEL); + $creditMemo = $observer->getEvent()->getCreditmemo(); + $this->saveMemoInRegistry($creditMemo); + $this->apiOrderLayer->post($order, Api::ACTION_REFUND); } catch(\Exception $e) { $this->messageManager->addErrorMessage( __("Riskified API Respond : %1", $e->getMessage()) @@ -33,4 +38,8 @@ public function execute(\Magento\Framework\Event\Observer $observer) $this->logger->logException($e); } } + public function saveMemoInRegistry($creditMemo) + { + $this->registry->register('creditMemo', $creditMemo); + } } diff --git a/modman b/modman new file mode 100644 index 0000000..492574f --- /dev/null +++ b/modman @@ -0,0 +1,3 @@ +# Modman file generated by 'generate-modman' +app/code/Riskified app/code/Riskified +vendor/riskified_php_sdk vendor/riskified_php_sdk