Version Notes
Supports all versions of Magento
Download this release
Release Info
Developer | signifyd |
Extension | Signifyd_Connect |
Version | 3.16.3 |
Comparing to | |
See all releases |
Code changes from version 3.16.1 to 3.16.3
- app/code/community/Signifyd/Connect/Block/Renderer.php +2 -2
- app/code/community/Signifyd/Connect/Helper/Data.php +52 -9
- app/code/community/Signifyd/Connect/Helper/Log.php +9 -1
- app/code/community/Signifyd/Connect/Model/Case.php +285 -1
- app/code/community/Signifyd/Connect/Model/Cron.php +20 -46
- app/code/community/Signifyd/Connect/Model/Order.php +5 -4
- app/code/community/Signifyd/Connect/controllers/ConnectController.php +69 -351
- app/code/community/Signifyd/Connect/etc/config.xml +1 -1
- package.xml +5 -5
app/code/community/Signifyd/Connect/Block/Renderer.php
CHANGED
@@ -8,8 +8,8 @@ class Signifyd_Connect_Block_Renderer extends Mage_Adminhtml_Block_Widget_Grid_C
|
|
8 |
$column = $this->getColumn()->getId();
|
9 |
$helper = Mage::helper('signifyd_connect');
|
10 |
|
11 |
-
$url = $helper->
|
12 |
-
|
13 |
if ($column == "score") {
|
14 |
if(!is_numeric($value)) {
|
15 |
return $helper->__('N/A');
|
8 |
$column = $this->getColumn()->getId();
|
9 |
$helper = Mage::helper('signifyd_connect');
|
10 |
|
11 |
+
$url = $helper->getCaseUrlByOrderId($row->getIncrementId());
|
12 |
+
|
13 |
if ($column == "score") {
|
14 |
if(!is_numeric($value)) {
|
15 |
return $helper->__('N/A');
|
app/code/community/Signifyd/Connect/Helper/Data.php
CHANGED
@@ -1,5 +1,11 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
4 |
{
|
5 |
const UNPROCESSED_STATUS = 0;
|
@@ -7,11 +13,6 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
7 |
const CASE_CREATED_STATUS = 2;
|
8 |
const TRANSACTION_SENT_STATUS = 3;
|
9 |
|
10 |
-
const WAITING_SUBMISSION_STATUS = "waiting_submission";
|
11 |
-
const IN_REVIEW_STATUS = "in_review";
|
12 |
-
const PROCESSING_RESPONSE_STATUS = "processing_response";
|
13 |
-
const COMPLETED_STATUS = "completed";
|
14 |
-
|
15 |
public function logRequest($message)
|
16 |
{
|
17 |
if (Mage::getStoreConfig('signifyd_connect/log/all')) {
|
@@ -413,12 +414,29 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
413 |
return $this->request($url, $case, $auth, 'application/json');
|
414 |
}
|
415 |
|
|
|
|
|
|
|
|
|
416 |
public function getUrl()
|
417 |
{
|
418 |
-
// return Mage::getStoreConfig('signifyd_connect/settings/url') . '/cases';
|
419 |
return 'https://api.signifyd.com/v2/cases';
|
420 |
}
|
421 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
422 |
public function getAuth()
|
423 |
{
|
424 |
return Mage::getStoreConfig('signifyd_connect/settings/key');
|
@@ -527,7 +545,7 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
527 |
$case_object->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
528 |
$case_object->setCode($caseId);
|
529 |
$case_object->setTransactionId($case['purchase']['transactionId']);
|
530 |
-
$case_object->setMagentoStatus(
|
531 |
$case_object->save();
|
532 |
|
533 |
$order->addStatusHistoryComment("Signifyd: case $caseId created for order");
|
@@ -556,7 +574,7 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
556 |
return $url;
|
557 |
}
|
558 |
|
559 |
-
public function
|
560 |
{
|
561 |
$case = Mage::getModel('signifyd_connect/case')->load($order_id);
|
562 |
|
@@ -789,8 +807,33 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
789 |
return ($case->getGuarantee() == 'DECLINED')? true : false;
|
790 |
}
|
791 |
|
|
|
|
|
|
|
|
|
792 |
public function isEnabled()
|
793 |
{
|
794 |
return Mage::getStoreConfig('signifyd_connect/settings/enabled');
|
795 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
796 |
}
|
|
|
|
|
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Data Helper
|
4 |
+
*
|
5 |
+
* @category Signifyd Connect
|
6 |
+
* @package Signifyd_Connect
|
7 |
+
* @author Signifyd
|
8 |
+
*/
|
9 |
class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
10 |
{
|
11 |
const UNPROCESSED_STATUS = 0;
|
13 |
const CASE_CREATED_STATUS = 2;
|
14 |
const TRANSACTION_SENT_STATUS = 3;
|
15 |
|
|
|
|
|
|
|
|
|
|
|
16 |
public function logRequest($message)
|
17 |
{
|
18 |
if (Mage::getStoreConfig('signifyd_connect/log/all')) {
|
414 |
return $this->request($url, $case, $auth, 'application/json');
|
415 |
}
|
416 |
|
417 |
+
/**
|
418 |
+
* Getting the cases url
|
419 |
+
* @return string
|
420 |
+
*/
|
421 |
public function getUrl()
|
422 |
{
|
|
|
423 |
return 'https://api.signifyd.com/v2/cases';
|
424 |
}
|
425 |
|
426 |
+
/**
|
427 |
+
* Getting the case url based on the case code
|
428 |
+
* @param $caseCode
|
429 |
+
* @return string
|
430 |
+
*/
|
431 |
+
public function getCaseUrl($caseCode)
|
432 |
+
{
|
433 |
+
return 'https://api.signifyd.com/v2/cases/' . $caseCode;
|
434 |
+
}
|
435 |
+
|
436 |
+
/**
|
437 |
+
* Getting the Api Key for authentication with Signifyd
|
438 |
+
* @return mixed
|
439 |
+
*/
|
440 |
public function getAuth()
|
441 |
{
|
442 |
return Mage::getStoreConfig('signifyd_connect/settings/key');
|
545 |
$case_object->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
546 |
$case_object->setCode($caseId);
|
547 |
$case_object->setTransactionId($case['purchase']['transactionId']);
|
548 |
+
$case_object->setMagentoStatus(Signifyd_Connect_Model_Case::IN_REVIEW_STATUS);
|
549 |
$case_object->save();
|
550 |
|
551 |
$order->addStatusHistoryComment("Signifyd: case $caseId created for order");
|
574 |
return $url;
|
575 |
}
|
576 |
|
577 |
+
public function getCaseUrlByOrderId($order_id)
|
578 |
{
|
579 |
$case = Mage::getModel('signifyd_connect/case')->load($order_id);
|
580 |
|
807 |
return ($case->getGuarantee() == 'DECLINED')? true : false;
|
808 |
}
|
809 |
|
810 |
+
/**
|
811 |
+
* Is the extension enabled in the admin
|
812 |
+
* @return mixed
|
813 |
+
*/
|
814 |
public function isEnabled()
|
815 |
{
|
816 |
return Mage::getStoreConfig('signifyd_connect/settings/enabled');
|
817 |
}
|
818 |
+
|
819 |
+
/**
|
820 |
+
* Getting the action for accepted from guaranty
|
821 |
+
* @param $storeId
|
822 |
+
* @return mixed
|
823 |
+
*/
|
824 |
+
public function getAcceptedFromGuaranty($storeId){
|
825 |
+
return Mage::getStoreConfig('signifyd_connect/advanced/accepted_from_guaranty', $storeId);
|
826 |
+
}
|
827 |
+
|
828 |
+
/**
|
829 |
+
* Getting the action for declined from guaranty
|
830 |
+
* @param $storeId
|
831 |
+
* @return mixed
|
832 |
+
*/
|
833 |
+
public function getDeclinedFromGuaranty($storeId){
|
834 |
+
return Mage::getStoreConfig('signifyd_connect/advanced/declined_from_guaranty', $storeId);
|
835 |
+
}
|
836 |
}
|
837 |
+
|
838 |
+
/* Filename: Data.php */
|
839 |
+
/* Location: ../app/code/Community/Signifyd/Connect/Helper/Data.php */
|
app/code/community/Signifyd/Connect/Helper/Log.php
CHANGED
@@ -17,7 +17,15 @@ class Signifyd_Connect_Helper_Log extends Mage_Core_Helper_Abstract
|
|
17 |
|
18 |
public function addLog($msg)
|
19 |
{
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
}
|
22 |
}
|
23 |
|
17 |
|
18 |
public function addLog($msg)
|
19 |
{
|
20 |
+
if($this->isLogEnabled())
|
21 |
+
Mage::log($msg, null, $this->logFile);
|
22 |
+
|
23 |
+
return true;
|
24 |
+
}
|
25 |
+
|
26 |
+
public function isLogEnabled()
|
27 |
+
{
|
28 |
+
return Mage::getStoreConfig('signifyd_connect/log/all');
|
29 |
}
|
30 |
}
|
31 |
|
app/code/community/Signifyd/Connect/Model/Case.php
CHANGED
@@ -1,14 +1,55 @@
|
|
1 |
<?php
|
2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
class Signifyd_Connect_Model_Case extends Mage_Core_Model_Abstract
|
4 |
{
|
|
|
5 |
protected $logger;
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
protected function _construct()
|
8 |
{
|
9 |
$this->_init('signifyd_connect/case');
|
10 |
$this->_isPkAutoIncrement = false;
|
11 |
$this->logger = Mage::helper('signifyd_connect/log');
|
|
|
12 |
}
|
13 |
|
14 |
public function setMagentoStatusTo($case, $status)
|
@@ -26,4 +67,247 @@ class Signifyd_Connect_Model_Case extends Mage_Core_Model_Abstract
|
|
26 |
|
27 |
return true;
|
28 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
29 |
}
|
|
|
|
|
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* Case Model
|
4 |
+
*
|
5 |
+
* @category Signifyd Connect
|
6 |
+
* @package Signifyd_Connect
|
7 |
+
* @author Signifyd
|
8 |
+
*/
|
9 |
class Signifyd_Connect_Model_Case extends Mage_Core_Model_Abstract
|
10 |
{
|
11 |
+
/* The log helper */
|
12 |
protected $logger;
|
13 |
|
14 |
+
/* The order related to the case */
|
15 |
+
protected $order = false;
|
16 |
+
|
17 |
+
/* The store id of the order related to the case */
|
18 |
+
protected $storeId;
|
19 |
+
|
20 |
+
/* The topic of the request */
|
21 |
+
protected $topic;
|
22 |
+
|
23 |
+
/* The data helper */
|
24 |
+
protected $helper;
|
25 |
+
|
26 |
+
/* The request data */
|
27 |
+
protected $_request;
|
28 |
+
|
29 |
+
/* The previous guarantee for the case */
|
30 |
+
public $_previousGuarantee = false;
|
31 |
+
|
32 |
+
/* The previous score for the case */
|
33 |
+
public $_previousScore = false;
|
34 |
+
|
35 |
+
/* The status when a case is created */
|
36 |
+
const WAITING_SUBMISSION_STATUS = "waiting_submission";
|
37 |
+
|
38 |
+
/* The status for a case when the first response from Signifyd is received */
|
39 |
+
const IN_REVIEW_STATUS = "in_review";
|
40 |
+
|
41 |
+
/* The status for a case when the case is processing the response */
|
42 |
+
const PROCESSING_RESPONSE_STATUS = "processing_response";
|
43 |
+
|
44 |
+
/* The status for a case that is completed */
|
45 |
+
const COMPLETED_STATUS = "completed";
|
46 |
+
|
47 |
protected function _construct()
|
48 |
{
|
49 |
$this->_init('signifyd_connect/case');
|
50 |
$this->_isPkAutoIncrement = false;
|
51 |
$this->logger = Mage::helper('signifyd_connect/log');
|
52 |
+
$this->helper = Mage::helper('signifyd_connect');
|
53 |
}
|
54 |
|
55 |
public function setMagentoStatusTo($case, $status)
|
67 |
|
68 |
return true;
|
69 |
}
|
70 |
+
|
71 |
+
public function processFallback($request)
|
72 |
+
{
|
73 |
+
$this->logger->addLog('Attempting auth via fallback request');
|
74 |
+
$request = json_decode($request, true);
|
75 |
+
$this->_request = $request;
|
76 |
+
$this->topic = "cases/review"; // Topic header is most likely not available
|
77 |
+
|
78 |
+
if (is_array($request) && isset($request['orderId']))
|
79 |
+
$case = $this->load($request['orderId']);
|
80 |
+
else
|
81 |
+
return false;
|
82 |
+
|
83 |
+
$this->order = Mage::getModel('sales/order')->loadByIncrementId($request['orderId']);
|
84 |
+
|
85 |
+
if ($this->order && $this->order->getId()) {
|
86 |
+
$this->storeId = $this->order->getStoreId();
|
87 |
+
}
|
88 |
+
|
89 |
+
if ($case) {
|
90 |
+
$lookup = $this->caseLookup($case);
|
91 |
+
if ($lookup && is_array($lookup)) {
|
92 |
+
$this->processReview($case, $lookup);
|
93 |
+
} else {
|
94 |
+
$this->logger->addLog('Fallback failed with an invalid response from Signifyd');
|
95 |
+
}
|
96 |
+
} else {
|
97 |
+
$this->logger->addLog('Fallback failed with no matching case found');
|
98 |
+
}
|
99 |
+
|
100 |
+
return true;
|
101 |
+
}
|
102 |
+
|
103 |
+
public function processReview($case, $request)
|
104 |
+
{
|
105 |
+
if (!$case) return;
|
106 |
+
$this->_request = $request;
|
107 |
+
$this->setPrevious($case);
|
108 |
+
$this->setOrder();
|
109 |
+
$this->logger->addLog('Process review case:' . $case->getId());
|
110 |
+
|
111 |
+
$original_status = $case->getSignifydStatus();
|
112 |
+
|
113 |
+
$case = $this->updateScore($case);
|
114 |
+
$case = $this->updateStatus($case);
|
115 |
+
$case = $this->updateGuarantee($case);
|
116 |
+
|
117 |
+
$case->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
118 |
+
try {
|
119 |
+
$case->save();
|
120 |
+
$this->processAdditional($case, $original_status);
|
121 |
+
} catch (Exception $e) {
|
122 |
+
$this->logger->addLog('Process review error: ' . $e->__toString());
|
123 |
+
}
|
124 |
+
|
125 |
+
}
|
126 |
+
|
127 |
+
public function processAdditional($case, $original_status = false, $custom_order = null)
|
128 |
+
{
|
129 |
+
$this->logger->addLog('Process additional case: ' . $case['order_increment']);
|
130 |
+
if ($custom_order)
|
131 |
+
$order = $custom_order;
|
132 |
+
else
|
133 |
+
$order = $this->order;
|
134 |
+
|
135 |
+
if ($order && $order->getId()) {
|
136 |
+
$positiveAction = $this->helper->getAcceptedFromGuaranty($order->getStoreId());
|
137 |
+
$negativeAction = $this->helper->getDeclinedFromGuaranty($order->getStoreId());
|
138 |
+
$newGuarantee = null;
|
139 |
+
try{
|
140 |
+
if ($custom_order)
|
141 |
+
$newGuarantee = $case['guarantee'];
|
142 |
+
else
|
143 |
+
$newGuarantee = isset($this->_request['guaranteeDisposition']) ? $this->_request['guaranteeDisposition'] : null;
|
144 |
+
} catch(Exception $e){
|
145 |
+
$this->logger->addLog('ERROR ON WEBHOOK: ' . $e->__toString());
|
146 |
+
}
|
147 |
+
|
148 |
+
// If a guarantee has been set, we no longer care about other actions
|
149 |
+
if (isset($newGuarantee) && $newGuarantee != $this->_previousGuarantee) {
|
150 |
+
// Loading the signifyd order model
|
151 |
+
$orderModel = Mage::getModel('signifyd_connect/order');
|
152 |
+
if ($newGuarantee == 'DECLINED' ) {
|
153 |
+
if ($negativeAction == 1) {
|
154 |
+
// this is for when config is set to keep order on hold
|
155 |
+
$orderModel->keepOrderOnHold($order, "guarantee declined");
|
156 |
+
$orderModel->finalStatus($order, 1, $case);
|
157 |
+
} else if ($negativeAction == 2) {
|
158 |
+
// this is for when config is set to cancel close order
|
159 |
+
// $orderModel->cancelCloseOrder($order, "guarantee declined");
|
160 |
+
$orderModel->finalStatus($order, 2, $case);
|
161 |
+
} else {
|
162 |
+
// this is when the config is not set or it is set to something unknown
|
163 |
+
$this->logger->addLog("Unknown action $negativeAction");
|
164 |
+
}
|
165 |
+
} else if ($newGuarantee == 'APPROVED') {
|
166 |
+
if ($positiveAction == 1) {
|
167 |
+
// this is for when config is set to unhold order
|
168 |
+
$orderModel->unholdOrder($order, "guarantee approved");
|
169 |
+
$orderModel->finalStatus($order, 2, $case);
|
170 |
+
} elseif($positiveAction == 2){
|
171 |
+
// this is for when config is set to unhold, invoice and capture
|
172 |
+
// $orderModel->unholdOrderAndCapture($order, "guarantee approved");
|
173 |
+
$orderModel->finalStatus($order, 2, $case);
|
174 |
+
} else {
|
175 |
+
// this is when the config is not set or it is set to something unknown
|
176 |
+
$this->logger->addLog("Unknown action $positiveAction");
|
177 |
+
}
|
178 |
+
}
|
179 |
+
// add else for unknown guarantee
|
180 |
+
}
|
181 |
+
}
|
182 |
+
|
183 |
+
return true;
|
184 |
+
}
|
185 |
+
|
186 |
+
public function caseLookup($case)
|
187 |
+
{
|
188 |
+
$result = false;
|
189 |
+
|
190 |
+
try {
|
191 |
+
$url = $this->helper->getUrl() . '/' . $case->getCode();
|
192 |
+
$response = $this->helper->request($url, null, $this->helper->getAuth(), null, 'application/json');
|
193 |
+
$response_code = $response->getHttpCode();
|
194 |
+
if (substr($response_code, 0, 1) == '2') {
|
195 |
+
$result = json_decode($response->getRawResponse(), true);
|
196 |
+
} else {
|
197 |
+
$this->logger->addLog('Fallback request received a ' . $response_code . ' response from Signifyd');
|
198 |
+
}
|
199 |
+
} catch (Exception $e) {
|
200 |
+
$this->logger->addLog('Fallback issue: ' . $e->__toString());
|
201 |
+
}
|
202 |
+
|
203 |
+
return $result;
|
204 |
+
}
|
205 |
+
|
206 |
+
private function updateScore($case)
|
207 |
+
{
|
208 |
+
if (isset($this->_request['score'])) {
|
209 |
+
$case->setScore($this->_request['score']);
|
210 |
+
$this->logger->addLog('Set score to ' . $this->_request['score']);
|
211 |
+
} else {
|
212 |
+
$this->logger->addLog('No score value available');
|
213 |
+
}
|
214 |
+
|
215 |
+
return $case;
|
216 |
+
}
|
217 |
+
|
218 |
+
private function updateStatus($case)
|
219 |
+
{
|
220 |
+
if (isset($this->_request['status'])) {
|
221 |
+
$case->setSignifydStatus($this->_request['status']);
|
222 |
+
$this->logger->addLog('Set status to ' . $this->_request['status']);
|
223 |
+
} else {
|
224 |
+
$this->logger->addLog('No status value available');
|
225 |
+
}
|
226 |
+
|
227 |
+
return $case;
|
228 |
+
}
|
229 |
+
|
230 |
+
private function updateGuarantee($case)
|
231 |
+
{
|
232 |
+
try {
|
233 |
+
if (isset($this->_request['guaranteeDisposition'])) {
|
234 |
+
$case->setGuarantee($this->_request['guaranteeDisposition']);
|
235 |
+
$case->setMagentoStatus(self::PROCESSING_RESPONSE_STATUS);
|
236 |
+
$this->logger->addLog('Set guarantee to ' . $this->_request['guaranteeDisposition']);
|
237 |
+
}
|
238 |
+
} catch(Exception $e) {
|
239 |
+
$this->logger->addLog('ERROR ON WEBHOOK: ' . $e->__toString());
|
240 |
+
}
|
241 |
+
|
242 |
+
return $case;
|
243 |
+
}
|
244 |
+
|
245 |
+
public function processCreation($case, $request)
|
246 |
+
{
|
247 |
+
if (!$case) return false;
|
248 |
+
$this->_request = $request;
|
249 |
+
$this->setPrevious($case);
|
250 |
+
$this->setOrder();
|
251 |
+
|
252 |
+
$case = $this->updateScore($case);
|
253 |
+
$case = $this->updateStatus($case);
|
254 |
+
$case = $this->updateGuarantee($case);
|
255 |
+
|
256 |
+
$case->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
257 |
+
try {
|
258 |
+
$case->save();
|
259 |
+
$this->processAdditional($case);
|
260 |
+
$this->logger->addLog('Case ' . $case->getId() . ' created with status ' . $case->getSignifydStatus() . ' and score ' . $case->getScore());
|
261 |
+
} catch (Exception $e) {
|
262 |
+
$this->logger->addLog('Process creation error: ' . $e->__toString());
|
263 |
+
return false;
|
264 |
+
}
|
265 |
+
|
266 |
+
return true;
|
267 |
+
}
|
268 |
+
|
269 |
+
public function processGuarantee($case, $request)
|
270 |
+
{
|
271 |
+
if (!$case) return false;
|
272 |
+
$this->_request = $request;
|
273 |
+
$this->setPrevious($case);
|
274 |
+
$this->setOrder();
|
275 |
+
|
276 |
+
$original_status = $case->getSignifydStatus();
|
277 |
+
|
278 |
+
$case = $this->updateScore($case);
|
279 |
+
$case = $this->updateStatus($case);
|
280 |
+
$case = $this->updateGuarantee($case);
|
281 |
+
|
282 |
+
$case->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
283 |
+
try {
|
284 |
+
$case->save();
|
285 |
+
$this->processAdditional($case, $original_status);
|
286 |
+
} catch (Exception $e) {
|
287 |
+
$this->logger->addLog('Process guarantee error: ' . $e->__toString());
|
288 |
+
return false;
|
289 |
+
}
|
290 |
+
|
291 |
+
return true;
|
292 |
+
}
|
293 |
+
|
294 |
+
/**
|
295 |
+
* Setting the previous case guarantee and score
|
296 |
+
* @param $case
|
297 |
+
*/
|
298 |
+
public function setPrevious($case)
|
299 |
+
{
|
300 |
+
$this->_previousGuarantee = $case->getGuarantee();
|
301 |
+
$this->_previousScore = $case->getScore();
|
302 |
+
}
|
303 |
+
|
304 |
+
public function setOrder(){
|
305 |
+
if($this->order === false){
|
306 |
+
$this->order = Mage::getModel('sales/order')->loadByIncrementId($this->_request['orderId']);
|
307 |
+
}
|
308 |
+
return;
|
309 |
+
}
|
310 |
}
|
311 |
+
|
312 |
+
/* Filename: Case.php */
|
313 |
+
/* Location: ../app/code/Community/Signifyd/Connect/Model/Case.php */
|
app/code/community/Signifyd/Connect/Model/Cron.php
CHANGED
@@ -8,23 +8,16 @@
|
|
8 |
*/
|
9 |
class Signifyd_Connect_Model_Cron
|
10 |
{
|
11 |
-
/* The status when a case is created */
|
12 |
-
const WAITING_SUBMISSION_STATUS = "waiting_submission";
|
13 |
-
|
14 |
-
/* The status for a case when the first response from Signifyd is received */
|
15 |
-
const IN_REVIEW_STATUS = "in_review";
|
16 |
-
|
17 |
-
/* The status for a case when the case is processing the response */
|
18 |
-
const PROCESSING_RESPONSE_STATUS = "processing_response";
|
19 |
-
|
20 |
-
/* The status for a case that is completed */
|
21 |
-
const COMPLETED_STATUS = "completed";
|
22 |
-
|
23 |
protected $logger;
|
|
|
24 |
|
|
|
|
|
|
|
25 |
public function __construct()
|
26 |
{
|
27 |
$this->logger = Mage::helper('signifyd_connect/log');
|
|
|
28 |
}
|
29 |
|
30 |
/**
|
@@ -34,7 +27,7 @@ class Signifyd_Connect_Model_Cron
|
|
34 |
{
|
35 |
$this->logger->addLog("Main retry method called");
|
36 |
// Getting all the cases that were not submitted to Signifyd
|
37 |
-
$cases_for_resubmit = $this->getRetryCasesByStatus(
|
38 |
foreach ($cases_for_resubmit as $current_case) {
|
39 |
$this->logger->addLog("Signifyd: preparing for send case no: {$current_case['order_increment']}");
|
40 |
$current_order_id = $current_case['order_increment'];
|
@@ -43,22 +36,19 @@ class Signifyd_Connect_Model_Cron
|
|
43 |
}
|
44 |
|
45 |
// Getting all the cases that are awaiting review from Signifyd
|
46 |
-
$cases_for_resubmit = $this->getRetryCasesByStatus(
|
47 |
foreach ($cases_for_resubmit as $current_case) {
|
48 |
$this->logger->addLog("Signifyd: preparing for review case no: {$current_case['order_increment']}");
|
49 |
$this->processInReviewCase($current_case);
|
50 |
}
|
51 |
|
52 |
// Getting all the cases that need processing after the response was received
|
53 |
-
$cases_for_resubmit = $this->getRetryCasesByStatus(
|
54 |
foreach ($cases_for_resubmit as $current_case) {
|
55 |
-
$this->logger->addLog("Signifyd: preparing for
|
56 |
$current_order_id = $current_case['order_increment'];
|
57 |
$current_order = Mage::getModel('sales/order')->loadByIncrementId($current_order_id);
|
58 |
-
|
59 |
-
$this->loadClass();
|
60 |
-
$signifyd_controller = @new Signifyd_Connect_ConnectController();
|
61 |
-
$signifyd_controller->processAdditional($current_case,false,$current_order);
|
62 |
}
|
63 |
|
64 |
$this->logger->addLog("Main retry method ended");
|
@@ -90,46 +80,30 @@ class Signifyd_Connect_Model_Cron
|
|
90 |
/**
|
91 |
* Process the cases that are in review
|
92 |
* @param $case
|
|
|
93 |
*/
|
94 |
public function processInReviewCase($case)
|
95 |
{
|
96 |
-
|
97 |
-
|
|
|
|
|
|
|
98 |
try {
|
99 |
$response_code = $response->getHttpCode();
|
100 |
if (substr($response_code, 0, 1) == '2') {
|
101 |
$response_data = $response->getRawResponse();
|
102 |
-
|
103 |
-
|
104 |
-
$signifyd_controller = @new Signifyd_Connect_ConnectController();
|
105 |
-
$signifyd_controller->processFallback($response_data);
|
106 |
-
return;
|
107 |
}
|
108 |
} catch (Exception $e) {
|
109 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
|
|
110 |
}
|
111 |
-
}
|
112 |
-
|
113 |
-
/**
|
114 |
-
* Get the cases url
|
115 |
-
* @param $case_code
|
116 |
-
* @return string
|
117 |
-
*/
|
118 |
-
public function getCaseUrl($case_code)
|
119 |
-
{
|
120 |
-
// $url = Mage::getStoreConfig('signifyd_connect/settings/url') . '/cases/' . $case_code;
|
121 |
-
// return (empty($url))? "https://api.signifyd.com/v2/cases/" . $case_code : $url;
|
122 |
-
return 'https://api.signifyd.com/v2/cases/' . $case_code;
|
123 |
-
}
|
124 |
|
125 |
-
public function loadClass(){
|
126 |
-
if(!@class_exists('Signifyd_Connect_ConnectController')) //in case the class already exists
|
127 |
-
{
|
128 |
-
$dir = Mage::getModuleDir('controllers', 'Signifyd_Connect');
|
129 |
-
require_once($dir . '/ConnectController.php');
|
130 |
-
}
|
131 |
return true;
|
132 |
}
|
|
|
133 |
}
|
134 |
|
135 |
/* Filename: Cron.php */
|
8 |
*/
|
9 |
class Signifyd_Connect_Model_Cron
|
10 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
protected $logger;
|
12 |
+
protected $helper;
|
13 |
|
14 |
+
/**
|
15 |
+
* Signifyd_Connect_Model_Cron constructor.
|
16 |
+
*/
|
17 |
public function __construct()
|
18 |
{
|
19 |
$this->logger = Mage::helper('signifyd_connect/log');
|
20 |
+
$this->helper = Mage::helper('signifyd_connect');
|
21 |
}
|
22 |
|
23 |
/**
|
27 |
{
|
28 |
$this->logger->addLog("Main retry method called");
|
29 |
// Getting all the cases that were not submitted to Signifyd
|
30 |
+
$cases_for_resubmit = $this->getRetryCasesByStatus(Signifyd_Connect_Model_Case::WAITING_SUBMISSION_STATUS);
|
31 |
foreach ($cases_for_resubmit as $current_case) {
|
32 |
$this->logger->addLog("Signifyd: preparing for send case no: {$current_case['order_increment']}");
|
33 |
$current_order_id = $current_case['order_increment'];
|
36 |
}
|
37 |
|
38 |
// Getting all the cases that are awaiting review from Signifyd
|
39 |
+
$cases_for_resubmit = $this->getRetryCasesByStatus(Signifyd_Connect_Model_Case::IN_REVIEW_STATUS);
|
40 |
foreach ($cases_for_resubmit as $current_case) {
|
41 |
$this->logger->addLog("Signifyd: preparing for review case no: {$current_case['order_increment']}");
|
42 |
$this->processInReviewCase($current_case);
|
43 |
}
|
44 |
|
45 |
// Getting all the cases that need processing after the response was received
|
46 |
+
$cases_for_resubmit = $this->getRetryCasesByStatus(Signifyd_Connect_Model_Case::PROCESSING_RESPONSE_STATUS);
|
47 |
foreach ($cases_for_resubmit as $current_case) {
|
48 |
+
$this->logger->addLog("Signifyd: preparing for response processing of case no: {$current_case['order_increment']}");
|
49 |
$current_order_id = $current_case['order_increment'];
|
50 |
$current_order = Mage::getModel('sales/order')->loadByIncrementId($current_order_id);
|
51 |
+
Mage::getModel('signifyd_connect/case')->processAdditional($current_case, false, $current_order);
|
|
|
|
|
|
|
52 |
}
|
53 |
|
54 |
$this->logger->addLog("Main retry method ended");
|
80 |
/**
|
81 |
* Process the cases that are in review
|
82 |
* @param $case
|
83 |
+
* @return bool
|
84 |
*/
|
85 |
public function processInReviewCase($case)
|
86 |
{
|
87 |
+
if(empty($case['code'])) return false;
|
88 |
+
|
89 |
+
$this->logger->addLog('Process in review case: ' . $case['code']);
|
90 |
+
$case_url = $this->helper->getCaseUrl($case['code']);
|
91 |
+
$response = $this->helper->request($case_url,null, $this->helper->getAuth(),'application/json');
|
92 |
try {
|
93 |
$response_code = $response->getHttpCode();
|
94 |
if (substr($response_code, 0, 1) == '2') {
|
95 |
$response_data = $response->getRawResponse();
|
96 |
+
Mage::getModel('signifyd_connect/case')->processFallback($response_data);
|
97 |
+
return true;
|
|
|
|
|
|
|
98 |
}
|
99 |
} catch (Exception $e) {
|
100 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
101 |
+
return false;
|
102 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
return true;
|
105 |
}
|
106 |
+
|
107 |
}
|
108 |
|
109 |
/* Filename: Cron.php */
|
app/code/community/Signifyd/Connect/Model/Order.php
CHANGED
@@ -363,6 +363,7 @@ class Signifyd_Connect_Model_Order extends Mage_Core_Model_Abstract
|
|
363 |
public function finalStatus($order, $type, $case)
|
364 |
{
|
365 |
$id = (is_array($case))? $case['order_increment'] : $case->getId();
|
|
|
366 |
try {
|
367 |
$holdStatus = $this->checkStatus($order, Mage_Sales_Model_Order::STATE_HOLDED);
|
368 |
$caseModel = Mage::getModel('signifyd_connect/case');
|
@@ -370,20 +371,20 @@ class Signifyd_Connect_Model_Order extends Mage_Core_Model_Abstract
|
|
370 |
if($type == 1){
|
371 |
// needs to be true
|
372 |
if($holdStatus === true){
|
373 |
-
$caseModel->setMagentoStatusTo($case,
|
374 |
}
|
375 |
} elseif($type == 2) {
|
376 |
// needs to be false
|
377 |
if($holdStatus === false){
|
378 |
-
$caseModel->setMagentoStatusTo($case,
|
379 |
}
|
380 |
} else {
|
381 |
$this->logger->addLog('Final status unknown type');
|
382 |
}
|
383 |
|
384 |
-
$this->logger->addLog("Case no:{$id}, set status to complete successful.");
|
385 |
} catch (Exception $e){
|
386 |
-
$this->logger->addLog("Case no:{$id}, set status to complete fail: " . $e->__toString());
|
387 |
return false;
|
388 |
}
|
389 |
|
363 |
public function finalStatus($order, $type, $case)
|
364 |
{
|
365 |
$id = (is_array($case))? $case['order_increment'] : $case->getId();
|
366 |
+
$this->logger->addLog("Final status for case: {$id}");
|
367 |
try {
|
368 |
$holdStatus = $this->checkStatus($order, Mage_Sales_Model_Order::STATE_HOLDED);
|
369 |
$caseModel = Mage::getModel('signifyd_connect/case');
|
371 |
if($type == 1){
|
372 |
// needs to be true
|
373 |
if($holdStatus === true){
|
374 |
+
$caseModel->setMagentoStatusTo($case, Signifyd_Connect_Model_Case::COMPLETED_STATUS);
|
375 |
}
|
376 |
} elseif($type == 2) {
|
377 |
// needs to be false
|
378 |
if($holdStatus === false){
|
379 |
+
$caseModel->setMagentoStatusTo($case, Signifyd_Connect_Model_Case::COMPLETED_STATUS);
|
380 |
}
|
381 |
} else {
|
382 |
$this->logger->addLog('Final status unknown type');
|
383 |
}
|
384 |
|
385 |
+
$this->logger->addLog("Case no: {$id}, set status to complete successful.");
|
386 |
} catch (Exception $e){
|
387 |
+
$this->logger->addLog("Case no: {$id}, set status to complete fail: " . $e->__toString());
|
388 |
return false;
|
389 |
}
|
390 |
|
app/code/community/Signifyd/Connect/controllers/ConnectController.php
CHANGED
@@ -10,77 +10,46 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
10 |
{
|
11 |
public $_request = array();
|
12 |
public $_topic = false;
|
13 |
-
public $_order = false;
|
14 |
-
public $_store_id = null;
|
15 |
public $_case = false;
|
16 |
-
public $
|
17 |
-
public $_previousScore = false;
|
18 |
-
public $_unholdRetries = 0;
|
19 |
-
|
20 |
-
const WAITING_SUBMISSION_STATUS = "waiting_submission";
|
21 |
-
const IN_REVIEW_STATUS = "in_review";
|
22 |
-
const PROCESSING_RESPONSE_STATUS = "processing_response";
|
23 |
-
const COMPLETED_STATUS = "completed";
|
24 |
-
|
25 |
-
public function getApiKey()
|
26 |
-
{
|
27 |
-
return Mage::getStoreConfig('signifyd_connect/settings/key');
|
28 |
-
}
|
29 |
-
|
30 |
-
public function getAcceptedFromGuaranty(){
|
31 |
-
return Mage::getStoreConfig('signifyd_connect/advanced/accepted_from_guaranty', $this->_store_id);
|
32 |
-
}
|
33 |
-
|
34 |
-
public function getDeclinedFromGuaranty(){
|
35 |
-
return Mage::getStoreConfig('signifyd_connect/advanced/declined_from_guaranty', $this->_store_id);
|
36 |
-
}
|
37 |
-
|
38 |
-
public function enabled()
|
39 |
-
{
|
40 |
-
return Mage::getStoreConfig('signifyd_connect/settings/enabled');
|
41 |
-
}
|
42 |
-
|
43 |
-
public function getUrl($code)
|
44 |
-
{
|
45 |
-
// return Mage::getStoreConfig('signifyd_connect/settings/url', $this->_store_id) . '/cases/' . $code;
|
46 |
-
return 'https://api.signifyd.com/v2/cases/' . $code;
|
47 |
-
}
|
48 |
-
|
49 |
-
public function logErrors()
|
50 |
-
{
|
51 |
-
return Mage::getStoreConfig('signifyd_connect/log/all');
|
52 |
-
}
|
53 |
-
|
54 |
-
public function logRequest()
|
55 |
-
{
|
56 |
-
return Mage::getStoreConfig('signifyd_connect/log/all');
|
57 |
-
}
|
58 |
|
|
|
|
|
|
|
|
|
59 |
public function getRawPost()
|
60 |
{
|
61 |
-
if (isset($HTTP_RAW_POST_DATA) && $HTTP_RAW_POST_DATA)
|
62 |
return $HTTP_RAW_POST_DATA;
|
63 |
-
}
|
64 |
|
65 |
$post = file_get_contents("php://input");
|
66 |
-
|
67 |
-
if ($post) {
|
68 |
return $post;
|
69 |
-
}
|
70 |
|
71 |
return '';
|
72 |
}
|
73 |
|
|
|
|
|
|
|
|
|
74 |
public function getDefaultMessage()
|
75 |
{
|
76 |
return 'This URL is working! Please copy & paste the current URL into your <a href="https://signifyd.com/settings">settings</a> page in the Notifications section';
|
77 |
}
|
78 |
|
|
|
|
|
|
|
|
|
79 |
public function getDisabledMessage()
|
80 |
{
|
81 |
return 'This URL is disabled in the Magento admin panel! Please enable score retrieval under Admin>System>Config>Signifyd Connect>Advanced before setting this url in your Signifyd <a href="https://signifyd.com/settings">settings</a> page.';
|
82 |
}
|
83 |
|
|
|
|
|
|
|
84 |
public function unsupported()
|
85 |
{
|
86 |
Mage::app()->getResponse()
|
@@ -90,6 +59,9 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
90 |
exit;
|
91 |
}
|
92 |
|
|
|
|
|
|
|
93 |
public function complete()
|
94 |
{
|
95 |
Mage::app()->getResponse()
|
@@ -99,6 +71,9 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
99 |
exit;
|
100 |
}
|
101 |
|
|
|
|
|
|
|
102 |
public function conflict()
|
103 |
{
|
104 |
Mage::app()->getResponse()
|
@@ -107,88 +82,41 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
107 |
exit;
|
108 |
}
|
109 |
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
Mage::log('Set score to ' . $this->_request['score'], null, 'signifyd_connect.log');
|
117 |
-
}
|
118 |
-
} else {
|
119 |
-
if ($this->logRequest()) {
|
120 |
-
Mage::log('No score value available', null, 'signifyd_connect.log');
|
121 |
-
}
|
122 |
-
}
|
123 |
-
}
|
124 |
-
|
125 |
-
private function updateStatus($case)
|
126 |
-
{
|
127 |
-
if (isset($this->_request['status'])) {
|
128 |
-
$case->setSignifydStatus($this->_request['status']);
|
129 |
-
|
130 |
-
if ($this->logRequest()) {
|
131 |
-
Mage::log('Set status to ' . $this->_request['status'], null, 'signifyd_connect.log');
|
132 |
-
}
|
133 |
-
} else {
|
134 |
-
if ($this->logRequest()) {
|
135 |
-
Mage::log('No status value available', null, 'signifyd_connect.log');
|
136 |
-
}
|
137 |
-
}
|
138 |
-
}
|
139 |
-
|
140 |
-
private function updateGuarantee($case)
|
141 |
-
{
|
142 |
-
try {
|
143 |
-
if (isset($this->_request['guaranteeDisposition'])) {
|
144 |
-
$case->setGuarantee($this->_request['guaranteeDisposition']);
|
145 |
-
$case->setMagentoStatus(self::PROCESSING_RESPONSE_STATUS);
|
146 |
-
|
147 |
-
if ($this->logRequest()) {
|
148 |
-
Mage::log('Set guarantee to ' . $this->_request['guaranteeDisposition'], null,
|
149 |
-
'signifyd_connect.log');
|
150 |
-
}
|
151 |
-
}
|
152 |
-
} catch(Exception $e) {
|
153 |
-
if ($this->logErrors()) {
|
154 |
-
Mage::log('ERROR ON WEBHOOK: ' . $e->__toString(), null, 'signifyd_connect.log');
|
155 |
-
}
|
156 |
-
}
|
157 |
-
}
|
158 |
-
|
159 |
public function validRequest($request, $hash)
|
160 |
{
|
161 |
-
$check = base64_encode(hash_hmac('sha256', $request,
|
162 |
-
|
163 |
-
if ($this->logRequest()) {
|
164 |
-
Mage::log('API request hash check: ' . $check, null, 'signifyd_connect.log');
|
165 |
-
}
|
166 |
|
167 |
if ($check == $hash) {
|
168 |
return true;
|
169 |
-
}
|
170 |
-
else if ($this->getHeader('X-SIGNIFYD-TOPIC') == "cases/test"){
|
171 |
// In the case that this is a webhook test, the encoding ABCDE is allowed
|
172 |
$check = base64_encode(hash_hmac('sha256', $request, 'ABCDE', true));
|
173 |
-
if ($check == $hash)
|
174 |
return true;
|
175 |
-
}
|
176 |
}
|
177 |
|
178 |
return false;
|
179 |
}
|
180 |
|
181 |
-
|
|
|
|
|
|
|
|
|
182 |
{
|
183 |
$case = false;
|
184 |
|
185 |
-
if (isset($this->_request['orderId']))
|
186 |
-
{
|
187 |
$case = Mage::getModel('signifyd_connect/case')->load($this->_request['orderId']);
|
188 |
if($case->isObjectNew()) {
|
189 |
-
|
190 |
-
Mage::log('Case not yet in DB. Likely timing issue. order_increment: ' . $this->_request['orderId'], null, 'signifyd_connect.log');
|
191 |
-
}
|
192 |
$this->conflict();
|
193 |
}
|
194 |
}
|
@@ -196,6 +124,10 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
196 |
return $case;
|
197 |
}
|
198 |
|
|
|
|
|
|
|
|
|
199 |
public function initRequest($request)
|
200 |
{
|
201 |
$this->_request = json_decode($request, true);
|
@@ -207,208 +139,16 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
207 |
// For the webhook test, all of the request data will be invalid
|
208 |
if ($topic == "cases/test") return;
|
209 |
|
210 |
-
$this->_case = $this->initCase(
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
$this->_order = Mage::getModel('sales/order')->loadByIncrementId($this->_request['orderId']);
|
215 |
-
|
216 |
-
if ($this->_order && $this->_order->getId()) {
|
217 |
-
$this->_store_id = $this->_order->getStoreId();
|
218 |
-
}
|
219 |
-
|
220 |
-
if (!$this->_case && $this->logRequest()) {
|
221 |
-
Mage::log('No matching case was found for this request. order_increment: ' . $this->_request['orderId'], null, 'signifyd_connect.log');
|
222 |
-
}
|
223 |
-
}
|
224 |
-
|
225 |
-
public function processAdditional($case, $original_status = false,$custom_order = null)
|
226 |
-
{
|
227 |
-
if ($custom_order)
|
228 |
-
$order = $custom_order;
|
229 |
-
else
|
230 |
-
$order = $this->_order;
|
231 |
-
|
232 |
-
if ($order && $order->getId()) {
|
233 |
-
$positiveAction = $this->getAcceptedFromGuaranty();
|
234 |
-
$negativeAction = $this->getDeclinedFromGuaranty();
|
235 |
-
$newGuarantee = null;
|
236 |
-
try{
|
237 |
-
if ($custom_order)
|
238 |
-
$newGuarantee = $case['guarantee'];
|
239 |
-
else
|
240 |
-
$newGuarantee = isset($this->_request ['guaranteeDisposition']) ? $this->_request ['guaranteeDisposition'] : null;
|
241 |
-
} catch(Exception $e){
|
242 |
-
if ($this->logErrors()) {
|
243 |
-
Mage::log('ERROR ON WEBHOOK: ' . $e->__toString(), null, 'signifyd_connect.log');
|
244 |
-
}
|
245 |
-
}
|
246 |
-
// If a guarantee has been set, we no longer care about other actions
|
247 |
-
if (isset($newGuarantee) && $newGuarantee != $this->_previousGuarantee) {
|
248 |
-
// Loading the signifyd order model
|
249 |
-
$orderModel = Mage::getModel('signifyd_connect/order');
|
250 |
-
if ($newGuarantee == 'DECLINED' ) {
|
251 |
-
if ($negativeAction == 1) {
|
252 |
-
// this is for when config is set to keep order on hold
|
253 |
-
$orderModel->keepOrderOnHold($order, "guarantee declined");
|
254 |
-
$orderModel->finalStatus($order, 1, $case);
|
255 |
-
} else if ($negativeAction == 2) {
|
256 |
-
// this is for when config is set to cancel close order
|
257 |
-
// $orderModel->cancelCloseOrder($order, "guarantee declined");
|
258 |
-
$orderModel->finalStatus($order, 2, $case);
|
259 |
-
} else {
|
260 |
-
// this is when the config is not set or it is set to something unknown
|
261 |
-
Mage::log("Unknown action $negativeAction", null, 'signifyd_connect.log');
|
262 |
-
}
|
263 |
-
} else if ($newGuarantee == 'APPROVED') {
|
264 |
-
if ($positiveAction == 1) {
|
265 |
-
// this is for when config is set to unhold order
|
266 |
-
$orderModel->unholdOrder($order, "guarantee approved");
|
267 |
-
$orderModel->finalStatus($order, 2, $case);
|
268 |
-
} elseif($positiveAction == 2){
|
269 |
-
// this is for when config is set to unhold, invoice and capture
|
270 |
-
// $orderModel->unholdOrderAndCapture($order, "guarantee approved");
|
271 |
-
$orderModel->finalStatus($order, 2, $case);
|
272 |
-
} else {
|
273 |
-
// this is when the config is not set or it is set to something unknown
|
274 |
-
Mage::log("Unknown action $positiveAction", null, 'signifyd_connect.log');
|
275 |
-
}
|
276 |
-
}
|
277 |
-
// add else for unknown guarantee
|
278 |
-
}
|
279 |
-
}
|
280 |
-
}
|
281 |
-
|
282 |
-
public function processCreation()
|
283 |
-
{
|
284 |
-
$case = $this->_case;
|
285 |
-
|
286 |
-
if (!$case) {
|
287 |
-
return;
|
288 |
-
}
|
289 |
-
|
290 |
-
$this->updateScore($case);
|
291 |
-
$this->updateStatus($case);
|
292 |
-
$this->updateGuarantee($case);
|
293 |
-
|
294 |
-
$case->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
295 |
-
$case->save();
|
296 |
-
|
297 |
-
if ($this->logRequest()) {
|
298 |
-
Mage::log('Case ' . $case->getId() . ' created with status ' . $case->getSignifydStatus() . ' and score ' . $case->getScore(), null, 'signifyd_connect.log');
|
299 |
-
}
|
300 |
-
|
301 |
-
$this->processAdditional($case);
|
302 |
-
}
|
303 |
-
|
304 |
-
public function processReview()
|
305 |
-
{
|
306 |
-
$case = $this->_case;
|
307 |
-
|
308 |
-
if (!$case) {
|
309 |
-
return;
|
310 |
-
}
|
311 |
-
|
312 |
-
$original_status = $case->getSignifydStatus();
|
313 |
-
|
314 |
-
$this->updateScore($case);
|
315 |
-
$this->updateStatus($case);
|
316 |
-
$this->updateGuarantee($case);
|
317 |
-
|
318 |
-
$case->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
319 |
-
$case->save();
|
320 |
-
|
321 |
-
$this->processAdditional($case, $original_status);
|
322 |
-
}
|
323 |
-
|
324 |
-
public function processGuarantee()
|
325 |
-
{
|
326 |
-
$case = $this->_case;
|
327 |
-
|
328 |
-
if (!$case) {
|
329 |
-
return;
|
330 |
-
}
|
331 |
-
|
332 |
-
$original_status = $case->getSignifydStatus();
|
333 |
-
|
334 |
-
$this->updateScore($case);
|
335 |
-
$this->updateStatus($case);
|
336 |
-
$this->updateGuarantee($case);
|
337 |
-
|
338 |
-
$case->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
339 |
-
$case->save();
|
340 |
-
|
341 |
-
$this->processAdditional($case, $original_status);
|
342 |
-
}
|
343 |
-
|
344 |
-
public function caseLookup()
|
345 |
-
{
|
346 |
-
$result = false;
|
347 |
-
$case = $this->_case;
|
348 |
-
|
349 |
-
try {
|
350 |
-
$url = $this->getUrl($case->getCode());
|
351 |
-
|
352 |
-
$response = Mage::helper('signifyd_connect')->request($url, null, $this->getApiKey(), null, 'application/json');
|
353 |
-
|
354 |
-
$response_code = $response->getHttpCode();
|
355 |
-
|
356 |
-
if (substr($response_code, 0, 1) == '2') {
|
357 |
-
$result = json_decode($response->getRawResponse(), true);
|
358 |
-
} else {
|
359 |
-
if ($this->logRequest()) {
|
360 |
-
Mage::log('Fallback request received a ' . $response_code . ' response from Signifyd', null, 'signifyd_connect.log');
|
361 |
-
}
|
362 |
-
}
|
363 |
-
} catch (Exception $e) {
|
364 |
-
if ($this->logErrors()) {
|
365 |
-
Mage::log('Fallback issue: ' . $e->__toString(), null, 'signifyd_connect.log');
|
366 |
-
}
|
367 |
-
}
|
368 |
-
|
369 |
-
return $result;
|
370 |
-
}
|
371 |
-
|
372 |
-
public function processFallback($request)
|
373 |
-
{
|
374 |
-
if ($this->logRequest()) {
|
375 |
-
Mage::log('Attempting auth via fallback request', null, 'signifyd_connect.log');
|
376 |
-
}
|
377 |
-
|
378 |
-
$request = json_decode($request, true);
|
379 |
-
|
380 |
-
$this->_topic = "cases/review"; // Topic header is most likely not available
|
381 |
-
|
382 |
-
if (is_array($request) && isset($request['orderId']))
|
383 |
-
{
|
384 |
-
$this->_case = Mage::getModel('signifyd_connect/case')->load($request['orderId']);
|
385 |
-
}
|
386 |
-
|
387 |
-
$this->_order = Mage::getModel('sales/order')->loadByIncrementId($this->_request['orderId']);
|
388 |
-
|
389 |
-
if ($this->_order && $this->_order->getId()) {
|
390 |
-
$this->_store_id = $this->_order->getStoreId();
|
391 |
-
}
|
392 |
-
|
393 |
-
if ($this->_case) {
|
394 |
-
$lookup = $this->caseLookup();
|
395 |
-
|
396 |
-
if ($lookup && is_array($lookup)) {
|
397 |
-
$this->_request = $lookup;
|
398 |
-
|
399 |
-
$this->processReview();
|
400 |
-
} else {
|
401 |
-
if ($this->logRequest()) {
|
402 |
-
Mage::log('Fallback failed with an invalid response from Signifyd', null, 'signifyd_connect.log');
|
403 |
-
}
|
404 |
-
}
|
405 |
-
} else {
|
406 |
-
if ($this->logRequest()) {
|
407 |
-
Mage::log('Fallback failed with no matching case found', null, 'signifyd_connect.log');
|
408 |
-
}
|
409 |
-
}
|
410 |
}
|
411 |
|
|
|
|
|
|
|
|
|
|
|
412 |
public function getHeader($header)
|
413 |
{
|
414 |
// T379: Some frameworks add an extra HTTP_ before the header, so check for both names
|
@@ -423,7 +163,7 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
423 |
return $_SERVER[$extraHttp];
|
424 |
}
|
425 |
|
426 |
-
|
427 |
return '';
|
428 |
|
429 |
}
|
@@ -433,63 +173,41 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
433 |
*/
|
434 |
public function apiAction()
|
435 |
{
|
436 |
-
if (
|
437 |
echo $this->getDisabledMessage();
|
438 |
return;
|
439 |
}
|
440 |
|
|
|
|
|
441 |
// Prevent recurring on save
|
442 |
-
if(is_null(Mage::registry('signifyd_action')))
|
443 |
Mage::register('signifyd_action', 1);
|
444 |
-
}
|
445 |
|
446 |
$request = $this->getRawPost();
|
447 |
|
448 |
$hash = $this->getHeader('X-SIGNIFYD-SEC-HMAC-SHA256');
|
449 |
|
450 |
-
|
451 |
-
|
452 |
-
Mage::log('API request hash: ' . $hash, null, 'signifyd_connect.log');
|
453 |
-
}
|
454 |
|
455 |
if ($request) {
|
456 |
if ($this->validRequest($request, $hash)) {
|
457 |
$this->initRequest($request);
|
458 |
|
459 |
$topic = $this->_topic;
|
460 |
-
|
461 |
-
if ($this->logRequest()) {
|
462 |
-
Mage::log('API request topic: ' . $topic, null, 'signifyd_connect.log');
|
463 |
-
}
|
464 |
|
465 |
switch ($topic) {
|
466 |
case "cases/creation":
|
467 |
-
|
468 |
-
$this->processCreation($request);
|
469 |
-
} catch (Exception $e) {
|
470 |
-
if ($this->logErrors()) {
|
471 |
-
Mage::log('Case scoring issue: ' . $e->__toString(), null, 'signifyd_connect.log');
|
472 |
-
}
|
473 |
-
}
|
474 |
break;
|
475 |
case "cases/rescore":
|
476 |
case "cases/review":
|
477 |
-
|
478 |
-
$this->processReview($request);
|
479 |
-
} catch (Exception $e) {
|
480 |
-
if ($this->logErrors()) {
|
481 |
-
Mage::log('Case review issue: ' . $e->__toString(), null, 'signifyd_connect.log');
|
482 |
-
}
|
483 |
-
}
|
484 |
break;
|
485 |
case "guarantees/completion":
|
486 |
-
|
487 |
-
$this->processGuarantee($request);
|
488 |
-
} catch (Exception $ex) {
|
489 |
-
if ($this->logErrors()) {
|
490 |
-
Mage::log('Case guarantee issue: ' . $ex->__toString(), null, 'signifyd_connect.log');
|
491 |
-
}
|
492 |
-
}
|
493 |
break;
|
494 |
case "cases/test":
|
495 |
// Test is only verifying that the endpoint is reachable. So we just complete here
|
@@ -499,11 +217,8 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
499 |
$this->unsupported();
|
500 |
}
|
501 |
} else {
|
502 |
-
|
503 |
-
|
504 |
-
}
|
505 |
-
|
506 |
-
$this->processFallback($request);
|
507 |
}
|
508 |
} else {
|
509 |
echo $this->getDefaultMessage();
|
@@ -512,6 +227,9 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
512 |
$this->complete();
|
513 |
}
|
514 |
|
|
|
|
|
|
|
515 |
public function cronAction()
|
516 |
{
|
517 |
Mage::getModel('signifyd_connect/cron')->retry();
|
10 |
{
|
11 |
public $_request = array();
|
12 |
public $_topic = false;
|
|
|
|
|
13 |
public $_case = false;
|
14 |
+
public $logger;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
|
16 |
+
/**
|
17 |
+
* Getting the row post data
|
18 |
+
* @return string
|
19 |
+
*/
|
20 |
public function getRawPost()
|
21 |
{
|
22 |
+
if (isset($HTTP_RAW_POST_DATA) && $HTTP_RAW_POST_DATA)
|
23 |
return $HTTP_RAW_POST_DATA;
|
|
|
24 |
|
25 |
$post = file_get_contents("php://input");
|
26 |
+
if ($post)
|
|
|
27 |
return $post;
|
|
|
28 |
|
29 |
return '';
|
30 |
}
|
31 |
|
32 |
+
/**
|
33 |
+
* Getting the default message for the API
|
34 |
+
* @return string
|
35 |
+
*/
|
36 |
public function getDefaultMessage()
|
37 |
{
|
38 |
return 'This URL is working! Please copy & paste the current URL into your <a href="https://signifyd.com/settings">settings</a> page in the Notifications section';
|
39 |
}
|
40 |
|
41 |
+
/**
|
42 |
+
* Getting the disabled message for the extension
|
43 |
+
* @return string
|
44 |
+
*/
|
45 |
public function getDisabledMessage()
|
46 |
{
|
47 |
return 'This URL is disabled in the Magento admin panel! Please enable score retrieval under Admin>System>Config>Signifyd Connect>Advanced before setting this url in your Signifyd <a href="https://signifyd.com/settings">settings</a> page.';
|
48 |
}
|
49 |
|
50 |
+
/**
|
51 |
+
* Returning response as unsupported
|
52 |
+
*/
|
53 |
public function unsupported()
|
54 |
{
|
55 |
Mage::app()->getResponse()
|
59 |
exit;
|
60 |
}
|
61 |
|
62 |
+
/**
|
63 |
+
* Returning response as completed
|
64 |
+
*/
|
65 |
public function complete()
|
66 |
{
|
67 |
Mage::app()->getResponse()
|
71 |
exit;
|
72 |
}
|
73 |
|
74 |
+
/**
|
75 |
+
* Returning response as conflict
|
76 |
+
*/
|
77 |
public function conflict()
|
78 |
{
|
79 |
Mage::app()->getResponse()
|
82 |
exit;
|
83 |
}
|
84 |
|
85 |
+
/**
|
86 |
+
* Checking if the received request is valid
|
87 |
+
* @param $request
|
88 |
+
* @param $hash
|
89 |
+
* @return bool
|
90 |
+
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
public function validRequest($request, $hash)
|
92 |
{
|
93 |
+
$check = base64_encode(hash_hmac('sha256', $request, Mage::helper('signifyd_connect')->getAuth(), true));
|
94 |
+
$this->logger->addLog('API request hash check: ' . $check);
|
|
|
|
|
|
|
95 |
|
96 |
if ($check == $hash) {
|
97 |
return true;
|
98 |
+
} else if ($this->getHeader('X-SIGNIFYD-TOPIC') == "cases/test"){
|
|
|
99 |
// In the case that this is a webhook test, the encoding ABCDE is allowed
|
100 |
$check = base64_encode(hash_hmac('sha256', $request, 'ABCDE', true));
|
101 |
+
if ($check == $hash)
|
102 |
return true;
|
|
|
103 |
}
|
104 |
|
105 |
return false;
|
106 |
}
|
107 |
|
108 |
+
/**
|
109 |
+
* Initializing the Signifyd Case
|
110 |
+
* @return bool|Mage_Core_Model_Abstract
|
111 |
+
*/
|
112 |
+
public function initCase()
|
113 |
{
|
114 |
$case = false;
|
115 |
|
116 |
+
if (isset($this->_request['orderId'])) {
|
|
|
117 |
$case = Mage::getModel('signifyd_connect/case')->load($this->_request['orderId']);
|
118 |
if($case->isObjectNew()) {
|
119 |
+
$this->logger->addLog('Case not yet in DB. Likely timing issue. order_increment: ' . $this->_request['orderId']);
|
|
|
|
|
120 |
$this->conflict();
|
121 |
}
|
122 |
}
|
124 |
return $case;
|
125 |
}
|
126 |
|
127 |
+
/**
|
128 |
+
* Initializing the class params
|
129 |
+
* @param $request
|
130 |
+
*/
|
131 |
public function initRequest($request)
|
132 |
{
|
133 |
$this->_request = json_decode($request, true);
|
139 |
// For the webhook test, all of the request data will be invalid
|
140 |
if ($topic == "cases/test") return;
|
141 |
|
142 |
+
$this->_case = $this->initCase();
|
143 |
+
if (!$this->_case)
|
144 |
+
$this->logger->addLog('No matching case was found for this request. order_increment: ' . $this->_request['orderId']);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
145 |
}
|
146 |
|
147 |
+
/**
|
148 |
+
* Retrieving the header
|
149 |
+
* @param $header
|
150 |
+
* @return string
|
151 |
+
*/
|
152 |
public function getHeader($header)
|
153 |
{
|
154 |
// T379: Some frameworks add an extra HTTP_ before the header, so check for both names
|
163 |
return $_SERVER[$extraHttp];
|
164 |
}
|
165 |
|
166 |
+
$this->logger->addLog('Valid Header Not Found: ' . $header);
|
167 |
return '';
|
168 |
|
169 |
}
|
173 |
*/
|
174 |
public function apiAction()
|
175 |
{
|
176 |
+
if (!Mage::helper('signifyd_connect')->isEnabled()) {
|
177 |
echo $this->getDisabledMessage();
|
178 |
return;
|
179 |
}
|
180 |
|
181 |
+
$this->logger = Mage::helper('signifyd_connect/log');
|
182 |
+
|
183 |
// Prevent recurring on save
|
184 |
+
if(is_null(Mage::registry('signifyd_action')))
|
185 |
Mage::register('signifyd_action', 1);
|
|
|
186 |
|
187 |
$request = $this->getRawPost();
|
188 |
|
189 |
$hash = $this->getHeader('X-SIGNIFYD-SEC-HMAC-SHA256');
|
190 |
|
191 |
+
$this->logger->addLog('API request: ' . $request);
|
192 |
+
$this->logger->addLog('API request hash: ' . $hash);
|
|
|
|
|
193 |
|
194 |
if ($request) {
|
195 |
if ($this->validRequest($request, $hash)) {
|
196 |
$this->initRequest($request);
|
197 |
|
198 |
$topic = $this->_topic;
|
199 |
+
$this->logger->addLog('API request topic: ' . $topic);
|
|
|
|
|
|
|
200 |
|
201 |
switch ($topic) {
|
202 |
case "cases/creation":
|
203 |
+
Mage::getModel('signifyd_connect/case')->processCreation($this->_case, $this->_request);
|
|
|
|
|
|
|
|
|
|
|
|
|
204 |
break;
|
205 |
case "cases/rescore":
|
206 |
case "cases/review":
|
207 |
+
Mage::getModel('signifyd_connect/case')->processReview($this->_case, $this->_request);
|
|
|
|
|
|
|
|
|
|
|
|
|
208 |
break;
|
209 |
case "guarantees/completion":
|
210 |
+
Mage::getModel('signifyd_connect/case')->processGuarantee($this->_case, $this->_request);
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
break;
|
212 |
case "cases/test":
|
213 |
// Test is only verifying that the endpoint is reachable. So we just complete here
|
217 |
$this->unsupported();
|
218 |
}
|
219 |
} else {
|
220 |
+
$this->logger->addLog('API request failed auth');
|
221 |
+
Mage::getModel('signifyd_connect/case')->processFallback($this->_request);
|
|
|
|
|
|
|
222 |
}
|
223 |
} else {
|
224 |
echo $this->getDefaultMessage();
|
227 |
$this->complete();
|
228 |
}
|
229 |
|
230 |
+
/**
|
231 |
+
* Manually start the processing made by the cron job
|
232 |
+
*/
|
233 |
public function cronAction()
|
234 |
{
|
235 |
Mage::getModel('signifyd_connect/cron')->retry();
|
app/code/community/Signifyd/Connect/etc/config.xml
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
<config>
|
4 |
<modules>
|
5 |
<Signifyd_Connect>
|
6 |
-
<version>3.16.
|
7 |
</Signifyd_Connect>
|
8 |
</modules>
|
9 |
<global>
|
3 |
<config>
|
4 |
<modules>
|
5 |
<Signifyd_Connect>
|
6 |
+
<version>3.16.3</version>
|
7 |
</Signifyd_Connect>
|
8 |
</modules>
|
9 |
<global>
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Signifyd_Connect</name>
|
4 |
-
<version>3.16.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
|
7 |
<channel>community</channel>
|
@@ -10,9 +10,9 @@
|
|
10 |
<description>Supports all versions of Magento</description>
|
11 |
<notes>Supports all versions of Magento</notes>
|
12 |
<authors><author><name>signifyd</name><user>signifyd</user><email>manelis@signifyd.com</email></author></authors>
|
13 |
-
<date>
|
14 |
-
<time>
|
15 |
-
<contents><target name="mageetc"><dir name="modules"><file name="Signifyd_Connect.xml" hash="bcd998a24567eba8a20423c40fba2adf"/></dir></target><target name="magecommunity"><dir name="Signifyd"><dir name="Connect"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><file name="Grid.php" hash="2c2e8af2c67a09c041d5015c26eff587"/></dir><file name="Order.php" hash="e49f869c0aa5fb3ab6b70fb5752049ac"/></dir><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="c83481d3f9f01e629bb48d34358a53f6"/></dir></dir></dir></dir><file name="Renderer.php" hash="
|
16 |
<compatible/>
|
17 |
-
<dependencies><required><php><min>5.2.0</min><max>5.6.
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Signifyd_Connect</name>
|
4 |
+
<version>3.16.3</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL</license>
|
7 |
<channel>community</channel>
|
10 |
<description>Supports all versions of Magento</description>
|
11 |
<notes>Supports all versions of Magento</notes>
|
12 |
<authors><author><name>signifyd</name><user>signifyd</user><email>manelis@signifyd.com</email></author></authors>
|
13 |
+
<date>2017-02-20</date>
|
14 |
+
<time>10:18:17</time>
|
15 |
+
<contents><target name="mageetc"><dir name="modules"><file name="Signifyd_Connect.xml" hash="bcd998a24567eba8a20423c40fba2adf"/></dir></target><target name="magecommunity"><dir name="Signifyd"><dir name="Connect"><dir name="Block"><dir name="Adminhtml"><dir name="Sales"><dir name="Order"><file name="Grid.php" hash="2c2e8af2c67a09c041d5015c26eff587"/></dir><file name="Order.php" hash="e49f869c0aa5fb3ab6b70fb5752049ac"/></dir><dir name="System"><dir name="Config"><dir name="Fieldset"><file name="Hint.php" hash="c83481d3f9f01e629bb48d34358a53f6"/></dir></dir></dir></dir><file name="Renderer.php" hash="f55b4ac4a447141df9886ca864e7b75e"/><file name="Url.php" hash="dbe3e967879a69a2c943056f820e4688"/></dir><dir name="Helper"><file name="Data.php" hash="cb3be1f7e5458308a98e9b03dc970941"/><file name="Log.php" hash="6cabab7d2bf1956496b250ccc638e8de"/></dir><dir name="Model"><file name="Authnet.php" hash="0387e631fb232778cdc82c0c72c16781"/><file name="Case.php" hash="74ca11b208625db4aa29352a79b8b62a"/><file name="Cron.php" hash="521c218b03ced0777cd1066ec1c67b45"/><file name="Link.php" hash="c8a690bfe4b0ab789c02173a347f0f13"/><file name="Observer.php" hash="110cde415010768235322ed2a2143aab"/><dir name="Order"><file name="Payment.php" hash="a0ad3107170b7bae94b8402960b5cf48"/></dir><file name="Order.php" hash="0f0bd365c02eef9b5f28cebfd6dac22d"/><dir name="Resource"><dir name="Case"><file name="Collection.php" hash="b7dac9979a0c81db56294d1548570fc2"/></dir><file name="Case.php" hash="60d14407c9c90148aad543ce6868f343"/><dir name="Retries"><file name="Collection.php" hash="bd94e095c3a6367d20f5ebdd756740c8"/></dir><file name="Retries.php" hash="8027995f79188f624b6a681e4868d2e6"/></dir><file name="Retries.php" hash="28780c04867b083b1d51878e59fa380b"/><file name="Setup.php" hash="e803ffb4b86c7d8ec1d149e665d65877"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Options"><file name="Accepted.php" hash="bfa242f435e794f77843f38f11122691"/><file name="Declined.php" hash="f48482c1a78be0568b7b60cd5042906e"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="SignifydController.php" hash="c241dc4434631e3eb345c731c8cf177d"/></dir><file name="ConnectController.php" hash="51653f529f3ed033e9c8299ce14d50b5"/></dir><dir name="etc"><file name="adminhtml.xml" hash="894bd3f5ac76e9f602ab6ab592648b03"/><file name="config.xml" hash="6817bb22491e8e8a0436e9999580fcee"/><file name="system.xml" hash="5b89a88ea3510e2ee6623582f639910e"/></dir><dir name="sql"><dir name="signifyd_connect_setup"><file name="mysql4-install-3.1.1.php" hash="7fb2ccaf8352eea26e626ace6de53d80"/><file name="mysql4-install-3.12.0.php" hash="e4ec4d7445fbbc13a7008bcd69c529c4"/><file name="mysql4-install-3.3.0.php" hash="f61d0c018b28ae04d8d14b38556d18ad"/><file name="mysql4-install-3.4.0.php" hash="109cc5ca60974d0c4755dcb0f5ade3e7"/><file name="mysql4-install-3.4.5.php" hash="401b92235c0e534c941a64c60d24b851"/><file name="mysql4-install-3.7.0.php" hash="48a9d427944a4e63a000343ab329f517"/><file name="mysql4-install-3.8.0.php" hash="0fb3583eb4481c21b84ea674abc200f0"/><file name="mysql4-upgrade-3.10.0-3.10.1.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.10.1-3.11.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.11.0-3.11.1.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.11.1-3.12.0.php" hash="df5447c6223f66c03ddeacefc64322b8"/><file name="mysql4-upgrade-3.12.0-3.13.0.php" hash="f2e8ccb1fd199a0a678b3e34181aac18"/><file name="mysql4-upgrade-3.15.1-3.16.0.php" hash="7cde716fe0e3e849c1f82bbd7bf8ec3a"/><file name="mysql4-upgrade-3.2.0-3.2.1.php" hash="9e36c608afd6e30e3052334e085eeff4"/><file name="mysql4-upgrade-3.2.1-3.2.2.php" hash="efcc5d46a41e549e508a693f1e77bf44"/><file name="mysql4-upgrade-3.2.2-3.2.3.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.2.3-3.3.0.php" hash="94b907c2cacde5fb9831408ce9a06190"/><file name="mysql4-upgrade-3.3.0-3.4.0.php" hash="6eb18705081483bb8d9c14adcdefd095"/><file name="mysql4-upgrade-3.4.0-3.4.1.php" hash="79f2064f1fa20d646e66aa3e7912d2a0"/><file name="mysql4-upgrade-3.4.1-3.4.2.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.2-3.4.3.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.3-3.4.4.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.4-3.4.5.php" hash="5b7507d6bb97bf44d27b7a89c56924bb"/><file name="mysql4-upgrade-3.4.5-3.4.6.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.6-3.4.7.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.7-3.4.8.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.4.8-3.5.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.5.0-3.5.1.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.5.1-3.5.2.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.5.2-3.5.3.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.5.3-3.6.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.6.0-3.7.0.php" hash="1456a6d0ddf091be9c87b3bbc91263ba"/><file name="mysql4-upgrade-3.7.0-3.8.0.php" hash="e6fc207541cacc5079e8ea8e4d55f356"/><file name="mysql4-upgrade-3.8.0-3.9.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/><file name="mysql4-upgrade-3.9.0-3.10.0.php" hash="3ceb86495f33475774d4fc8727254cfc"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="signifyd"><dir name="connect"><dir name="config"><file name="hint.phtml" hash="e1f1d39ed2980473f1fef0aeb73a7e1c"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
+
<dependencies><required><php><min>5.2.0</min><max>5.6.28</max></php></required></dependencies>
|
18 |
</package>
|