在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 订单状态也会更新为“处理中”