Si observa el controlador del carrito app/code/core/Mage/Checkout/controllers/CartController.php, encontrará la función _goBack. Aquí es donde Magento decide la URL de retorno.
protected function _goBack()
{
$returnUrl = $this->getRequest()->getParam('return_url');
if ($returnUrl) {
if (!$this->_isUrlInternal($returnUrl)) {
throw new Mage_Exception('External urls redirect to "' . $returnUrl . '" denied!');
}
$this->_getSession()->getMessages(true);
$this->getResponse()->setRedirect($returnUrl);
} elseif (!Mage::getStoreConfig('checkout/cart/redirect_to_cart')
&& !$this->getRequest()->getParam('in_cart')
&& $backUrl = $this->_getRefererUrl()
) {
$this->getResponse()->setRedirect($backUrl);
} else {
if (($this->getRequest()->getActionName() == 'add') && !$this->getRequest()->getParam('in_cart')) {
$this->_getSession()->setContinueShoppingUrl($this->_getRefererUrl());
}
$this->_redirect('checkout/cart');
}
return $this;
}
La sección que está buscando es la llamada a que _getRefererUrlesto suceda cuando no está configurando la URL de retorno como un parámetro y no está utilizando la opción de redireccionamiento predeterminado al carrito.
Dentro de la función, _getRefererUrlse verifica la url de referencia para ver si es una url interna, cuando no es interna, se utiliza la url base.
Sugeriría que su URL de referencia sea externa o que haya algún problema con el cheque.
Eche un vistazo Mage_Core_Controller_Varien_Action::_isUrlInternalpara depurar si la url es interna o no.
El problema era que _isUrlInternal fallaba por tener el puerto en la url base