在magento中完成付款后的“涉嫌欺诈”状态?

Posted

技术标签:

【中文标题】在magento中完成付款后的“涉嫌欺诈”状态?【英文标题】:"Suspected Fraud" status after compeleting the payment in magento? 【发布时间】:2012-04-05 23:41:51 【问题描述】:

我在 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);

【问题讨论】:

查看suspected-fraud-status-after-compeleting-the-payment-in-magento 【参考方案1】:

从你的问题中很难看出。这可能取决于您使用的 Magento 支付网关/方法(Paypal、Authorize.net、Saved Card 等),因为每个都可以实现不同的交易授权、捕获等方法。

看看默认的Mage_Sales_Model_Order_Payment 类。当尝试为交易获取资金并将订单状态设置为可疑欺诈时,如果true 像这样,则会多次调用名为$this->getIsFraudDetected() 的方法:

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

在默认的 Payment 类中,当 _isCaptureFinal() 方法返回 false 时,registerCaptureNotification() 方法中设置了欺诈标志:

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;

如果使用默认付款方式,请检查您的总数(请求的捕获与未结余额)或查看您的付款方式实施并使用上述信息来调试您的代码...

【讨论】:

我已将“false”标志更改为 True。现在它对我有用。但是,有没有最好的方法来做这件事?实际上,我在使用 Paypal 时遇到了这个问题,因为我收到了“涉嫌欺诈”的订单状态,并且由于这种状态,我的客户在通过 Paypal 付款后无法收到订单电子邮件。 -- 感谢您的建议。【参考方案2】:

解决这个0.10的错误我花了很长时间,

所以我将与您分享我的问题是什么:

在:

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

有一个_validate 函数,PayPal 在其中检查$sum$referenceAmount 之间的差异。

我将其替换为:

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

我在升级前的 Magento 备份中找到了它。

【讨论】:

以上是关于在magento中完成付款后的“涉嫌欺诈”状态?的主要内容,如果未能解决你的问题,请参考以下文章

当付款通过PayPal进入时,如何阻止magento将付款状态设置为“已完成”

即使 PayPal 付款失败,Magento 订单状态也会更新为“处理中”

如何更改 Magento 订单状态默认流程?

Magento + Paypal - 订单状态停留在“付款审查”

在magento上拆分付款流程?

Magento 中的 Paypal 状态