Hey guys sorry for the late response was just directed to this thread again.
IF you are still having issue please let me know which version. I have a ticket that I put in when this issue started and team fixed and closed the issue in June. I am on the late freight obviously. :/ apologies for that.
Now you have tax 20% so total cost will have some rounding effect.
When IPN is received IPN checks for order amount by recalculating.
here as no rounding is considered hence values of payment captured and that should have been varies by less then .01
But code assumes its different and so it treats this order as a suspected Fraud.
Hope this helps.
Solution:
1. Do not use products with cost on second decimal.
2. If this cant be avoided then as provided in above post use this
$orderGrandTotal = $this->getOrder()->getBaseGrandTotal();
if (abs($orderGrandTotal - ($this->getBaseAmountPaid() + $amountToCapture)) < 0.01 ) {
I have also some fraud orders with a 1.4.1.1 and also 1.6. version. The problem is that paypal recalculates the order and takes the price without tax for each cart item and adds the tax_cart.
See the example below: 52,21([amount] => 43.87 + [tax] => 8.34) vs. 52,22 (Paypal calculation: [amount_1] => 23.85 + [amount_2] => 11.32 + [amount_3] => 8.71 + [tax_cart] => 8.34). I post this also in the german forum: http://www.magentocommerce.com/boards/viewthread/236236/
A workaround for the 1.6 Version is to deactivate the ‘Transfer Cart Line Items’-option for ‘Website Payments Standard’. Now you get the right price on the paypal page but you haven’t the cart view with the products anymore.
The discussed bugfixes didn’t work so we just deactivated the fraud checks.
Quick & Dirty in Magento 1.5.1.0:
We just commented out all setIsFraudDetected(true) calls…
app/code/core/Mage/Paypal/Model/Ipn.php (around line 623):
if ($this->_info->isPaymentReviewRequired($payment)) {
$payment->setIsTransactionPending(true);
if ($fraudFilters) {
//$payment->setIsFraudDetected(true);
}
}
app/code/core/Mage/Sales/Model/Order/Payment.php (around line 343):
// register new capture
if (!$invoice) {
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));
}
}