Статус «Подозреваемого мошенничества» после совершения платежа в magento? - PullRequest
0 голосов
/ 21 марта 2012

Я сделал свой пользовательский модуль в magento, в котором я установил скидку динамически. Я использую следующий код для этого. Но когда я завершил процедуру оплаты, статус заказа должен быть «processing», а вместо этого статус заказа становится «Suspected Fraud».

Пожалуйста, дайте мне знать, что я сделал неправильно. Хотя скидка успешно добавлена ​​в информацию заказа.

$order->setData('base_discount_amount', $discountAmt);

$order->setData('base_discount_canceled', $discountAmt);

$order->setData('base_discount_invoiced', $discountAmt);

$order->setData('base_discount_refunded', $discountAmt);

$order->setData('discount_description', 'Affliate Discount');

$order->setData('discount_amount', $discountAmt);

$order->setData('discount_canceled', $discountAmt);

$order->setData('discount_invoiced', $discountAmt);

$order->setData('discount_refunded', $discountAmt);

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Это не так просто сказать по вашему вопросу.Это может зависеть от того, какой платежный шлюз / метод Magento вы используете (Paypal, Authorize.net, Saved Card и т. Д.), Поскольку каждый из них может реализовывать различные методы для авторизации транзакций, захвата и т. Д.

Взгляните на значение по умолчанию Mage_Sales_Model_Order_Payment класс.При этом происходит несколько вызовов метода, называемого $this->getIsFraudDetected(), при попытке получить средства для транзакции и установить статус заказа на Подозреваемое мошенничество, если true примерно так:

if ($this->getIsFraudDetected()) {
    $status = Mage_Sales_Model_Order::STATUS_FRAUD;
}

В классе платежей по умолчанию мошенничествоФлаг устанавливается в методе registerCaptureNotification(), когда метод _isCaptureFinal() возвращает false:

if ($this->_isCaptureFinal($amount)) {
    $invoice = $order->prepareInvoice()->register();
    $order->addRelatedObject($invoice);
    $this->setCreatedInvoice($invoice);
} else {
    $this->setIsFraudDetected(true);
    $this->_updateTotals(array('base_amount_paid_online' => $amount));
}

Методы _isCaptureFinal() возвращают false, когда сумма, которую вы пытаетесь получить, не равна точноостаток остатка заказа.

/**
 * Decide whether authorization transaction may close (if the amount to capture will cover entire order)
 * @param float $amountToCapture
 * @return bool
 */
protected function _isCaptureFinal($amountToCapture)
{
    $amountToCapture = $this->_formatAmount($amountToCapture, true);
    $orderGrandTotal = $this->_formatAmount($this->getOrder()->getBaseGrandTotal(), true);
    if ($orderGrandTotal == $this->_formatAmount($this->getBaseAmountPaid(), true) + $amountToCapture) {
        if (false !== $this->getShouldCloseParentTransaction()) {
            $this->setShouldCloseParentTransaction(true);
        }
        return true;
    }
    return false;
}

Проверьте свои итоги (запрошенный захват против непогашенного остатка), если используется метод оплаты по умолчанию, или посмотрите на реализацию методов оплаты и используйте приведенную выше информацию для отладки своего кода ...

0 голосов
/ 09 июля 2017

Мне требуется много времени, чтобы решить эту ошибку 0.10,

Поэтому я поделюсь с вами, в чем заключалась проблема в моем случае:

In:

/ app / code / core / Mage / Paypal / Model / Cart.php

Существует функция _validate, в которой PayPal проверяет разницу между $sum и $referenceAmount.

Я заменяю его на:

if (sprintf('%.4F', $sum) == sprintf('%.4F', $referenceAmount)) {
    $this->_areItemsValid = true;
}

Я нашел его в резервной копии Magento перед обновлением.

...