THere was one step missing let me summarize the entire process again.
1. Go to: \app\code\core\Mage\Paypal\Controller\Express\Abstract.php
and search in returnAction() for:
$this->_redirect('*/*/review');
There you have to change:
$this->_redirect('*/*/review');
to:
$this->_redirect('*/*/placeOrder');
2. Go to: \app\code\core\Mage\Paypal\Model\Config.php and change the:
public function getExpressCheckoutStartUrl($token)
{
return $this->getPaypalUrl(array(
'cmd' => '_express-checkout',
'token' => $token,
));
}
to:
public function getExpressCheckoutStartUrl($token)
{
return $this->getPaypalUrl(array(
'cmd' => '_express-checkout',
'useraction' => 'commit',
'token' => $token,
));
}
3. With the above two changes you will still be taken to the review page and have to agree to the terms and conditions, to avoid this go to:
/app/code/core/Mage/Paypal/Controller/Express/Abstract.php
Search for :
public function placeOrderAction()
{
try {
$requiredAgreements = Mage::helper(‘checkout’)->getRequiredAgreementIds();
if ($requiredAgreements) {
$postedAgreements = array_keys($this->getRequest()->getPost(‘agreement’, array()));
if (array_diff($requiredAgreements, $postedAgreements)) {
Mage::throwException(Mage::helper(‘paypal’)->__(‘Please agree to all the terms and conditions before placing the order.’));
}
}
Comment out the following lines with a simple // at the beginning :
//if (array_diff($requiredAgreements, $postedAgreements)) {
// Mage::throwException(Mage::helper(‘paypal’)->__(‘Please agree to all the terms and conditions before placing the order.’));
// }
The only time you will every be take to the review page is if the customers paypal returns a declined error.