Magento: más configuraciones

Mirando los borradores del blog, me he encontrado con este, que no sé porqué no llegué a publicar en su día (es de Septiembre del 2010). Lo recupero y publico, esperando que sea de utilidad.

A base de pelearme con Magento, he descubierto algunas opciones muy muy básicas pero que me vienen de maravilla (aviso, este es un post para los que como yo, son principiantes con Magento):

Mostrar productos fuera de stock

Si queremos que nuestros productos se muestren en nuestra web aún cuando no tenemos existencias, podemos hacerlo, asegurándonos de que no se van a poder comprar.
En la versión 1.4.1.1 esto se hace desde Sistema -> Configuración -> Catálogo -> Inventario, desde donde además de poder poner a «Si» la opción «Display Out of Stock Products», podremos gestionar la cantidad máxima de productos permitidos en un mismo carrito de la compra (que vendrá muy bien si tienes unos gastos de envío variables que has subido con un csv).

Mostrar productos por defecto en línea en lugar de en cuadrícula

La verdad, no me gusta nada la vista por defecto de Magento, que muestra los productos ordenados en cuadrícula. Queda mucho más elegante, por lo menos con mi tema y mis productos, la vista en lista. Desde Sistema -> Configuración -> Catálogo -> Catálogo -> frontend, podremos cambiar este punto en la opción «Modo de la lista».

Permitir pagos con Paypal para el producto de menor peso

Un problema que me he encontrado, es que he trabajado con «tablerates» para definir los gastos de envío en función del peso y el destino (explicado en este post, en el apartado «Gastos de envío»). Pues bien, como cada producto tiene asociado un peso, se debe definir el coste de los gastos de envío para todos y cada uno de los destinos para el producto de peso menor (o para peso cero), ya que si no podemos tener problemas en las ventas. Por ejemplo, si tengo definidos 2 gastos de envío (Barcelona y Madrid) y tengo un producto de 0,5kg, no podré vender si tengo los siguientes gastos de envío:

  • Barcelona: 0 kg = 5€, 10kg = 10€
  • Madrid: 10kg = 10€

No podré vender mi producto de 0,5kg aún cuando el destino sea Barcelona (y por tanto tenga definidos los gastos de envío correctamente). Necesitaré definir también los gastos para Madrid.

Tienda multilenguaje

Finalmente, me he decidido a hacer mi tienda en varios idiomas, aprovechando la poténcia de Magento, y siguiendo los pasos aquí descritos, y que resumo a continuación:

  1. Descargar y descomprimir los idiomas para nuestra web del sitio oficial. http://www.magentocommerce.com/langs/list/
  2. Subir a Magento los idiomas descomprimidos. Cada idioma ya viene con la estructura creada, así que únicamente deberemos subir el directorio «app» del idioma a la raíz de nuestra instalación de Magento en el servidor. Esto nos creará para cada idioma, un directorio en app\design\frontend\default\default\local y otro en app\locale.
  3. Desde la administración de Magento, desde Sistema -> Gestionar tiendas, crearemos una nueva «Vista de tienda» para cada uno de los nuevos idiomas. Cada vista de tienda, deberá tener los siguientes parámetros:
    • Store: Main Store
    • Name: Idioma
    • Code: idioma (NOTA: Existen algunas aplicaciones extra que muestran banderas en lugar del nombre del idioma. Para ello, es necesario usar como código el código del idioma. P.ej. US para inglés americano).
    • Status: Enabled
    • Sort order: 0 (Opcional. Si todos los idiomas se dejan a 0, se ordenarán por orden alfabético)
  4. Finalmente, desde Sistema > Configuración, cambiaremos el alcance de la configuración actual (el desplegable de arriba a la izquierda, justo encima del menú izquierdo) para acceder a la vista del uno de los idiomas. Desde General -> General, desmarcaremos el checkbox «usar sitio web» y posteriormente seleccionaremos el País para el idioma. Deberemos hacer esto para cada idioma.
  5. Seguramente, hará falta refrescar la caché para que funcione. Esto podremos hacerlo desde Sistema -> Gestor de la cache -> Flush Magento Caché.

