Version Notes
Supports all versions of Magento
Download this release
Release Info
Developer | signifyd |
Extension | Signifyd_Connect |
Version | 3.15.1 |
Comparing to | |
See all releases |
Code changes from version 3.15.0 to 3.15.1
- app/code/community/Signifyd/Connect/Block/Url.php +0 -10
- app/code/community/Signifyd/Connect/Helper/Data.php +87 -78
- app/code/community/Signifyd/Connect/Helper/Log.php +0 -25
- app/code/community/Signifyd/Connect/Model/Case.php +0 -19
- app/code/community/Signifyd/Connect/Model/Cron.php +3 -130
- app/code/community/Signifyd/Connect/Model/Link.php +1 -1
- app/code/community/Signifyd/Connect/Model/Observer.php +97 -76
- app/code/community/Signifyd/Connect/Model/Order.php +0 -412
- app/code/community/Signifyd/Connect/Model/Order/Payment.php +0 -29
- app/code/community/Signifyd/Connect/Model/System/Config/Source/Options/Accepted.php +0 -19
- app/code/community/Signifyd/Connect/Model/System/Config/Source/Options/Declined.php +0 -19
- app/code/community/Signifyd/Connect/Model/System/Config/Source/Options/Negative.php +22 -0
- app/code/community/Signifyd/Connect/Model/System/Config/Source/Options/Positive.php +18 -0
- app/code/community/Signifyd/Connect/controllers/Adminhtml/SignifydController.php +5 -0
- app/code/community/Signifyd/Connect/controllers/ConnectController.php +187 -69
- app/code/community/Signifyd/Connect/etc/config.xml +11 -26
- app/code/community/Signifyd/Connect/etc/system.xml +121 -32
- app/code/community/Signifyd/Connect/sql/signifyd_connect_setup/mysql4-upgrade-3.14.0-3.15.0.php +0 -10
- package.xml +4 -4
app/code/community/Signifyd/Connect/Block/Url.php
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
class Signifyd_Connect_Block_Url
|
5 |
-
{
|
6 |
-
public function setForm()
|
7 |
-
{
|
8 |
-
return Mage::getUrl('/');
|
9 |
-
}
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Signifyd/Connect/Helper/Data.php
CHANGED
@@ -7,11 +7,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/request')) {
|
@@ -414,8 +409,7 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
414 |
|
415 |
public function getUrl()
|
416 |
{
|
417 |
-
|
418 |
-
return 'https://api.signifyd.com/v2/cases/';
|
419 |
}
|
420 |
|
421 |
public function getAuth()
|
@@ -479,6 +473,57 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
479 |
}
|
480 |
}
|
481 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
482 |
public function buildAndSendOrderToSignifyd($order, $forceSend = false)
|
483 |
{
|
484 |
if ($order && $order->getId()) {
|
@@ -500,10 +545,7 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
500 |
return "notready"; // Note: would not be in the order grid if this were the case
|
501 |
}
|
502 |
|
503 |
-
|
504 |
-
Mage::register('signifyd_action', 1); // Work will now take place
|
505 |
-
}
|
506 |
-
|
507 |
$customer = null;
|
508 |
if ($order->getCustomer()) {
|
509 |
$customer = $order->getCustomer();
|
@@ -526,7 +568,6 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
526 |
$case_object->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
527 |
$case_object->setCode($caseId);
|
528 |
$case_object->setTransactionId($case['purchase']['transactionId']);
|
529 |
-
$case_object->setMagentoStatus(self::IN_REVIEW_STATUS);
|
530 |
$case_object->save();
|
531 |
|
532 |
$order->addStatusHistoryComment("Signifyd: case $caseId created for order");
|
@@ -537,11 +578,44 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
537 |
} catch (Exception $e) {
|
538 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
539 |
}
|
540 |
-
|
541 |
return "error";
|
542 |
}
|
543 |
}
|
544 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
545 |
public function getProductUrl($product)
|
546 |
{
|
547 |
$url = null;
|
@@ -722,69 +796,4 @@ class Signifyd_Connect_Helper_Data extends Mage_Core_Helper_Abstract
|
|
722 |
|
723 |
return $response;
|
724 |
}
|
725 |
-
|
726 |
-
/**
|
727 |
-
* Get the order payment status
|
728 |
-
* @param $order
|
729 |
-
* @return array
|
730 |
-
*/
|
731 |
-
public function getOrderPaymentStatus($order)
|
732 |
-
{
|
733 |
-
$status = array('authorize' => false, 'capture' => false, 'credit_memo' => false);
|
734 |
-
$logger = Mage::helper('signifyd_connect/log');
|
735 |
-
$paymentMethod = $order->getPayment();
|
736 |
-
$paymentAuthorized = $paymentMethod->getBaseAmountAuthorized();
|
737 |
-
$baseTotalPaid = $order->getBaseTotalPaid();
|
738 |
-
$baseTotalRefunded = $order->getBaseTotalRefunded();
|
739 |
-
// Maybe used in the future
|
740 |
-
// $canVoid = $paymentMethod->canVoid($order);
|
741 |
-
// $amountPayed = $paymentMethod->getAmountPaid();
|
742 |
-
// $baseTotalCanceled = $order->getBaseTotalCanceled();
|
743 |
-
// $baseTotalInvoiced = $order->getBaseTotalInvoiced();
|
744 |
-
|
745 |
-
// Check authorization
|
746 |
-
if(!empty($paymentAuthorized)){
|
747 |
-
$status['authorize'] = true;
|
748 |
-
}
|
749 |
-
|
750 |
-
// Special case for Paypal payment type "order"
|
751 |
-
if($this->isPaypalOrder($paymentMethod)){
|
752 |
-
$paymentAdditional = $paymentMethod->getData('additional_information');
|
753 |
-
if(isset($paymentAdditional['is_order_action']) && $paymentAdditional['is_order_action']){
|
754 |
-
$status['authorize'] = true;
|
755 |
-
}
|
756 |
-
}
|
757 |
-
|
758 |
-
// Check capture
|
759 |
-
if(!empty($baseTotalPaid)){
|
760 |
-
$status['capture'] = true;
|
761 |
-
}
|
762 |
-
|
763 |
-
// Check credit memo
|
764 |
-
if(!empty($baseTotalRefunded)){
|
765 |
-
$status['credit_memo'] = true;
|
766 |
-
}
|
767 |
-
|
768 |
-
// Log status
|
769 |
-
$logger->addLog("Order: {$order->getIncrementId()} has a status of " . json_encode($status));
|
770 |
-
|
771 |
-
return $status;
|
772 |
-
}
|
773 |
-
|
774 |
-
/**
|
775 |
-
* Checking if the payment method si paypal_express
|
776 |
-
* @param $paymentMethod
|
777 |
-
* @return bool
|
778 |
-
*/
|
779 |
-
public function isPaypalOrder($paymentMethod)
|
780 |
-
{
|
781 |
-
$code = $paymentMethod->getMethodInstance()->getCode();
|
782 |
-
return (stripos($code, 'paypal_express') !== false)? true : false;
|
783 |
-
}
|
784 |
-
|
785 |
-
public function isGuarantyDeclined($order)
|
786 |
-
{
|
787 |
-
$case = Mage::getModel('signifyd_connect/case')->load($order->getIncrementId());
|
788 |
-
return ($case->getGuarantee() == 'DECLINED')? true : false;
|
789 |
-
}
|
790 |
}
|
7 |
const CASE_CREATED_STATUS = 2;
|
8 |
const TRANSACTION_SENT_STATUS = 3;
|
9 |
|
|
|
|
|
|
|
|
|
|
|
10 |
public function logRequest($message)
|
11 |
{
|
12 |
if (Mage::getStoreConfig('signifyd_connect/log/request')) {
|
409 |
|
410 |
public function getUrl()
|
411 |
{
|
412 |
+
return Mage::getStoreConfig('signifyd_connect/settings/url') . '/cases';
|
|
|
413 |
}
|
414 |
|
415 |
public function getAuth()
|
473 |
}
|
474 |
}
|
475 |
|
476 |
+
public function bulkSend($controller)
|
477 |
+
{
|
478 |
+
try {
|
479 |
+
$orderIds = $controller->getRequest()->getParam('order_ids');
|
480 |
+
if(is_string($orderIds))
|
481 |
+
{
|
482 |
+
$orderIds = array_map('intval', explode(',', $orderIds));
|
483 |
+
}
|
484 |
+
if (!is_array($orderIds)) {
|
485 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
486 |
+
->__('Please select order(s)'));
|
487 |
+
} else {
|
488 |
+
// Reference T2395
|
489 |
+
$user = "Unknown";
|
490 |
+
try {
|
491 |
+
$user = Mage::getSingleton('admin/session')->getUser()->getUsername();
|
492 |
+
} catch (Exception $ex) {
|
493 |
+
$this->logError($ex->__toString());
|
494 |
+
}
|
495 |
+
$this->logRequest("Bulk send initiated by: $user");
|
496 |
+
|
497 |
+
$collection = Mage::getModel('sales/order')->getCollection()
|
498 |
+
->addFieldToSelect('*')
|
499 |
+
->addFieldToFilter('entity_id', array('in' => $orderIds));
|
500 |
+
|
501 |
+
foreach ($collection as $order) {
|
502 |
+
$result = $this->buildAndSendOrderToSignifyd($order, /*forceSend*/ true);
|
503 |
+
if($result == "sent") {
|
504 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')
|
505 |
+
->__('Successfully sent order ' . $order->getIncrementId() . '.'));
|
506 |
+
} else if ($result == "exists") {
|
507 |
+
Mage::getSingleton('adminhtml/session')->addWarning(Mage::helper('adminhtml')
|
508 |
+
->__('Order ' . $order->getIncrementId() . ' has already been sent to Signifyd.'));
|
509 |
+
} else if ($result == "nodata") {
|
510 |
+
$this->logRequest("Request/Update not sent because there is no data");
|
511 |
+
} else {
|
512 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
513 |
+
->__('Order ' . $order->getIncrementId() . ' failed to send. See log for details.'));
|
514 |
+
}
|
515 |
+
}
|
516 |
+
if (Mage::getStoreConfig('signifyd_connect/log/request')) {
|
517 |
+
$this->logRequest("Bulk send complete");
|
518 |
+
}
|
519 |
+
}
|
520 |
+
} catch(Exception $ex) {
|
521 |
+
$this->logError($ex->__toString());
|
522 |
+
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')
|
523 |
+
->__('Send failed. See log for details'));
|
524 |
+
}
|
525 |
+
}
|
526 |
+
|
527 |
public function buildAndSendOrderToSignifyd($order, $forceSend = false)
|
528 |
{
|
529 |
if ($order && $order->getId()) {
|
545 |
return "notready"; // Note: would not be in the order grid if this were the case
|
546 |
}
|
547 |
|
548 |
+
Mage::register('signifyd_action', 1); // Work will now take place
|
|
|
|
|
|
|
549 |
$customer = null;
|
550 |
if ($order->getCustomer()) {
|
551 |
$customer = $order->getCustomer();
|
568 |
$case_object->setUpdated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
569 |
$case_object->setCode($caseId);
|
570 |
$case_object->setTransactionId($case['purchase']['transactionId']);
|
|
|
571 |
$case_object->save();
|
572 |
|
573 |
$order->addStatusHistoryComment("Signifyd: case $caseId created for order");
|
578 |
} catch (Exception $e) {
|
579 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
580 |
}
|
581 |
+
$this->unmarkProcessed($order);
|
582 |
return "error";
|
583 |
}
|
584 |
}
|
585 |
|
586 |
+
/**
|
587 |
+
* Run through up to $max items in the retry queue
|
588 |
+
* @param int $max The maximum numbers of items to process
|
589 |
+
*/
|
590 |
+
public function processRetryQueue($max = 99999)
|
591 |
+
{
|
592 |
+
$failed_orders = Mage::getModel('signifyd_connect/retries')->getCollection();
|
593 |
+
$process_count = 0;
|
594 |
+
try {
|
595 |
+
foreach ($failed_orders as $order_id) {
|
596 |
+
if ($process_count++ >= $max) {
|
597 |
+
return;
|
598 |
+
}
|
599 |
+
$order = Mage::getModel('sales/order')->loadByIncrementId($order_id->getOrderIncrement());
|
600 |
+
$result = "unset";
|
601 |
+
$this->logRequest("Retrying " . $order_id->getOrderIncrement());
|
602 |
+
if ($order != null && $this->processedStatus($order) < self::CASE_CREATED_STATUS) {
|
603 |
+
$result = $this->buildAndSendOrderToSignifyd($order);
|
604 |
+
}
|
605 |
+
if ($result !== "error") {
|
606 |
+
$this->logRequest("Completed retry " . $order_id->getOrderIncrement());
|
607 |
+
Mage::register('isSecureArea', true);
|
608 |
+
$order_id->delete();
|
609 |
+
Mage::unregister('isSecureArea');
|
610 |
+
} else {
|
611 |
+
$this->logError("Failed retry " . $order_id->getOrderIncrement());
|
612 |
+
}
|
613 |
+
}
|
614 |
+
} catch (Exception $e) {
|
615 |
+
$this->logError($e->__toString());
|
616 |
+
}
|
617 |
+
}
|
618 |
+
|
619 |
public function getProductUrl($product)
|
620 |
{
|
621 |
$url = null;
|
796 |
|
797 |
return $response;
|
798 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
799 |
}
|
app/code/community/Signifyd/Connect/Helper/Log.php
DELETED
@@ -1,25 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Log Helper
|
4 |
-
*
|
5 |
-
* @category Signifyd Connect
|
6 |
-
* @package Signifyd_Connect
|
7 |
-
* @author Signifyd
|
8 |
-
*/
|
9 |
-
class Signifyd_Connect_Helper_Log extends Mage_Core_Helper_Abstract
|
10 |
-
{
|
11 |
-
protected $logFile;
|
12 |
-
|
13 |
-
public function __construct()
|
14 |
-
{
|
15 |
-
$this->logFile = 'signifyd_connect.log';
|
16 |
-
}
|
17 |
-
|
18 |
-
public function addLog($msg)
|
19 |
-
{
|
20 |
-
return Mage::log($msg, null, $this->logFile);
|
21 |
-
}
|
22 |
-
}
|
23 |
-
|
24 |
-
/* Filename: Log.php */
|
25 |
-
/* Location: ../app/code/Community/Signifyd/Connect/Helper/Log.php */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Signifyd/Connect/Model/Case.php
CHANGED
@@ -2,28 +2,9 @@
|
|
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)
|
15 |
-
{
|
16 |
-
$id = (is_array($case))? $case['order_increment'] : $case->getId();
|
17 |
-
$caseLoaded = Mage::getModel('signifyd_connect/case')->load($id);
|
18 |
-
try {
|
19 |
-
$caseLoaded->setMagentoStatus($status);
|
20 |
-
$caseLoaded->save();
|
21 |
-
$this->logger->addLog("Signifyd: Case no:{$caseLoaded->getId()} status set to {$status}");
|
22 |
-
} catch (Exception $e){
|
23 |
-
$this->logger->addLog("Signifyd: Error setting case no:{$caseLoaded->getId()} status to {$status}");
|
24 |
-
return false;
|
25 |
-
}
|
26 |
-
|
27 |
-
return true;
|
28 |
}
|
29 |
}
|
2 |
|
3 |
class Signifyd_Connect_Model_Case extends Mage_Core_Model_Abstract
|
4 |
{
|
|
|
|
|
5 |
protected function _construct()
|
6 |
{
|
7 |
$this->_init('signifyd_connect/case');
|
8 |
$this->_isPkAutoIncrement = false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
}
|
10 |
}
|
app/code/community/Signifyd/Connect/Model/Cron.php
CHANGED
@@ -1,136 +1,9 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
* Cron Model
|
4 |
-
*
|
5 |
-
* @category Signifyd Connect
|
6 |
-
* @package Signifyd_Connect
|
7 |
-
* @author Signifyd
|
8 |
-
*/
|
9 |
class Signifyd_Connect_Model_Cron
|
10 |
{
|
11 |
-
|
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 |
-
/**
|
31 |
-
* Method to reprocessing the cases than did not fully complete
|
32 |
-
*/
|
33 |
-
public function retry()
|
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(self::WAITING_SUBMISSION_STATUS);
|
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'];
|
41 |
-
$current_order = Mage::getModel('sales/order')->loadByIncrementId($current_order_id);
|
42 |
-
Mage::helper('signifyd_connect')->buildAndSendOrderToSignifyd($current_order,true);
|
43 |
-
}
|
44 |
-
|
45 |
-
// Getting all the cases that are awaiting review from Signifyd
|
46 |
-
$cases_for_resubmit = $this->getRetryCasesByStatus(self::IN_REVIEW_STATUS);
|
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(self::PROCESSING_RESPONSE_STATUS);
|
54 |
-
foreach ($cases_for_resubmit as $current_case) {
|
55 |
-
$this->logger->addLog("Signifyd: preparing for review case no: {$current_case['order_increment']}");
|
56 |
-
$current_order_id = $current_case['order_increment'];
|
57 |
-
$current_order = Mage::getModel('sales/order')->loadByIncrementId($current_order_id);
|
58 |
-
// need to refactor this
|
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");
|
65 |
-
return;
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Getting the retry cases by the status of the case
|
70 |
-
* @param $status
|
71 |
-
* @return mixed
|
72 |
-
*/
|
73 |
-
public function getRetryCasesByStatus($status)
|
74 |
-
{
|
75 |
-
|
76 |
-
$time = time();
|
77 |
-
$lastTime = $time - 60*60*24*7; // not longer than 7 days
|
78 |
-
$firstTime = $time - 60*30; // longer than last 30 minuted
|
79 |
-
$from = date('Y-m-d H:i:s', $lastTime);
|
80 |
-
$to = date('Y-m-d H:i:s', $firstTime);
|
81 |
-
|
82 |
-
$cases = Mage::getModel('signifyd_connect/case')->getCollection()
|
83 |
-
->addFieldToFilter('updated', array('from' => $from, 'to' => $to))
|
84 |
-
->addFieldToFilter('magento_status', $status);
|
85 |
-
|
86 |
-
return $cases->getData();
|
87 |
-
|
88 |
-
}
|
89 |
-
|
90 |
-
/**
|
91 |
-
* Process the cases that are in review
|
92 |
-
* @param $case
|
93 |
-
*/
|
94 |
-
public function processInReviewCase($case)
|
95 |
-
{
|
96 |
-
$case_url = $this->getCaseUrl($case['code']);
|
97 |
-
$response = Mage::helper('signifyd_connect')->request($case_url,null,Mage::helper('signifyd_connect')->getAuth(),'application/json');
|
98 |
-
try {
|
99 |
-
$response_code = $response->getHttpCode();
|
100 |
-
if (substr($response_code, 0, 1) == '2') {
|
101 |
-
$response_data = $response->getRawResponse();
|
102 |
-
// need to refactor this
|
103 |
-
$this->loadClass();
|
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 |
-
|
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 */
|
136 |
-
/* Location: ../app/code/Community/Signifyd/Connect/Model/Cron.php */
|
1 |
<?php
|
2 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
class Signifyd_Connect_Model_Cron
|
4 |
{
|
5 |
+
public function update()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
{
|
7 |
+
return; // Deprecated
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
}
|
9 |
}
|
|
|
|
|
|
app/code/community/Signifyd/Connect/Model/Link.php
CHANGED
@@ -4,6 +4,6 @@ class Signifyd_Connect_Model_Link
|
|
4 |
{
|
5 |
public function getCommentText()
|
6 |
{
|
7 |
-
return "<a href=\"" . Mage::getUrl('signifyd/connect/api') . "\" target=\"_blank\">" . Mage::getUrl('signifyd/connect/api') . "</a>";
|
8 |
}
|
9 |
}
|
4 |
{
|
5 |
public function getCommentText()
|
6 |
{
|
7 |
+
return "Turn this on if you would like to receive Signifyd scores. Visit this url to confirm the callback functionality is working: <a href=\"" . Mage::getUrl('signifyd/connect/api') . "\" target=\"_blank\">" . Mage::getUrl('signifyd/connect/api') . "</a>";
|
8 |
}
|
9 |
}
|
app/code/community/Signifyd/Connect/Model/Observer.php
CHANGED
@@ -3,14 +3,7 @@
|
|
3 |
class Signifyd_Connect_Model_Observer extends Varien_Object
|
4 |
{
|
5 |
public $joins = 0;
|
6 |
-
|
7 |
-
|
8 |
-
public function _construct()
|
9 |
-
{
|
10 |
-
$this->helper = Mage::helper('signifyd_connect');
|
11 |
-
}
|
12 |
-
|
13 |
-
|
14 |
public function openCase($observer)
|
15 |
{
|
16 |
try {
|
@@ -36,12 +29,28 @@ class Signifyd_Connect_Model_Observer extends Varien_Object
|
|
36 |
return;
|
37 |
}
|
38 |
|
39 |
-
Mage::helper('signifyd_connect')->buildAndSendOrderToSignifyd($order);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
} catch (Exception $e) {
|
41 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
42 |
}
|
43 |
// If we get here, then we have failed to create the case.
|
|
|
|
|
44 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
}
|
46 |
|
47 |
public function logData($order, $payment, $quote)
|
@@ -186,57 +195,92 @@ class Signifyd_Connect_Model_Observer extends Varien_Object
|
|
186 |
return;
|
187 |
}
|
188 |
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
|
|
|
|
|
|
|
|
196 |
}
|
197 |
}
|
198 |
-
|
199 |
-
public function coreBlockAbstractToHtmlBefore(Varien_Event_Observer $observer)
|
200 |
-
{
|
201 |
-
$request = Mage::app()->getRequest();
|
202 |
-
$module = $request->getModuleName();
|
203 |
-
$controller = $request->getControllerName();
|
204 |
|
205 |
-
|
|
|
|
|
206 |
return;
|
207 |
}
|
208 |
|
209 |
-
$helper = Mage::helper('signifyd_connect');
|
210 |
$block = $observer->getEvent()->getBlock();
|
211 |
-
|
212 |
-
|
213 |
-
$block->
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
240 |
}
|
241 |
}
|
242 |
|
@@ -273,27 +317,4 @@ class Signifyd_Connect_Model_Observer extends Varien_Object
|
|
273 |
$helper->logError("Guarantee cancel: $ex");
|
274 |
}
|
275 |
}
|
276 |
-
|
277 |
-
/**
|
278 |
-
* Putting an order on hold after the order was placed until the response comes back and an action can be taken.
|
279 |
-
* @param Varien_Event_Observer $observer
|
280 |
-
* @return $this
|
281 |
-
*/
|
282 |
-
public function putOrderOnHold(Varien_Event_Observer $observer)
|
283 |
-
{
|
284 |
-
$order = $observer->getEvent()->getOrder();
|
285 |
-
if($order->canHold() === false){
|
286 |
-
$this->helper->logError("Order {$order->getIncrementId()} could not be held because Magento returned false for canHold");
|
287 |
-
}
|
288 |
-
|
289 |
-
try {
|
290 |
-
$order->hold();
|
291 |
-
$order->addStatusHistoryComment("Signifyd: order held after order place");
|
292 |
-
$order->save();
|
293 |
-
} catch (Exception $e){
|
294 |
-
$this->helper->logError("PutOrderOnHold Error: $e");
|
295 |
-
}
|
296 |
-
|
297 |
-
return $this;
|
298 |
-
}
|
299 |
}
|
3 |
class Signifyd_Connect_Model_Observer extends Varien_Object
|
4 |
{
|
5 |
public $joins = 0;
|
6 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
public function openCase($observer)
|
8 |
{
|
9 |
try {
|
29 |
return;
|
30 |
}
|
31 |
|
32 |
+
$result = Mage::helper('signifyd_connect')->buildAndSendOrderToSignifyd($order);
|
33 |
+
if($result !== "error") {
|
34 |
+
if($result !== "notready") {
|
35 |
+
// Handle two of the retry items in queue
|
36 |
+
Mage::helper('signifyd_connect')->processRetryQueue(2);
|
37 |
+
}
|
38 |
+
return;
|
39 |
+
}
|
40 |
} catch (Exception $e) {
|
41 |
Mage::log($e->__toString(), null, 'signifyd_connect.log');
|
42 |
}
|
43 |
// If we get here, then we have failed to create the case.
|
44 |
+
$this->addToRetryQueue($order);
|
45 |
+
}
|
46 |
|
47 |
+
private function addToRetryQueue($order)
|
48 |
+
{
|
49 |
+
Mage::log("Add to retries", null, 'signifyd_connect.log');
|
50 |
+
$order_tag = Mage::getModel('signifyd_connect/retries');
|
51 |
+
$order_tag->setOrderIncrement($order->getIncrementId());
|
52 |
+
$order_tag->setCreated(strftime('%Y-%m-%d %H:%M:%S', time()));
|
53 |
+
$order_tag->save();
|
54 |
}
|
55 |
|
56 |
public function logData($order, $payment, $quote)
|
195 |
return;
|
196 |
}
|
197 |
|
198 |
+
$show_scores = Mage::getStoreConfig('signifyd_connect/advanced/show_scores');
|
199 |
+
$show_guarantee = Mage::getStoreConfig('signifyd_connect/advanced/show_guarantee');
|
200 |
+
if ($show_scores || $show_guarantee) {
|
201 |
+
if ($this->oldSupport()) {
|
202 |
+
$select->joinLeft(array('signifyd'=>$collection->getTable('signifyd_connect/case')), 'signifyd.order_increment=e.increment_id', array('score'=>'score'));
|
203 |
+
$this->joins++;
|
204 |
+
} else {
|
205 |
+
$select->joinLeft(array('signifyd'=>$collection->getTable('signifyd_connect/case')), 'signifyd.order_increment=main_table.increment_id', array('score'=>'score',
|
206 |
+
'guarantee' => 'guarantee'));
|
207 |
+
$this->joins++;
|
208 |
+
}
|
209 |
}
|
210 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
211 |
|
212 |
+
public function coreBlockAbstractPrepareLayoutBefore(Varien_Event_Observer $observer)
|
213 |
+
{
|
214 |
+
if (!Mage::getStoreConfig('signifyd_connect/settings/enabled') && !$this->getEnabled()) {
|
215 |
return;
|
216 |
}
|
217 |
|
|
|
218 |
$block = $observer->getEvent()->getBlock();
|
219 |
+
if((get_class($block) =='Mage_Adminhtml_Block_Widget_Grid_Massaction'
|
220 |
+
|| get_class($block) == 'Enterprise_SalesArchive_Block_Adminhtml_Sales_Order_Grid_Massaction')
|
221 |
+
&& $block->getRequest()->getControllerName() == 'sales_order')
|
222 |
+
{
|
223 |
+
$url = Mage::helper("adminhtml")->getUrl('signifyd_connect/adminhtml_signifyd/send');
|
224 |
+
if(Mage::getStoreConfig('signifyd_connect/advanced/use_unsecure_requests')){
|
225 |
+
$url = Mage::getUrl('signifyd/connect/send');
|
226 |
+
}
|
227 |
+
$block->setFormFieldName('increment_id');
|
228 |
+
$block->addItem('signifyd_connect', array(
|
229 |
+
'label' => 'Send order(s) to Signifyd',
|
230 |
+
'url' => $url,
|
231 |
+
));
|
232 |
+
}
|
233 |
+
}
|
234 |
+
|
235 |
+
public function coreBlockAbstractToHtmlBefore(Varien_Event_Observer $observer)
|
236 |
+
{
|
237 |
+
$show_scores = Mage::getStoreConfig('signifyd_connect/advanced/show_scores');
|
238 |
+
$show_guarantee = Mage::getStoreConfig('signifyd_connect/advanced/show_guarantee');
|
239 |
+
if ($show_scores || $show_guarantee) {
|
240 |
+
$request = Mage::app()->getRequest();
|
241 |
+
$module = $request->getModuleName();
|
242 |
+
$controller = $request->getControllerName();
|
243 |
+
|
244 |
+
if ($module != $this->getAdminRoute() || $controller != 'sales_order') {
|
245 |
+
return;
|
246 |
+
}
|
247 |
+
|
248 |
+
$helper = Mage::helper('signifyd_connect');
|
249 |
+
$block = $observer->getEvent()->getBlock();
|
250 |
+
|
251 |
+
if ($block->getId() == 'sales_order_grid') {
|
252 |
+
if($show_scores) {
|
253 |
+
$block->addColumnAfter(
|
254 |
+
'score',
|
255 |
+
array(
|
256 |
+
'header' => $helper->__('Signifyd Score'),
|
257 |
+
'align' => 'left',
|
258 |
+
'type' => 'text',
|
259 |
+
'index' => 'score',
|
260 |
+
'filter' => false,
|
261 |
+
'renderer' => 'signifyd_connect/renderer',
|
262 |
+
'width' => '100px',
|
263 |
+
),
|
264 |
+
'status'
|
265 |
+
);
|
266 |
+
}
|
267 |
+
if($show_guarantee) {
|
268 |
+
$block->addColumnAfter(
|
269 |
+
'guarantee',
|
270 |
+
array(
|
271 |
+
'header' => $helper->__('Guarantee Status'),
|
272 |
+
'align' => 'left',
|
273 |
+
'type' => 'text',
|
274 |
+
'index' => 'guarantee',
|
275 |
+
'filter' => false,
|
276 |
+
'renderer' => 'signifyd_connect/renderer',
|
277 |
+
'width' => '100px',
|
278 |
+
),
|
279 |
+
'status'
|
280 |
+
);
|
281 |
+
}
|
282 |
+
$block->sortColumnsByOrder();
|
283 |
+
}
|
284 |
}
|
285 |
}
|
286 |
|
317 |
$helper->logError("Guarantee cancel: $ex");
|
318 |
}
|
319 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
320 |
}
|
app/code/community/Signifyd/Connect/Model/Order.php
DELETED
@@ -1,412 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Order Model
|
4 |
-
*
|
5 |
-
* @category Signifyd Connect
|
6 |
-
* @package Signifyd_Connect
|
7 |
-
* @author Signifyd
|
8 |
-
*/
|
9 |
-
class Signifyd_Connect_Model_Order extends Mage_Core_Model_Abstract
|
10 |
-
{
|
11 |
-
/* Property for instance of the log helper */
|
12 |
-
protected $logger;
|
13 |
-
|
14 |
-
/* Property for instance of the data helper */
|
15 |
-
protected $dataHelper;
|
16 |
-
|
17 |
-
/* Property for configuration */
|
18 |
-
protected $logRequest;
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Internal magento constructor
|
22 |
-
*/
|
23 |
-
public function _construct()
|
24 |
-
{
|
25 |
-
$this->logger = Mage::helper('signifyd_connect/log');
|
26 |
-
$this->dataHelper = Mage::helper('signifyd_connect');
|
27 |
-
$this->logRequest = Mage::getStoreConfig('signifyd_connect/log/request');
|
28 |
-
parent::_construct();
|
29 |
-
}
|
30 |
-
|
31 |
-
/**
|
32 |
-
* Method to authorize an order after order place
|
33 |
-
* @param $order
|
34 |
-
* @return bool
|
35 |
-
*/
|
36 |
-
public function authorizeOrder($order)
|
37 |
-
{
|
38 |
-
// Get the payment status for this order
|
39 |
-
$status = $this->dataHelper->getOrderPaymentStatus($order);
|
40 |
-
if($status['authorize']){
|
41 |
-
$this->logger->addLog("Order {$order->getIncrementId()} is already authorize");
|
42 |
-
return true;
|
43 |
-
}
|
44 |
-
$payment = $order->getPayment();
|
45 |
-
$method = $payment->getMethodInstance();
|
46 |
-
if(!$method->canAuthorize()){
|
47 |
-
$this->logger->addLog("Order {$order->getIncrementId()} can not be authorize");
|
48 |
-
return true;
|
49 |
-
}
|
50 |
-
|
51 |
-
$amount = $order->getData('grand_total');
|
52 |
-
|
53 |
-
try{
|
54 |
-
// check if method authorize returns anything usefully
|
55 |
-
$method->authorize($payment, $amount);
|
56 |
-
$this->logger->addLog("Authorize order {$order->getIncrementId()} was successful");
|
57 |
-
} catch (Exception $e) {
|
58 |
-
$this->logger->addLog("Authorize order {$order->getIncrementId()} was not authorized:");
|
59 |
-
$this->logger->addLog($e->__toString());
|
60 |
-
return false;
|
61 |
-
}
|
62 |
-
|
63 |
-
return true;
|
64 |
-
}
|
65 |
-
|
66 |
-
/**
|
67 |
-
* Method to generate the invoice after a order was placed
|
68 |
-
* @param $order
|
69 |
-
* @return bool
|
70 |
-
*/
|
71 |
-
public function generateInvoice($order)
|
72 |
-
{
|
73 |
-
if(!$order->canInvoice()){
|
74 |
-
$this->logger->addLog("Order {$order->getIncrementId()} can not be invoiced");
|
75 |
-
return false;
|
76 |
-
}
|
77 |
-
|
78 |
-
try {
|
79 |
-
|
80 |
-
$invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
|
81 |
-
|
82 |
-
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
|
83 |
-
$invoice->register();
|
84 |
-
$transactionSave = Mage::getModel('core/resource_transaction')
|
85 |
-
->addObject($invoice)
|
86 |
-
->addObject($invoice->getOrder());
|
87 |
-
$transactionSave->save();
|
88 |
-
$this->logger->addLog("Invoice was created for order: {$order->getIncrementId()}");
|
89 |
-
|
90 |
-
$invoice->addComment('Automatic Invoice', false);
|
91 |
-
$invoice->sendEmail();
|
92 |
-
$invoice->setEmailSent(true);
|
93 |
-
$invoice->save();
|
94 |
-
|
95 |
-
$order->addStatusHistoryComment('Automatic Invoice: '.$invoice->getIncrementId());
|
96 |
-
$order->save();
|
97 |
-
} catch (Exception $e) {
|
98 |
-
$this->logger->addLog('Exception while creating invoice: ' . $e->__toString());
|
99 |
-
return false;
|
100 |
-
}
|
101 |
-
|
102 |
-
return true;
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Method to walk the flow for an order when the config is set to unhold, invoice and capture.
|
107 |
-
* When guaranty is approved
|
108 |
-
* @param $order
|
109 |
-
* @param $reason
|
110 |
-
* @return bool
|
111 |
-
*/
|
112 |
-
public function unholdOrderAndCapture($order, $reason)
|
113 |
-
{
|
114 |
-
if(is_null($order->getId())){
|
115 |
-
$this->logger->addLog("Order was not found");
|
116 |
-
return false;
|
117 |
-
}
|
118 |
-
|
119 |
-
if(!$order->canUnhold()){
|
120 |
-
$this->logger->addLog("Order {$order->getIncrementId()} can not be unheld");
|
121 |
-
return false;
|
122 |
-
}
|
123 |
-
$status = $this->dataHelper->getOrderPaymentStatus($order);
|
124 |
-
|
125 |
-
try {
|
126 |
-
$order->unhold();
|
127 |
-
$order->addStatusHistoryComment("Signifyd: order unheld because $reason");
|
128 |
-
$order->save();
|
129 |
-
|
130 |
-
if ($this->logRequest) {
|
131 |
-
$this->logger->addLog("Order {$order->getIncrementId()} unheld because {$reason}");
|
132 |
-
}
|
133 |
-
|
134 |
-
// Authorize the order
|
135 |
-
$result = $this->authorizeOrder($order);
|
136 |
-
if($result === false){
|
137 |
-
$this->holdOrder($order, 'Fail to Authorize Order');
|
138 |
-
}
|
139 |
-
|
140 |
-
// Generate the invoice
|
141 |
-
if($status['capture'] !== true){
|
142 |
-
$result = $this->generateInvoice($order);
|
143 |
-
if($result === false){
|
144 |
-
$this->holdOrder($order, 'Fail to generate Invoice');
|
145 |
-
}
|
146 |
-
}
|
147 |
-
} catch (Exception $e) {
|
148 |
-
$this->logger->addLog("Order {$order->getIncrementId()} unable to be saved because {$e->getMessage()}");
|
149 |
-
$this->logger->addLog("Order {$order->getIncrementId()} was not unheld.");
|
150 |
-
return false;
|
151 |
-
}
|
152 |
-
|
153 |
-
return true;
|
154 |
-
}
|
155 |
-
|
156 |
-
/**
|
157 |
-
* Method to walk the flow for an order when the config is set to unhold only.
|
158 |
-
* When guaranty is approved
|
159 |
-
* @param $order
|
160 |
-
* @param $reason
|
161 |
-
* @return bool
|
162 |
-
*/
|
163 |
-
public function unholdOrder($order, $reason)
|
164 |
-
{
|
165 |
-
if(is_null($order->getId())){
|
166 |
-
$this->logger->addLog("Order was not found");
|
167 |
-
return false;
|
168 |
-
}
|
169 |
-
|
170 |
-
if(!$order->canUnhold()){
|
171 |
-
$this->logger->addLog("Order {$order->getIncrementId()} can not be unheld");
|
172 |
-
return false;
|
173 |
-
}
|
174 |
-
|
175 |
-
try {
|
176 |
-
$order->unhold();
|
177 |
-
$order->addStatusHistoryComment("Signifyd: order unheld because $reason");
|
178 |
-
$order->save();
|
179 |
-
|
180 |
-
// Authorize the order
|
181 |
-
// $result = $this->authorizeOrder($order);
|
182 |
-
// if($result === false){
|
183 |
-
// $this->holdOrder($order, 'Fail to Authorize Order');
|
184 |
-
// }
|
185 |
-
|
186 |
-
if ($this->logRequest) {
|
187 |
-
$this->logger->addLog("Order {$order->getIncrementId()} unheld because {$reason}");
|
188 |
-
}
|
189 |
-
} catch (Exception $e) {
|
190 |
-
$this->logger->addLog("Order {$order->getIncrementId()} unable to be saved because {$e->getMessage()}");
|
191 |
-
$this->logger->addLog("Order {$order->getIncrementId()} was not unheld.");
|
192 |
-
return false;
|
193 |
-
}
|
194 |
-
return true;
|
195 |
-
}
|
196 |
-
|
197 |
-
/**
|
198 |
-
* Method to hold the order whe the guaranty is declined
|
199 |
-
* @param $order
|
200 |
-
* @param $reason
|
201 |
-
* @return bool
|
202 |
-
*/
|
203 |
-
public function holdOrder($order, $reason)
|
204 |
-
{
|
205 |
-
if(is_null($order->getId())){
|
206 |
-
$this->logger->addLog("Order was not found");
|
207 |
-
return false;
|
208 |
-
}
|
209 |
-
|
210 |
-
if(!$order->canHold()){
|
211 |
-
$this->logger->addLog("Order {$order->getIncrementId()} can not be held");
|
212 |
-
return false;
|
213 |
-
}
|
214 |
-
|
215 |
-
try {
|
216 |
-
$order->hold();
|
217 |
-
$order->addStatusHistoryComment("Signifyd: order held because {$reason}");
|
218 |
-
$order->save();
|
219 |
-
|
220 |
-
if ($this->logRequest) {
|
221 |
-
$this->logger->addLog("Order {$order->getIncrementId()} held because {$reason}");
|
222 |
-
}
|
223 |
-
} catch (Exception $e){
|
224 |
-
$this->logger->addLog("Order {$order->getIncrementId()} unable to be saved because {$e->getMessage()}");
|
225 |
-
$this->logger->addLog("Order {$order->getIncrementId()} was not held.");
|
226 |
-
return false;
|
227 |
-
}
|
228 |
-
|
229 |
-
return true;
|
230 |
-
}
|
231 |
-
|
232 |
-
/**
|
233 |
-
* Method to hold the order whe the guaranty is declined and magento config is set to cancel the order
|
234 |
-
* @param $order
|
235 |
-
* @param $reason
|
236 |
-
* @return bool
|
237 |
-
*/
|
238 |
-
public function cancelOrder($order, $reason)
|
239 |
-
{
|
240 |
-
if(is_null($order->getId())){
|
241 |
-
$this->logger->addLog("Order was not found");
|
242 |
-
return false;
|
243 |
-
}
|
244 |
-
|
245 |
-
if ($order->getState() === $order::STATE_HOLDED) {
|
246 |
-
$this->unholdOrder($order, $reason);
|
247 |
-
}
|
248 |
-
|
249 |
-
if(!$order->canCancel()){
|
250 |
-
$this->logger->addLog("Order {$order->getIncrementId()} can not be canceled");
|
251 |
-
return false;
|
252 |
-
}
|
253 |
-
|
254 |
-
try {
|
255 |
-
$order->cancel();
|
256 |
-
$order->addStatusHistoryComment("Signifyd: order canceled because $reason");
|
257 |
-
$order->save();
|
258 |
-
|
259 |
-
if ($this->logRequest) {
|
260 |
-
$this->logger->addLog("Order {$order->getIncrementId()} cancelled because {$reason}");
|
261 |
-
}
|
262 |
-
} catch (Exception $e){
|
263 |
-
$this->logger->addLog("Order {$order->getIncrementId()} unable to be saved because {$e->getMessage()}");
|
264 |
-
$this->logger->addLog("Order {$order->getIncrementId()} was not canceled.");
|
265 |
-
return false;
|
266 |
-
}
|
267 |
-
|
268 |
-
return true;
|
269 |
-
}
|
270 |
-
/*
|
271 |
-
public function voidOrderPayment($order, $reason)
|
272 |
-
{
|
273 |
-
if(is_null($order->getId())){
|
274 |
-
$this->logger->addLog("Order was not found");
|
275 |
-
return false;
|
276 |
-
}
|
277 |
-
$payment = $order->getPayment();
|
278 |
-
$method = $payment->getMethodInstance();
|
279 |
-
|
280 |
-
if(!$method->canVoid($payment)){
|
281 |
-
$this->logger->addLog("Payment for order {$order->getIncrementId()} can not be voided");
|
282 |
-
return false;
|
283 |
-
}
|
284 |
-
|
285 |
-
try{
|
286 |
-
$method->void($payment);
|
287 |
-
$order->save();
|
288 |
-
$this->cancelOrder($order, $reason);
|
289 |
-
$this->logger->addLog("Void order payment {$order->getIncrementId()} was successful");
|
290 |
-
} catch (Exception $e) {
|
291 |
-
$this->holdOrder($order, 'Signifyd: Failed to void order payment');
|
292 |
-
$this->logger->addLog("Void order payment {$order->getIncrementId()} was not authorized:");
|
293 |
-
$this->logger->addLog($e->__toString());
|
294 |
-
return false;
|
295 |
-
}
|
296 |
-
|
297 |
-
return true;
|
298 |
-
}
|
299 |
-
*/
|
300 |
-
|
301 |
-
public function keepOrderOnHold($order, $reason)
|
302 |
-
{
|
303 |
-
if(is_null($order->getId())){
|
304 |
-
$this->logger->addLog("Order was not found");
|
305 |
-
return false;
|
306 |
-
}
|
307 |
-
|
308 |
-
if($order->getStatus() != Mage_Sales_Model_Order::STATE_HOLDED){
|
309 |
-
try{
|
310 |
-
$this->holdOrder($order, $reason);
|
311 |
-
}catch (Exception $e){
|
312 |
-
$this->logger->addLog($e->__toString());
|
313 |
-
}
|
314 |
-
}
|
315 |
-
$this->logger->addLog("Order {$order->getIncrementId()} was kept on hold because {$reason}");
|
316 |
-
|
317 |
-
return true;
|
318 |
-
}
|
319 |
-
|
320 |
-
public function cancelCloseOrder($order, $reason)
|
321 |
-
{
|
322 |
-
$status = $this->dataHelper->getOrderPaymentStatus($order);
|
323 |
-
if(is_null($order->getId())){
|
324 |
-
$this->logger->addLog("Order was not found");
|
325 |
-
return false;
|
326 |
-
}
|
327 |
-
if(!$order->canUnhold()){
|
328 |
-
$this->logger->addLog("Order {$order->getIncrementId()} can not be unheld");
|
329 |
-
return false;
|
330 |
-
}
|
331 |
-
try {
|
332 |
-
$order->unhold();
|
333 |
-
$order->addStatusHistoryComment("Signifyd: order unheld because $reason");
|
334 |
-
$order->save();
|
335 |
-
$this->logger->addLog("Order {$order->getIncrementId()} unheld in order to cancel it");
|
336 |
-
} catch (Exception $e){
|
337 |
-
|
338 |
-
$this->logger->addLog("Order {$order->getIncrementId()} can not be unheld");
|
339 |
-
$this->logger->addLog($e->__toString());
|
340 |
-
return false;
|
341 |
-
}
|
342 |
-
|
343 |
-
// if($status['authorize'] === true && $status['capture'] === false) {
|
344 |
-
// $this->logger->addLog("cancel close order5");
|
345 |
-
// $this->voidOrderPayment($order, $reason);
|
346 |
-
if($status['authorize'] === true && $status['capture'] === true) {
|
347 |
-
$result = $this->canNotCancel($order, $reason);
|
348 |
-
} else {
|
349 |
-
$result = $this->cancelOrder($order, $reason);
|
350 |
-
}
|
351 |
-
if($result === false){
|
352 |
-
$this->holdOrder($order, 'Fail to Cancel/Close Order');
|
353 |
-
}
|
354 |
-
return true;
|
355 |
-
}
|
356 |
-
|
357 |
-
public function checkStatus($order, $status)
|
358 |
-
{
|
359 |
-
$theOrder = Mage::getModel('sales/order')->load($order->getId());
|
360 |
-
return ($theOrder->getStatus() == $status)? true : false;
|
361 |
-
}
|
362 |
-
|
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');
|
369 |
-
// type refers to the need to by held or not held: 1 needs to be held, 2 needs to be not held
|
370 |
-
if($type == 1){
|
371 |
-
// needs to be true
|
372 |
-
if($holdStatus === true){
|
373 |
-
$caseModel->setMagentoStatusTo($case, Signifyd_Connect_Helper_Data::COMPLETED_STATUS);
|
374 |
-
}
|
375 |
-
} elseif($type == 2) {
|
376 |
-
// needs to be false
|
377 |
-
if($holdStatus === false){
|
378 |
-
$caseModel->setMagentoStatusTo($case, Signifyd_Connect_Helper_Data::COMPLETED_STATUS);
|
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 |
-
|
390 |
-
return true;
|
391 |
-
}
|
392 |
-
|
393 |
-
public function canNotCancel($order, $reason)
|
394 |
-
{
|
395 |
-
try {
|
396 |
-
$order->hold();
|
397 |
-
$order->addStatusHistoryComment("Signifyd: order held because $reason");
|
398 |
-
$order->addStatusHistoryComment("Signifyd: order can not be canceled because it has a sum already captured, Please do a manual refund.");
|
399 |
-
$order->save();
|
400 |
-
$this->logger->addLog("Order {$order->getIncrementId()} was held because {$reason}");
|
401 |
-
} catch (Exception $e){
|
402 |
-
$this->logger->addLog("Order {$order->getIncrementId()} could not be held: " . $e->__toString());
|
403 |
-
return false;
|
404 |
-
}
|
405 |
-
|
406 |
-
return true;
|
407 |
-
}
|
408 |
-
|
409 |
-
}
|
410 |
-
|
411 |
-
/* Filename: Order.php */
|
412 |
-
/* Location: ../app/code/Community/Signifyd/Connect/Model/Order.php */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Signifyd/Connect/Model/Order/Payment.php
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Payment Model
|
4 |
-
*
|
5 |
-
* @category Signifyd Connect
|
6 |
-
* @package Signifyd_Connect
|
7 |
-
* @author Signifyd
|
8 |
-
*/
|
9 |
-
class Signifyd_Connect_Model_Order_Payment extends Mage_Sales_Model_Order_Payment
|
10 |
-
{
|
11 |
-
public function registerCaptureNotification($amount, $skipFraudDetection = false)
|
12 |
-
{
|
13 |
-
Mage::log("Signifyd: Register capture notification", null, 'signifyd_connect.log');
|
14 |
-
parent::registerCaptureNotification($amount, $skipFraudDetection = false);
|
15 |
-
$order = $this->getOrder();
|
16 |
-
$isDeclined = Mage::helper('signifyd_connect')->isGuarantyDeclined($order);
|
17 |
-
if($isDeclined){
|
18 |
-
Mage::log("Signifyd: Register capture notification execute hold status and state: order {$order->getIncrementId()}", null, 'signifyd_connect.log');
|
19 |
-
$order->setState(Mage_Sales_Model_Order::STATE_HOLDED);
|
20 |
-
$order->setStatus(Mage_Sales_Model_Order::STATE_HOLDED);
|
21 |
-
$order->addStatusHistoryComment("Signifyd: order held because guarantee declined");
|
22 |
-
}
|
23 |
-
|
24 |
-
return $this;
|
25 |
-
}
|
26 |
-
}
|
27 |
-
|
28 |
-
/* Filename: Cron.php */
|
29 |
-
/* Location: ../app/code/Community/Signifyd/Connect/Model/Cron.php */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Signifyd/Connect/Model/System/Config/Source/Options/Accepted.php
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
class Signifyd_Connect_Model_System_Config_Source_Options_Accepted
|
5 |
-
{
|
6 |
-
public function toOptionArray()
|
7 |
-
{
|
8 |
-
return array(
|
9 |
-
array(
|
10 |
-
'value' => 1,
|
11 |
-
'label' => 'Do nothing'
|
12 |
-
),
|
13 |
-
array(
|
14 |
-
'value' => 2,
|
15 |
-
'label' => 'Capture and Invoice'
|
16 |
-
)
|
17 |
-
);
|
18 |
-
}
|
19 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Signifyd/Connect/Model/System/Config/Source/Options/Declined.php
DELETED
@@ -1,19 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
|
4 |
-
class Signifyd_Connect_Model_System_Config_Source_Options_Declined
|
5 |
-
{
|
6 |
-
public function toOptionArray()
|
7 |
-
{
|
8 |
-
return array(
|
9 |
-
array(
|
10 |
-
'value' => 1,
|
11 |
-
'label' => 'Do nothing'
|
12 |
-
),
|
13 |
-
array(
|
14 |
-
'value' => 2,
|
15 |
-
'label' => 'Cancel and Void'
|
16 |
-
)
|
17 |
-
);
|
18 |
-
}
|
19 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Signifyd/Connect/Model/System/Config/Source/Options/Negative.php
ADDED
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Signifyd_Connect_Model_System_Config_Source_Options_Negative
|
4 |
+
{
|
5 |
+
public function toOptionArray()
|
6 |
+
{
|
7 |
+
return array(
|
8 |
+
array(
|
9 |
+
'value' => 'nothing',
|
10 |
+
'label' => 'Nothing',
|
11 |
+
),
|
12 |
+
array(
|
13 |
+
'value' => 'hold',
|
14 |
+
'label' => 'Hold Order',
|
15 |
+
),
|
16 |
+
array(
|
17 |
+
'value' => 'cancel',
|
18 |
+
'label' => 'Cancel Order',
|
19 |
+
),
|
20 |
+
);
|
21 |
+
}
|
22 |
+
}
|
app/code/community/Signifyd/Connect/Model/System/Config/Source/Options/Positive.php
ADDED
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Signifyd_Connect_Model_System_Config_Source_Options_Positive
|
4 |
+
{
|
5 |
+
public function toOptionArray()
|
6 |
+
{
|
7 |
+
return array(
|
8 |
+
array(
|
9 |
+
'value' => 'nothing',
|
10 |
+
'label' => 'Nothing',
|
11 |
+
),
|
12 |
+
array(
|
13 |
+
'value' => 'unhold',
|
14 |
+
'label' => 'Unhold Order',
|
15 |
+
),
|
16 |
+
);
|
17 |
+
}
|
18 |
+
}
|
app/code/community/Signifyd/Connect/controllers/Adminhtml/SignifydController.php
CHANGED
@@ -19,4 +19,9 @@ class Signifyd_Connect_Adminhtml_SignifydController extends Mage_Adminhtml_Contr
|
|
19 |
);
|
20 |
}
|
21 |
|
|
|
|
|
|
|
|
|
|
|
22 |
}
|
19 |
);
|
20 |
}
|
21 |
|
22 |
+
public function sendAction()
|
23 |
+
{
|
24 |
+
Mage::helper('signifyd_connect')->bulkSend($this);
|
25 |
+
$this->_redirectReferer();
|
26 |
+
}
|
27 |
}
|
app/code/community/Signifyd/Connect/controllers/ConnectController.php
CHANGED
@@ -1,11 +1,5 @@
|
|
1 |
<?php
|
2 |
-
|
3 |
-
* Connect Controller
|
4 |
-
*
|
5 |
-
* @category Signifyd Connect
|
6 |
-
* @package Signifyd_Connect
|
7 |
-
* @author Signifyd
|
8 |
-
*/
|
9 |
class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Action
|
10 |
{
|
11 |
public $_request = array();
|
@@ -17,33 +11,52 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
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
|
31 |
-
|
|
|
32 |
}
|
33 |
|
34 |
-
public function
|
35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
36 |
}
|
37 |
|
38 |
public function enabled()
|
39 |
{
|
40 |
-
|
|
|
|
|
|
|
41 |
}
|
42 |
|
43 |
public function getUrl($code)
|
44 |
{
|
45 |
-
|
46 |
-
return 'https://api.signifyd.com/v2/cases/' . $code;
|
47 |
}
|
48 |
|
49 |
public function logErrors()
|
@@ -142,7 +155,6 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
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,
|
@@ -154,6 +166,9 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
154 |
Mage::log('ERROR ON WEBHOOK: ' . $e->__toString(), null, 'signifyd_connect.log');
|
155 |
}
|
156 |
}
|
|
|
|
|
|
|
157 |
}
|
158 |
|
159 |
public function validRequest($request, $hash)
|
@@ -222,59 +237,151 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
222 |
}
|
223 |
}
|
224 |
|
225 |
-
public function
|
226 |
{
|
227 |
-
if ($
|
228 |
-
$order
|
229 |
-
|
230 |
-
$order
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
231 |
|
232 |
if ($order && $order->getId()) {
|
233 |
-
$
|
234 |
-
|
|
|
|
|
|
|
235 |
$newGuarantee = null;
|
236 |
try{
|
237 |
-
|
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 |
-
|
249 |
-
|
250 |
-
|
251 |
-
if ($negativeAction ==
|
252 |
-
|
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 ==
|
265 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
278 |
}
|
279 |
}
|
280 |
}
|
@@ -428,20 +535,39 @@ class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Acti
|
|
428 |
|
429 |
}
|
430 |
|
431 |
-
|
432 |
-
|
433 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
434 |
public function apiAction()
|
435 |
{
|
436 |
if (!$this->enabled()) {
|
437 |
echo $this->getDisabledMessage();
|
|
|
438 |
return;
|
439 |
}
|
440 |
|
441 |
-
// Prevent
|
442 |
-
|
443 |
-
Mage::register('signifyd_action', 1);
|
444 |
-
}
|
445 |
|
446 |
$request = $this->getRawPost();
|
447 |
|
@@ -512,12 +638,4 @@ 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();
|
518 |
-
}
|
519 |
-
|
520 |
}
|
521 |
-
|
522 |
-
/* Filename: ConnectController.php */
|
523 |
-
/* Location: ../app/code/Community/Signifyd/Connect/controllers/ConnectController.php */
|
1 |
<?php
|
2 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
class Signifyd_Connect_ConnectController extends Mage_Core_Controller_Front_Action
|
4 |
{
|
5 |
public $_request = array();
|
11 |
public $_previousScore = false;
|
12 |
public $_unholdRetries = 0;
|
13 |
|
|
|
|
|
|
|
|
|
|
|
14 |
public function getApiKey()
|
15 |
{
|
16 |
return Mage::getStoreConfig('signifyd_connect/settings/key');
|
17 |
}
|
18 |
|
19 |
+
public function holdThreshold()
|
20 |
+
{
|
21 |
+
return (int)Mage::getStoreConfig('signifyd_connect/advanced/hold_orders_threshold', $this->_store_id);
|
22 |
}
|
23 |
|
24 |
+
public function canReviewHold()
|
25 |
+
{
|
26 |
+
return Mage::getStoreConfig('signifyd_connect/advanced/hold_orders', $this->_store_id);
|
27 |
+
}
|
28 |
+
|
29 |
+
public function canInvoice()
|
30 |
+
{
|
31 |
+
return Mage::getStoreConfig('signifyd_connect/advanced/invoice_orders', $this->_store_id);
|
32 |
+
}
|
33 |
+
|
34 |
+
public function notifyCustomer()
|
35 |
+
{
|
36 |
+
return Mage::getStoreConfig('signifyd_connect/advanced/invoice_orders_notify', $this->_store_id);
|
37 |
+
}
|
38 |
+
|
39 |
+
public function negativeGuaranteeAction()
|
40 |
+
{
|
41 |
+
return Mage::getStoreConfig('signifyd_connect/advanced/guarantee_negative_action', $this->_store_id);
|
42 |
+
}
|
43 |
+
|
44 |
+
public function positiveGuaranteeAction()
|
45 |
+
{
|
46 |
+
return Mage::getStoreConfig('signifyd_connect/advanced/guarantee_positive_action', $this->_store_id);
|
47 |
}
|
48 |
|
49 |
public function enabled()
|
50 |
{
|
51 |
+
$retrieve_scores = Mage::getStoreConfig('signifyd_connect/advanced/retrieve_score');
|
52 |
+
$enabled = Mage::getStoreConfig('signifyd_connect/settings/enabled');
|
53 |
+
|
54 |
+
return $enabled && $retrieve_scores;
|
55 |
}
|
56 |
|
57 |
public function getUrl($code)
|
58 |
{
|
59 |
+
return Mage::getStoreConfig('signifyd_connect/settings/url', $this->_store_id) . '/cases/' . $code;
|
|
|
60 |
}
|
61 |
|
62 |
public function logErrors()
|
155 |
try {
|
156 |
if (isset($this->_request['guaranteeDisposition'])) {
|
157 |
$case->setGuarantee($this->_request['guaranteeDisposition']);
|
|
|
158 |
|
159 |
if ($this->logRequest()) {
|
160 |
Mage::log('Set guarantee to ' . $this->_request['guaranteeDisposition'], null,
|
166 |
Mage::log('ERROR ON WEBHOOK: ' . $e->__toString(), null, 'signifyd_connect.log');
|
167 |
}
|
168 |
}
|
169 |
+
if ($this->logRequest()) {
|
170 |
+
Mage::log('No guarantee available', null, 'signifyd_connect.log');
|
171 |
+
}
|
172 |
}
|
173 |
|
174 |
public function validRequest($request, $hash)
|
237 |
}
|
238 |
}
|
239 |
|
240 |
+
public function holdOrder($order, $reason)
|
241 |
{
|
242 |
+
if ($order && $order->getId() && $order->canHold()) {
|
243 |
+
$order->hold();
|
244 |
+
$order->addStatusHistoryComment("Signifyd: order held because $reason");
|
245 |
+
$order->save();
|
246 |
+
|
247 |
+
if ($this->logRequest()) {
|
248 |
+
Mage::log('Order ' . $order->getId() . ' held because ' . $reason, null, 'signifyd_connect.log');
|
249 |
+
}
|
250 |
+
}
|
251 |
+
}
|
252 |
+
|
253 |
+
public function unholdOrder($order, $reason)
|
254 |
+
{
|
255 |
+
// in case we are in a order save retry, add a delay in order to avoid the current problem
|
256 |
+
switch ($this->_unholdRetries)
|
257 |
+
{
|
258 |
+
case 1: sleep(5); break;
|
259 |
+
case 2: sleep(10); break;
|
260 |
+
case 3: sleep(20); break;
|
261 |
+
}
|
262 |
+
$this->_unholdRetries++;
|
263 |
+
if ($order && $order->getId() && $order->canUnhold()) {
|
264 |
+
try {
|
265 |
+
$order->unhold();
|
266 |
+
$order->addStatusHistoryComment("Signifyd: order unheld because $reason");
|
267 |
+
$order->save();
|
268 |
+
|
269 |
+
if ($this->logRequest()) {
|
270 |
+
Mage::log('Order ' . $order->getId() . ' unheld because ' . $reason, null, 'signifyd_connect.log');
|
271 |
+
}
|
272 |
+
}
|
273 |
+
catch (Exception $exception)
|
274 |
+
{
|
275 |
+
Mage::log('Order ' . $order->getId() . ' unable to be saved because ' . $exception->getMessage(), null, 'signifyd_connect.log');
|
276 |
+
Mage::log('Order ' . $order->getId() . ' was not unheld. Retry attempt ' . $this->_unholdRetries, null, 'signifyd_connect.log');
|
277 |
+
// in case there was an error during order save operation, make a new attempt to save the order
|
278 |
+
if ($this->_unholdRetries < 3)
|
279 |
+
$this->unholdOrder($order, $reason);
|
280 |
+
}
|
281 |
+
}
|
282 |
+
// verify once again if the order have the right status, if the right status is not setup, retry the operation
|
283 |
+
if ($this->_unholdRetries <= 3) {
|
284 |
+
$reloaded_order = Mage::getModel('sales/order')->load($order->getId());
|
285 |
+
if ($reloaded_order->getState() === $order::STATE_HOLDED) {
|
286 |
+
Mage::log('Order ' . $order->getId() . ' was not unheld. Retry attempt ' . $this->_unholdRetries, null, 'signifyd_connect.log');
|
287 |
+
$this->unholdOrder($order, $reason);
|
288 |
+
}
|
289 |
+
}
|
290 |
+
}
|
291 |
+
|
292 |
+
public function cancelOrder($order, $reason)
|
293 |
+
{
|
294 |
+
if ($order->getState() === $order::STATE_HOLDED)
|
295 |
+
$this->unholdOrder($order, $reason);
|
296 |
+
if ($order && $order->getId() && $order->canCancel()) {
|
297 |
+
$order->cancel();
|
298 |
+
$order->addStatusHistoryComment("Signifyd: order canceled because $reason");
|
299 |
+
$order->save();
|
300 |
+
|
301 |
+
if ($this->logRequest()) {
|
302 |
+
Mage::log('Order ' . $order->getId() . ' cancelled because ' . $reason, null, 'signifyd_connect.log');
|
303 |
+
}
|
304 |
+
}
|
305 |
+
}
|
306 |
+
|
307 |
+
public function invoiceOrder($order)
|
308 |
+
{
|
309 |
+
if ($order && $order->getId() && $order->canInvoice() && $this->canInvoice()) {
|
310 |
+
$items = array();
|
311 |
+
foreach ($order->getAllItems() as $item) {
|
312 |
+
$items[$item->getId()] = $item->getQtyOrdered();
|
313 |
+
}
|
314 |
+
|
315 |
+
$invoice_api = Mage::getModel('sales/order_invoice_api');
|
316 |
+
|
317 |
+
try {
|
318 |
+
$invoice_id = $invoice_api->create($order->getIncrementId(), $items, null, false, true);
|
319 |
+
|
320 |
+
$invoice_api->capture($invoice_id);
|
321 |
+
} catch (Exception $e) {
|
322 |
+
if ($this->logErrors()) {
|
323 |
+
Mage::log('Exception while creating invoice: ' . $e->__toString(), null, 'signifyd_connect.log');
|
324 |
+
}
|
325 |
+
}
|
326 |
+
}
|
327 |
+
}
|
328 |
+
|
329 |
+
public function processAdditional($case, $original_status = false)
|
330 |
+
{
|
331 |
+
$order = $this->_order;
|
332 |
|
333 |
if ($order && $order->getId()) {
|
334 |
+
$threshold = $this->holdThreshold();
|
335 |
+
|
336 |
+
$negativeAction = $this->negativeGuaranteeAction();
|
337 |
+
$positiveAction = $this->positiveGuaranteeAction();
|
338 |
+
|
339 |
$newGuarantee = null;
|
340 |
try{
|
341 |
+
$newGuarantee = isset($this->_request ['guaranteeDisposition']) ? $this->_request ['guaranteeDisposition'] : null;
|
|
|
|
|
|
|
342 |
} catch(Exception $e){
|
343 |
if ($this->logErrors()) {
|
344 |
Mage::log('ERROR ON WEBHOOK: ' . $e->__toString(), null, 'signifyd_connect.log');
|
345 |
}
|
346 |
}
|
347 |
+
$newScore = $case->getScore();
|
348 |
+
|
349 |
// If a guarantee has been set, we no longer care about other actions
|
350 |
if (isset($newGuarantee) && $newGuarantee != $this->_previousGuarantee) {
|
351 |
+
if ($newGuarantee == 'DECLINED' && $negativeAction != 'nothing') {
|
352 |
+
if ($negativeAction == 'hold') {
|
353 |
+
$this->holdOrder($order, "guarantee declined");
|
354 |
+
} else if ($negativeAction == 'cancel') {
|
355 |
+
$this->cancelOrder($order, "guarantee declined");
|
|
|
|
|
|
|
|
|
|
|
|
|
356 |
} else {
|
|
|
357 |
Mage::log("Unknown action $negativeAction", null, 'signifyd_connect.log');
|
358 |
}
|
359 |
+
} else if ($newGuarantee == 'APPROVED' && $positiveAction != 'nothing') {
|
360 |
+
if ($positiveAction == 'unhold') {
|
361 |
+
$this->unholdOrder($order, "guarantee approved");
|
|
|
|
|
|
|
|
|
|
|
|
|
362 |
} else {
|
|
|
363 |
Mage::log("Unknown action $positiveAction", null, 'signifyd_connect.log');
|
364 |
}
|
365 |
}
|
366 |
+
} else if($this->_previousGuarantee == "N/A") {
|
367 |
+
if (!$original_status || $original_status == 'PENDING') {
|
368 |
+
if ($threshold && $this->_previousScore != $newScore
|
369 |
+
&& $newScore <= $threshold
|
370 |
+
&& $this->canReviewHold())
|
371 |
+
{
|
372 |
+
$this->holdOrder($order, "score below threshold");
|
373 |
+
}
|
374 |
+
} else if ($original_status) {
|
375 |
+
if ($this->_request['reviewDisposition'] == 'FRAUDULENT') {
|
376 |
+
if ($this->canReviewHold()) {
|
377 |
+
$this->holdOrder($order, "case review fraudulent");
|
378 |
+
}
|
379 |
+
} else if ($this->_request['reviewDisposition'] == 'GOOD') {
|
380 |
+
if ($this->canReviewHold()) {
|
381 |
+
$this->unholdOrder($order, "case review good");
|
382 |
+
}
|
383 |
+
}
|
384 |
+
}
|
385 |
}
|
386 |
}
|
387 |
}
|
535 |
|
536 |
}
|
537 |
|
538 |
+
public function retriesAction()
|
539 |
+
{
|
540 |
+
Mage::helper('signifyd_connect')->processRetryQueue();
|
541 |
+
}
|
542 |
+
|
543 |
+
public function sendAction()
|
544 |
+
{
|
545 |
+
try {
|
546 |
+
// This request handles the send action only if we are using an unsecured
|
547 |
+
// connection. Otherwise, it does nothing
|
548 |
+
if (!Mage::getStoreConfig('signifyd_connect/settings/enabled') ||
|
549 |
+
!Mage::getStoreConfig('signifyd_connect/advanced/use_unsecure_requests')
|
550 |
+
) {
|
551 |
+
Mage::log("Attempting to access send endpoint from frontend when it is currently disabled.", null, 'signifyd_connect.log');
|
552 |
+
return;
|
553 |
+
}
|
554 |
+
Mage::helper('signifyd_connect')->bulkSend($this);
|
555 |
+
} catch (Exception $e) {
|
556 |
+
Mage::log('Exception while sending: ' . $e->__toString(), null, 'signifyd_connect.log');
|
557 |
+
}
|
558 |
+
$this->_redirectReferer();
|
559 |
+
}
|
560 |
+
|
561 |
public function apiAction()
|
562 |
{
|
563 |
if (!$this->enabled()) {
|
564 |
echo $this->getDisabledMessage();
|
565 |
+
|
566 |
return;
|
567 |
}
|
568 |
|
569 |
+
// Prevent recursing on save
|
570 |
+
Mage::register('signifyd_action', 1);
|
|
|
|
|
571 |
|
572 |
$request = $this->getRawPost();
|
573 |
|
638 |
$this->complete();
|
639 |
}
|
640 |
|
|
|
|
|
|
|
|
|
|
|
641 |
}
|
|
|
|
|
|
app/code/community/Signifyd/Connect/etc/config.xml
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
<config>
|
4 |
<modules>
|
5 |
<Signifyd_Connect>
|
6 |
-
<version>3.15.
|
7 |
</Signifyd_Connect>
|
8 |
</modules>
|
9 |
<global>
|
@@ -13,11 +13,6 @@
|
|
13 |
<authorizenet>Signifyd_Connect_Model_Authnet</authorizenet>
|
14 |
</rewrite>
|
15 |
</paygate>
|
16 |
-
<sales>
|
17 |
-
<rewrite>
|
18 |
-
<order_payment>Signifyd_Connect_Model_Order_Payment</order_payment>
|
19 |
-
</rewrite>
|
20 |
-
</sales>
|
21 |
<signifyd_connect>
|
22 |
<class>Signifyd_Connect_Model</class>
|
23 |
<resourceModel>signifyd_connect_resource</resourceModel>
|
@@ -74,28 +69,8 @@
|
|
74 |
</signifyd_connect>
|
75 |
</observers>
|
76 |
</model_save_after>
|
77 |
-
<sales_order_place_after>
|
78 |
-
<observers>
|
79 |
-
<signifyd_connect>
|
80 |
-
<class>signifyd_connect/observer</class>
|
81 |
-
<method>putOrderOnHold</method>
|
82 |
-
</signifyd_connect>
|
83 |
-
</observers>
|
84 |
-
</sales_order_place_after>
|
85 |
</events>
|
86 |
</global>
|
87 |
-
<crontab>
|
88 |
-
<jobs>
|
89 |
-
<signifyd_retry>
|
90 |
-
<schedule>
|
91 |
-
<cron_expr>*/30 * * * *</cron_expr>
|
92 |
-
</schedule>
|
93 |
-
<run>
|
94 |
-
<model>signifyd_connect/cron::retry</model>
|
95 |
-
</run>
|
96 |
-
</signifyd_retry>
|
97 |
-
</jobs>
|
98 |
-
</crontab>
|
99 |
<frontend>
|
100 |
<routers>
|
101 |
<signifyd_connect>
|
@@ -114,6 +89,8 @@
|
|
114 |
<url>https://api.signifyd.com/v2</url>
|
115 |
</settings>
|
116 |
<advanced>
|
|
|
|
|
117 |
<hold_orders>0</hold_orders>
|
118 |
<hold_orders_threshold>500</hold_orders_threshold>
|
119 |
<invoice_orders>0</invoice_orders>
|
@@ -209,6 +186,14 @@
|
|
209 |
</signifyd_connect>
|
210 |
</observers>
|
211 |
</core_block_abstract_to_html_before>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
212 |
</events>
|
213 |
</adminhtml>
|
214 |
</config>
|
3 |
<config>
|
4 |
<modules>
|
5 |
<Signifyd_Connect>
|
6 |
+
<version>3.15.1</version>
|
7 |
</Signifyd_Connect>
|
8 |
</modules>
|
9 |
<global>
|
13 |
<authorizenet>Signifyd_Connect_Model_Authnet</authorizenet>
|
14 |
</rewrite>
|
15 |
</paygate>
|
|
|
|
|
|
|
|
|
|
|
16 |
<signifyd_connect>
|
17 |
<class>Signifyd_Connect_Model</class>
|
18 |
<resourceModel>signifyd_connect_resource</resourceModel>
|
69 |
</signifyd_connect>
|
70 |
</observers>
|
71 |
</model_save_after>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
</events>
|
73 |
</global>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
<frontend>
|
75 |
<routers>
|
76 |
<signifyd_connect>
|
89 |
<url>https://api.signifyd.com/v2</url>
|
90 |
</settings>
|
91 |
<advanced>
|
92 |
+
<retrieve_score>0</retrieve_score>
|
93 |
+
<show_scores>0</show_scores>
|
94 |
<hold_orders>0</hold_orders>
|
95 |
<hold_orders_threshold>500</hold_orders_threshold>
|
96 |
<invoice_orders>0</invoice_orders>
|
186 |
</signifyd_connect>
|
187 |
</observers>
|
188 |
</core_block_abstract_to_html_before>
|
189 |
+
<core_block_abstract_prepare_layout_before>
|
190 |
+
<observers>
|
191 |
+
<signifyd_connect>
|
192 |
+
<model>signifyd_connect/observer</model>
|
193 |
+
<method>coreBlockAbstractPrepareLayoutBefore</method>
|
194 |
+
</signifyd_connect>
|
195 |
+
</observers>
|
196 |
+
</core_block_abstract_prepare_layout_before>
|
197 |
</events>
|
198 |
</adminhtml>
|
199 |
</config>
|
app/code/community/Signifyd/Connect/etc/system.xml
CHANGED
@@ -17,7 +17,7 @@
|
|
17 |
<show_in_store>1</show_in_store>
|
18 |
<groups>
|
19 |
<settings translate="label">
|
20 |
-
<label>General</label>
|
21 |
<frontend_type>text</frontend_type>
|
22 |
<sort_order>2</sort_order>
|
23 |
<show_in_default>1</show_in_default>
|
@@ -32,71 +32,160 @@
|
|
32 |
<show_in_default>1</show_in_default>
|
33 |
<show_in_website>1</show_in_website>
|
34 |
<show_in_store>1</show_in_store>
|
|
|
35 |
</enabled>
|
36 |
<key translate="label">
|
37 |
-
<label>API Key</label>
|
38 |
<frontend_type>text</frontend_type>
|
39 |
<sort_order>20</sort_order>
|
40 |
<show_in_default>1</show_in_default>
|
41 |
<show_in_website>1</show_in_website>
|
42 |
<show_in_store>1</show_in_store>
|
|
|
43 |
</key>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
44 |
</fields>
|
45 |
</settings>
|
46 |
<advanced>
|
47 |
-
<label>
|
48 |
<frontend_type>text</frontend_type>
|
49 |
<sort_order>2</sort_order>
|
50 |
<show_in_default>1</show_in_default>
|
51 |
<show_in_website>1</show_in_website>
|
52 |
<show_in_store>1</show_in_store>
|
53 |
<fields>
|
54 |
-
<
|
55 |
-
<label>
|
56 |
<frontend_type>select</frontend_type>
|
57 |
-
<source_model>
|
58 |
-
<sort_order>
|
59 |
<show_in_default>1</show_in_default>
|
60 |
<show_in_website>1</show_in_website>
|
61 |
<show_in_store>1</show_in_store>
|
62 |
-
|
63 |
-
|
64 |
-
|
|
|
65 |
<frontend_type>select</frontend_type>
|
66 |
-
<source_model>
|
67 |
-
<sort_order>
|
68 |
<show_in_default>1</show_in_default>
|
69 |
<show_in_website>1</show_in_website>
|
70 |
<show_in_store>1</show_in_store>
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
<show_in_website>1</show_in_website>
|
80 |
-
<show_in_store>1</show_in_store>
|
81 |
-
<fields>
|
82 |
-
<url translate="label">
|
83 |
-
<label>Webhook URL</label>
|
84 |
-
<frontend_type>label</frontend_type>
|
85 |
-
<sort_order>30</sort_order>
|
86 |
<show_in_default>1</show_in_default>
|
87 |
<show_in_website>1</show_in_website>
|
88 |
<show_in_store>1</show_in_store>
|
89 |
-
<
|
90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
</fields>
|
92 |
-
</
|
93 |
<log translate="label">
|
94 |
-
<label>
|
95 |
<frontend_type>text</frontend_type>
|
96 |
-
<sort_order>
|
97 |
<show_in_default>1</show_in_default>
|
98 |
<show_in_website>1</show_in_website>
|
99 |
<show_in_store>1</show_in_store>
|
|
|
100 |
<fields>
|
101 |
<request>
|
102 |
<label>Log requests</label>
|
17 |
<show_in_store>1</show_in_store>
|
18 |
<groups>
|
19 |
<settings translate="label">
|
20 |
+
<label>General Settings</label>
|
21 |
<frontend_type>text</frontend_type>
|
22 |
<sort_order>2</sort_order>
|
23 |
<show_in_default>1</show_in_default>
|
32 |
<show_in_default>1</show_in_default>
|
33 |
<show_in_website>1</show_in_website>
|
34 |
<show_in_store>1</show_in_store>
|
35 |
+
<comment><![CDATA[This enables or disables the Signifyd extension]]></comment>
|
36 |
</enabled>
|
37 |
<key translate="label">
|
38 |
+
<label>Signifyd API Key</label>
|
39 |
<frontend_type>text</frontend_type>
|
40 |
<sort_order>20</sort_order>
|
41 |
<show_in_default>1</show_in_default>
|
42 |
<show_in_website>1</show_in_website>
|
43 |
<show_in_store>1</show_in_store>
|
44 |
+
<comment><![CDATA[You will find this in <a href="http://signifyd.com/settings/teams">http://signifyd.com/settings/teams</a> after you create a Signifyd account]]></comment>
|
45 |
</key>
|
46 |
+
<url translate="label">
|
47 |
+
<label>Signifyd API URL</label>
|
48 |
+
<frontend_type>text</frontend_type>
|
49 |
+
<sort_order>30</sort_order>
|
50 |
+
<show_in_default>1</show_in_default>
|
51 |
+
<show_in_website>1</show_in_website>
|
52 |
+
<show_in_store>1</show_in_store>
|
53 |
+
<comment><![CDATA[This is set by default. Don’t change unless asked to do so.]]></comment>
|
54 |
+
</url>
|
55 |
</fields>
|
56 |
</settings>
|
57 |
<advanced>
|
58 |
+
<label>Advanced</label>
|
59 |
<frontend_type>text</frontend_type>
|
60 |
<sort_order>2</sort_order>
|
61 |
<show_in_default>1</show_in_default>
|
62 |
<show_in_website>1</show_in_website>
|
63 |
<show_in_store>1</show_in_store>
|
64 |
<fields>
|
65 |
+
<retrieve_score translate="label">
|
66 |
+
<label>Retrieve Signifyd scores</label>
|
67 |
<frontend_type>select</frontend_type>
|
68 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
69 |
+
<sort_order>50</sort_order>
|
70 |
<show_in_default>1</show_in_default>
|
71 |
<show_in_website>1</show_in_website>
|
72 |
<show_in_store>1</show_in_store>
|
73 |
+
<comment><model>signifyd_connect/link</model></comment>
|
74 |
+
</retrieve_score>
|
75 |
+
<show_scores translate="label">
|
76 |
+
<label>Show Scores in Magento Order Grid</label>
|
77 |
<frontend_type>select</frontend_type>
|
78 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
79 |
+
<sort_order>55</sort_order>
|
80 |
<show_in_default>1</show_in_default>
|
81 |
<show_in_website>1</show_in_website>
|
82 |
<show_in_store>1</show_in_store>
|
83 |
+
<depends><retrieve_score>1</retrieve_score></depends>
|
84 |
+
<comment><![CDATA[Your scores will show in the Magento Order Grid once enabled]]></comment>
|
85 |
+
</show_scores>
|
86 |
+
<hold_orders translate="label">
|
87 |
+
<label>Place hold on orders below score threshold</label>
|
88 |
+
<frontend_type>select</frontend_type>
|
89 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
90 |
+
<sort_order>60</sort_order>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
<show_in_default>1</show_in_default>
|
92 |
<show_in_website>1</show_in_website>
|
93 |
<show_in_store>1</show_in_store>
|
94 |
+
<depends><retrieve_score>1</retrieve_score></depends>
|
95 |
+
<comment><![CDATA[Orders will be placed on hold below a threshold specified by you. We recommend a threshold of 500. Clicking Thumbs Up will Unhold the Order and Thumbs down will leave the Order on Hold. ]]></comment>
|
96 |
+
</hold_orders>
|
97 |
+
<hold_orders_threshold translate="label">
|
98 |
+
<label>Hold score threshold</label>
|
99 |
+
<frontend_type>text</frontend_type>
|
100 |
+
<sort_order>70</sort_order>
|
101 |
+
<show_in_default>1</show_in_default>
|
102 |
+
<show_in_website>1</show_in_website>
|
103 |
+
<show_in_store>1</show_in_store>
|
104 |
+
<comment><![CDATA[0-1000. Threshold at which orders get put on HOLD. Default is 500.]]></comment>
|
105 |
+
<depends><hold_orders>1</hold_orders></depends>
|
106 |
+
</hold_orders_threshold>
|
107 |
+
<show_guarantee translate="label">
|
108 |
+
<label>Show Guarantee status in Magento Order Grid</label>
|
109 |
+
<frontend_type>select</frontend_type>
|
110 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
111 |
+
<sort_order>80</sort_order>
|
112 |
+
<show_in_default>1</show_in_default>
|
113 |
+
<show_in_website>1</show_in_website>
|
114 |
+
<show_in_store>1</show_in_store>
|
115 |
+
<comment><![CDATA[You will be able to view current guarantee status in the Magento Order Grid when enabled]]></comment>
|
116 |
+
</show_guarantee>
|
117 |
+
<guarantee_negative_action translate="label">
|
118 |
+
<label>Action on Guarantee Decline</label>
|
119 |
+
<frontend_type>select</frontend_type>
|
120 |
+
<source_model>signifyd_connect/system_config_source_options_negative</source_model>
|
121 |
+
<sort_order>85</sort_order>
|
122 |
+
<show_in_default>1</show_in_default>
|
123 |
+
<show_in_website>1</show_in_website>
|
124 |
+
<show_in_store>1</show_in_store>
|
125 |
+
<comment><![CDATA[Which action to take on orders when the guarantee is declined]]></comment>
|
126 |
+
</guarantee_negative_action>
|
127 |
+
<guarantee_positive_action translate="label">
|
128 |
+
<label>Action on Guarantee Approve</label>
|
129 |
+
<frontend_type>select</frontend_type>
|
130 |
+
<source_model>signifyd_connect/system_config_source_options_positive</source_model>
|
131 |
+
<sort_order>86</sort_order>
|
132 |
+
<show_in_default>1</show_in_default>
|
133 |
+
<show_in_website>1</show_in_website>
|
134 |
+
<show_in_store>1</show_in_store>
|
135 |
+
<comment><![CDATA[Which action to take on orders when the guarantee is approved]]></comment>
|
136 |
+
</guarantee_positive_action>
|
137 |
+
<invoice_orders translate="label">
|
138 |
+
<label>Invoice orders after receiving Signifyd Scores</label>
|
139 |
+
<frontend_type>select</frontend_type>
|
140 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
141 |
+
<sort_order>90</sort_order>
|
142 |
+
<show_in_default>0</show_in_default>
|
143 |
+
<show_in_website>0</show_in_website>
|
144 |
+
<show_in_store>0</show_in_store>
|
145 |
+
<depends><retrieve_score>1</retrieve_score></depends>
|
146 |
+
<comment><![CDATA[Attempt to invoice (and capture) orders after receiving a Signifyd score where the order has not been held. If the order cannot be invoiced, no action will be taken. This will invoice the whole order, so is not suitable for workflows where partial invoices are needed.]]></comment>
|
147 |
+
</invoice_orders>
|
148 |
+
<invoice_orders_notify translate="label">
|
149 |
+
<label>Notify customer</label>
|
150 |
+
<frontend_type>select</frontend_type>
|
151 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
152 |
+
<sort_order>95</sort_order>
|
153 |
+
<show_in_default>1</show_in_default>
|
154 |
+
<show_in_website>1</show_in_website>
|
155 |
+
<show_in_store>1</show_in_store>
|
156 |
+
<comment><![CDATA[Send email notification to customers after invoicing orders]]></comment>
|
157 |
+
<depends><invoice_orders>1</invoice_orders></depends>
|
158 |
+
</invoice_orders_notify>
|
159 |
+
<use_unsecure_requests>
|
160 |
+
<label>Use Unsecure Requests</label>
|
161 |
+
<frontend_type>select</frontend_type>
|
162 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
163 |
+
<sort_order>100</sort_order>
|
164 |
+
<show_in_default>1</show_in_default>
|
165 |
+
<show_in_website>1</show_in_website>
|
166 |
+
<show_in_store>1</show_in_store>
|
167 |
+
<comment><![CDATA[For backend actions (such as bulk-send from the order grid), use the frontend controller instead of the secure backend controller. This is intended to work around some potential issues. Use only when necessary, and set it back once the actions are completed]]></comment>
|
168 |
+
</use_unsecure_requests>
|
169 |
+
<enable_payment_updates>
|
170 |
+
<label>Enable payment updates</label>
|
171 |
+
<frontend_type>select</frontend_type>
|
172 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
173 |
+
<sort_order>110</sort_order>
|
174 |
+
<show_in_default>1</show_in_default>
|
175 |
+
<show_in_website>1</show_in_website>
|
176 |
+
<show_in_store>1</show_in_store>
|
177 |
+
<comment><![CDATA[Enable update request when new payment information is received by a payment service]]></comment>
|
178 |
+
</enable_payment_updates>
|
179 |
</fields>
|
180 |
+
</advanced>
|
181 |
<log translate="label">
|
182 |
+
<label>Log Settings</label>
|
183 |
<frontend_type>text</frontend_type>
|
184 |
+
<sort_order>3</sort_order>
|
185 |
<show_in_default>1</show_in_default>
|
186 |
<show_in_website>1</show_in_website>
|
187 |
<show_in_store>1</show_in_store>
|
188 |
+
<comment><![CDATA[Note: You must also enable logging for the site. You can find the setting in Configuration->Advanced->Developer->Log Settings]]></comment>
|
189 |
<fields>
|
190 |
<request>
|
191 |
<label>Log requests</label>
|
app/code/community/Signifyd/Connect/sql/signifyd_connect_setup/mysql4-upgrade-3.14.0-3.15.0.php
DELETED
@@ -1,10 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
try {
|
4 |
-
$this->startSetup();
|
5 |
-
$this->register();
|
6 |
-
$this->run("ALTER TABLE `{$this->getTable('signifyd_connect_case')}` ADD `magento_status` VARCHAR( 64 ) NOT NULL DEFAULT 'waiting_submission'");
|
7 |
-
$this->endSetup();
|
8 |
-
} catch (Exception $e) {
|
9 |
-
Mage::log('Signifyd_Connect upgrade: ' . $e->__toString(), null, 'signifyd_connect.log');
|
10 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Signifyd_Connect</name>
|
4 |
-
<version>3.15.
|
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>2016-09-
|
14 |
-
<time>
|
15 |
-
<contents><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="eed53eab290b65da639e22fe195f9fcb"/></dir><file name="Order.php" hash="89619b9c5c9795e98e7637b4c5396888"/></dir></dir><file name="Renderer.php" hash="dce3cc400745afa31806e7de6dbf9d02"
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Signifyd_Connect</name>
|
4 |
+
<version>3.15.1</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>2016-09-13</date>
|
14 |
+
<time>08:36:24</time>
|
15 |
+
<contents><target name="mageetc"><dir name="modules"><file name="Signifyd_Connect.xml" hash="0f6a1fe90c078db114746aa381208982"/></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="eed53eab290b65da639e22fe195f9fcb"/></dir><file name="Order.php" hash="89619b9c5c9795e98e7637b4c5396888"/></dir></dir><file name="Renderer.php" hash="dce3cc400745afa31806e7de6dbf9d02"/></dir><dir name="Helper"><file name="Data.php" hash="ca0f88bc35ef0954e3846623d40cf5e9"/></dir><dir name="Model"><file name="Authnet.php" hash="876c96e26693d26adf194e889c1a802e"/><file name="Case.php" hash="76d681cf954c7c71eeb034d7de25c7c2"/><file name="Cron.php" hash="98bc248c7ab392d6ea47e38be3a4f76e"/><file name="Link.php" hash="7136232749510f192cd589c1c905498c"/><file name="Observer.php" hash="0289a316455aebb3bc1a676dfe787532"/><dir name="Resource"><dir name="Case"><file name="Collection.php" hash="a1ed45e9bde8f823384009c6d1a6be64"/></dir><file name="Case.php" hash="19ae43ac4339a6efa4c5399b7524c61a"/><dir name="Retries"><file name="Collection.php" hash="04e0aa690b9887b7c24c48c92adc62b5"/></dir><file name="Retries.php" hash="ab59ce50d0b089a0b001250d49377719"/></dir><file name="Retries.php" hash="3a945234c76244d2d8cccf8a2b67309c"/><file name="Setup.php" hash="89df3e016fa0a582f9eb94c55dee1ede"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Options"><file name="Negative.php" hash="60a03a97d0a093ad8296996480f696dd"/><file name="Positive.php" hash="c08bd01028744afa638121f06178c5c1"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="SignifydController.php" hash="afde33d7b0149760524084facd926621"/></dir><file name="ConnectController.php" hash="6467925749dc28121ef1d62e8d6354a3"/></dir><dir name="etc"><file name="adminhtml.xml" hash="bfe6943cf5eab707f64694f555b9f2c1"/><file name="config.xml" hash="0f3e156c9f95045c4cff2e20eb8d1919"/><file name="system.xml" hash="f9774d7bc239768837ee12b9d2a76d30"/></dir><dir name="sql"><dir name="signifyd_connect_setup"><file name="mysql4-install-3.1.1.php" hash="119e423f67c7e47c345374eddbb1dfe5"/><file name="mysql4-install-3.12.0.php" hash="3dd59c1e20105629157dfe134193dcb9"/><file name="mysql4-install-3.3.0.php" hash="455c92d22c1e5c55661f050ca19f82f6"/><file name="mysql4-install-3.4.0.php" hash="383226cc656aa9e0db194178be7dfc10"/><file name="mysql4-install-3.4.5.php" hash="f8eaec5f235b7bb16777720e0e999268"/><file name="mysql4-install-3.7.0.php" hash="cdc3701ad0793bc360addfec51466605"/><file name="mysql4-install-3.8.0.php" hash="f74e65329444df9b088c00d5837f4593"/><file name="mysql4-upgrade-3.10.0-3.10.1.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.10.1-3.11.0.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.11.0-3.11.1.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.11.1-3.12.0.php" hash="703ddd745468f40c75758cd8066d63fe"/><file name="mysql4-upgrade-3.12.0-3.13.0.php" hash="333f7116c34aa765f4e7efaf8be5feda"/><file name="mysql4-upgrade-3.2.0-3.2.1.php" hash="26f702c9c4d38873e0050657b003ffd4"/><file name="mysql4-upgrade-3.2.1-3.2.2.php" hash="4a5fe35d03268d0a8448a1accaf64958"/><file name="mysql4-upgrade-3.2.2-3.2.3.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.2.3-3.3.0.php" hash="7b5c5ae2ac87cc7fef2ac99bc28b27ae"/><file name="mysql4-upgrade-3.3.0-3.4.0.php" hash="8faecf3097eaf538fece8fe91b575356"/><file name="mysql4-upgrade-3.4.0-3.4.1.php" hash="11ad4be0af110283e2ce34b1315721f1"/><file name="mysql4-upgrade-3.4.1-3.4.2.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.4.2-3.4.3.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.4.3-3.4.4.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.4.4-3.4.5.php" hash="5320d366b6f72258f4e27a046ba04c3c"/><file name="mysql4-upgrade-3.4.5-3.4.6.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.4.6-3.4.7.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.4.7-3.4.8.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.4.8-3.5.0.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.5.0-3.5.1.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.5.1-3.5.2.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.5.2-3.5.3.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.5.3-3.6.0.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.6.0-3.7.0.php" hash="1462d8ccaf0d0480d31a47afb3a00f63"/><file name="mysql4-upgrade-3.7.0-3.8.0.php" hash="758799806d039277d8d509e017c64535"/><file name="mysql4-upgrade-3.8.0-3.9.0.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/><file name="mysql4-upgrade-3.9.0-3.10.0.php" hash="51c0d94a292f36f373d1a14eb1ce6468"/></dir></dir></dir></dir></target></contents>
|
16 |
<compatible/>
|
17 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
18 |
</package>
|