Agregar producto con opciones a carrito / quote Magento 1.9

El siguiente script funciona para agregar  un producto al carrito o al quote dependiendo las necesidades, por ejemplo yo me encuentro realizando un cotizador de envío, por lo que solo necesito hacer la consulta 1 sola vez.

/*Datos enviado por post*/
    $countryId = $_POST['pais'];
     $regionId = $_POST['estado'];
       $cityId = $_POST['ciudad'];
    $productId = $_POST['productoid'];
          $qty = 1;

/* Id dela tienda */
      $storeId = Mage::app()->getStore()->getStoreId();
/* obtenemos los datos del producto*/
      $product = Mage::getModel('catalog/product')->load($productId);
/*
$opciones es una array con las opciones que se deben agregar al producto, 
Cuando un producto tiene opciones personalizada y a demás requeridas,
es necesario obtener las opciones y a demás agregarlas junto al producto. 
*/

/* asignamos el id del producto */
$opciones['product'] = $productId;

/* Asignamos la cantidad el producto*/
$opciones['qty'] = $qty;


/* 
Obtenemos las opciones personalizadas de producto y asignamos en este caso el primer valor
para este ejemplo solo necesitamos que se asigne un valor a la opción personalizada.
*/
    foreach ($product->getOptions() as $o) {
        $optionType = $o->getType();
      
        if ($optionType == 'drop_down') {
            $values = $o->getValues();
                   $index = 0;
			foreach ($values as $k => $v) {
			if($index <= 1){
                	   $opciones['options'][$o->getOptionId()] = $v->getOptionTypeId();
                           $index++;
            	     }
                }
        }    
    }
    

/* Iniciamos el Quote o cart */  
        $quote = Mage::getModel('sales/quote')->setStoreId($storeId);
/* agregamos el producto junto con sus opciones*/	
$quote->addProduct($product,new Varien_Object($opciones));

/*+++++++++ para terminar de agregar el producto se agrega: ++++++++*/

$quote->save();



/**** En mi caso, no quiero agregar el prodcuto al carrito real, quiero tener la informacion en el quote 
para poder calcular el gasto de envío con el modulo Table Rate *****/
/+++++++++++++++++  este proceso calcula el envío con le modulo de table rates ++++++++ /

	$quote->getShippingAddress()->setCountryId($countryId);
	$quote->getShippingAddress()->setRegionId($regionId);
	$quote->getShippingAddress()->setCity($cityId);

	$quote->getShippingAddress()->setCollectShippingRates(true);

	$quote->getShippingAddress()->collectTotals();	
	$quote->getShippingAddress()->collectShippingRates();
   
        $rates = $quote->getShippingAddress()->getShippingRatesCollection();




 foreach($rates as $rate){
   echo $rate->getPrice();
   echo $rate->getMethodTitle();
   
    echo '<pre>';
      print_r($rate->getData());
    echo '</pre>';
 }


 

Este script lo tengo dentro de una función publica en un controlador, así puedo hacer la petición ajax.

En publicaciones posteriores mostraré como extender el modulo TableRates y poder agregar los campos tanto de configuración como de validación.