Además de estas opciones, creando nuevas vistas para los diferentes idiomas podremos:

  1. Con el ámbito de la vista de idioma seleccionado en el «scope», desde Sistema -> Configuración -> General -> Diseño, especificar un diseño personalizado para cada uno de los idiomas, si por ejemplo queremos dar la sensación de tener diferentes webs según el idioma.

Lo más importante, sin embargo, es que con el cambio de idioma, no únicamente cambie el idioma de la tienda, si no que además cambien los títulos de las categorías, así como las descripciones de los diferentes productos. Esto se podrá hacer tal y como sigue:

  1. Desde Catálogo -> Gestionar las categorías, seleccionando el ámbito de la vista del idioma que queremos, en el desplegable de vistas de la esquina superior izquierda, podremos ver los valores definidos para la Categoría en la vista actual. Símplemente desmarcando el checkbox «Usar el valor por defecto», podremos dar un nuevo valor, por ejemplo, a el nombre o la descripción de la categoría, para que corresponda con el idioma de la vista.
  2. Exactamente igual, desde Catálogo -> Gestionar los productos, y usando el selector de la vista actual, podremos cambiar las textos de cada producto, así como adaptar su coste,

La información está sacada de este fantástico vídeo.

¿Qué páginas tiene mi tienda?

Desde la opción CMS -> Páginas, se tiene acceso a un listado completo de las páginas que conforman nuestra tienda. Y cuando hablo de páginas me refiero a las páginas y los templates que usa cada una de ellas. Esto es ideal para editar la información de cada página de forma sencilla, a la vez que proporciona un listado de los templates usados, por si se quieren hacer modificaciones más drásticas (como cambiar todos los pies de página de la tienda o eliminar banners).

Más información sobre Magento: https://helloit.es/?tag=magento

Error Magento y PayPal Express

MagentoHace unos días publiqué una entrada hablando sobre cómo integrar Magento (1.4.1.1) con PayPal Express. Todo parecía funcionar de fábula cuando se realizaban compras desde cuentas de PayPal. Sin embargo, si el comprador no tenía una cuenta de PayPal y únicamente quería efectuar un pago con tarjeta de crédito, la compra se realizaba de forma satisfactoria pero mostraba el siguiente mensaje al final del proceso de venta:

«El pago no se puede procesar mediante su cuenta de paypal en este momento»

¡Toma ya! La compra se realiza correctamente pero se le dice al comprador justo lo contrario. Feo, feo.

Después de mucho pelearme contacté con el soporte técnico de PayPal, quien ha estado ayudándome (y mucho) a solucionar la incidencia.

El problema es el siguiente:

Cuando se realiza el proceso de compra, se utiliza una función de PayPal llamada «DoExpressCheckoutPayment». En las compras que funcionan, el campo «successpageredirectrequested» está a «false», mientras que las compras que también funcionan pero a las que se les muestra el mensaje de error anterior, este campo está a «true».

En palabras del soporte ténico de PayPal:

De acuerdo con este enlace
https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_DoExpressCheckoutPayment

«Flag to indicate whether you need to redirect the customer to back to PayPal after completing the transaction. »

Es una opción para indicar si se necesitar redirigir al comprador de nuevo a PayPal tras completar la transacción, que no tiene mucho sentido ya que la transacción ya ha finalizado correctamente.

Finalmente, he aquí la conclusión por parte de PayPal:

SUCCESSPAGEREDIRECTREQUESTED se solía utilizar en versiones muy antiguas de PayPal, y tenía como propósito indicar que el comprador había pagado con tarjeta directamente, para que las integraciones que así lo tuvieran dispuesto, redirigieran al comprador de nuevo a la página de PayPal por si quería abrir una cuenta para usarla en un futuro (en vez de seguir pagando como invitado).

Parece que esto ya no está en vigor, por lo que una redirección final provocaría un error.

Es decir, Magento está usando un método obsoleto, y esto está devolviendo un mensaje de error falso, en el proceso de compra.

