Это не так просто сказать по вашему вопросу.Это может зависеть от того, какой платежный шлюз / метод 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;
}
Проверьте свои итоги (запрошенный захват против непогашенного остатка), если используется метод оплаты по умолчанию, или посмотрите на реализацию методов оплаты и используйте приведенную выше информацию для отладки своего кода ...