Siguiendo las indicaciones de este foro de discusión (y también los consejos del soporte de PayPal), he pasado a modificar el archivo app/code/core/Mage/Paypal/Controller/Express/Abstract.php

Concretamente, de la siguiente función, he comentado las líneas en negrita:

public function placeOrderAction()
{
try {
$this->_initCheckout();
$this->_checkout->place($this-

>_initToken());

// prepare session to success or cancellation page
$session = $this->_getCheckoutSession();
$session->clearHelperData();

// «last successful quote»
$quoteId = $this->_getQuote()->getId();
$session->setLastQuoteId($quoteId)->setLastSuccessQuoteId($quoteId);

// an order may be created
$order = $this->_checkout->getOrder();
if ($order) {
$session->setLastOrderId($order->getId())
->setLastRealOrderId($order->getIncrementId());
// as well a billing agreement can be created
$agreement = $this->_checkout->getBillingAgreement();
if ($agreement) {
$session->setLastBillingAgreementId($agreement->getId());
}
}

// recurring profiles may be created along with the order or without it
$profiles = $this->_checkout->getRecurringPaymentProfiles();
if ($profiles) {
$ids = array();
foreach($profiles as $profile) {
$ids[] = $profile->getId();
}
$session->setLastRecurringProfileIds($ids);
}

// redirect if PayPal specified some URL (for example, to Giropay bank)
$url = $this->_checkout->getRedirectUrl();
//if ($url) {
//$this->getResponse()->setRedirect($url);
// return;
//}

$this->_initToken(false); // no need in token anymore
$this->_redirect(‘checkout/onepage/success’);
return;
}
catch (Mage_Core_Exception $e) {
$this->_getSession()->addError($e->getMessage());
}
catch (Exception $e) {
$this->_getSession()->addError($this->__(‘Unable to place the order.’));
Mage::logException($e);
}
$this->_redirect(‘*/*/review’);
}

Con esto se evita la redirección por parte de Magento al recibir el parámetro obsoleto, y se consigue completar correctamente el proceso de compra, esta vez, sin mensajes de error.

ATENCIÓN: Se recomienda realizar todos los tests que se crean convenientes antes de adaptar esta solución a tu sitio web en producción.

PD: Sí, ya he contactado con Magento para avisarles de este error, que podéis ver explicado aquí (si tenéis cuenta en Magento).

Integrar Magento con PayPal

A día de hoy, la mejor integración que he encontrado para realizar pagos con PayPal a través de Magento es usar el método PayPal Express. Esto nos permite que los datos recogidos por el formulario de Magento se envíen al formulario de pago de PayPal, consiguiendo así que el usuario no tenga que introducir sus datos por duplicado (una vez en Magento y otra en PayPal).

Para conseguir esta integración, hemos de seguir estos pasos:

  1. Desde nuestra cuenta de Paypal, iremos a Mi cuenta -> Perfil -> Más opciones
  2. En la columna izquierda, iremos a Información de cuenta -> Acceso a API
  3. Desde aquí, seleccionaremos la segunda opción «Opción 2: Solicitar credenciales de API para crear su nombre de usuario y su contraseña propios de API.». Esta opción será la ideal para trabajar con nuestro Magento. Una vez creada la firma de API, deberemos guardar a buen recaudo esta información (siempre será accesible desde esta opción en PayPal).
  4. Posteriormente, desde la administración de Magento, nos dirigiremos a Sistema -> Configuración -> Ventas -> Paypal, desde donde activaremos el checkbox PayPal Express (yo recomendaría deshabilitar la casilla de PayPal normal, para no crear confusión al usuario).
  5. Desde «API/Integration Settings» podremos añadir el nombre de usuario, password y firma creados en el punto 3.
  6. Desde «Express Checkout Settings» podremos personalizar un poco el tipo de compra que se realizará. Así por ejemplo, podremos cambiar la «Acción de pago» por «Venta», así como permitir las compras de usuarios «Invitado» en Magento.

Actualización 1: En el segundo comentario se explica con detalle esta configuración.

Actualización 2: Se ha detectado un error con PayPal Express y Magento 1.4.1.1, explicado y solucionado en este otro post.

Cómo instalar Magento

MagentoÚltimamente me había interesado por cómo crear un carrito de la compra con Paypal, para vender productos a través de Internet. Sin embargo, después de mucho buscar, el servicio técnico de Paypal, muy amablemente me ha comentado que:

  1. Paypal no puede restringir las compras según la ubicación geográfica. Así pues, si vendes usando los botones de compra de Paypal, tienes que vender forzosamente a todo el mundo, y no únicamente a una región o país concreto.
  2. Paypal no puede calcular los costes de envío según la dirección de destino del cliente. Así pues, con Paypal tienes que definir los gastos de envío para un paquete que irá a tu misma ciudad, o a la otra punta del mundo.

Sin embargo, el servicio técnico de Paypal me ha recomendado mirar «carritos de terceros» que se integran con Paypal, para realizar este tipo de configuraciones. Desde Paypal, recomiendan los siguientes:

Carros de código fuente abierto

Carros alojados

Me he decidido a probar Magento, básicamente porqué era el que más me sonaba (por no decir que era el único que me sonaba, a parte de osCommerce).

¿Cómo instalar Magento?

  • Primero tenemos que registrarnos en la web de Magento y descargar la última versión.
  • Después, en mi caso, he modificado el archivo robots.txt de mi servidor para denegar el acceso a la carpeta que contendrá el e-commerce (no me interesa que Google y el resto de buscadores indexen este tipo de contenido), tal y como sigue:

User-agent: Googlebot
Disallow: /magento/

User-agent: *
Disallow: /magento/

  • Una vez subida la nueva versión del archivo robots.txt, he subido el directorio magento (que contiene los más de 9000 ficheros que componen la aplicación) a la raíz de mi servidor.
Siguiendo los pasos descritos aquí, he conseguido instalar y configurar Magento. Por si las moscas, describo los pasos a continuación, ya que algún paso extra he tenido que hacer:
  • En mi hosting, he creado una nueva base de datos MySQL que usará Magento. Esto dependerá del hosting, pero la mayoría de hostings ponen muchas facilidades para hacer este tipo de tareas.
  • Posteriormente, he cambiado los atributos de los siguientes archivos y directorios, a 777 (tranquilos, esto también lo comenta la documentación oficial de instalación de Magento). Esto se puede hacer con el comando «chmod» o haciendo click derecho sobre el arhivo o carpeta desde tu cliente FTP favorito:
    • Archivo magento/var/.htaccess
    • Directorios magento/app/etc y magento/var
    • Todos los directorios dentro de magento/media (no incluido)
  • Además de esto (y con tal de solucionar un «ERROR 500 – Internal Server Error»), he tenido que modificar el archivo .htaccess de la raíz de mi servidor (no el archivo .htaccess de magento), para permitir la escritura del directorio magento, añadiéndo la siguiente línea:

RewriteBase /magento/

  • Una vez cambiados los permisos y el archivo .htaccess de mi servidor, he entrado por navegador a la dirección http://miweb.com/magento/install.php, el cual ha mostrado un asistente para la configuración de Magento, que ha consistido en:
    • Aceptar las condiciones de uso
    • Seleccionar las opciones de ubicación, zona horaria, y moneda.
    • Indicar el nombre del host, base de datos y credenciales para la base de datos MySQL creada anteriormente para Magento. En este punto, además, se me han presentado diversas opciones para modificar el acceso web a Magento, así como para almacenar las opciones de sesión. NOTA: Al aceptar este punto, se ha pasado a crear la base de datos de Magento, lo cual en mi caso, ha tardado varios minutos.
    • Indicar los diversos datos del que será el administrador de Magento, así como los datos de inicio de sesión.
  • Con esto he conseguido tener Magento instalado en mi servidor.
En breve (espero) un nuevo post sobre los primeros pasos con la configuración de una tienda con Magento.