La semana pasada, estuve trabajando con Magento y tratando de configurar diferentes vistas de tienda. Básicamente, el cliente necesita configurar una vista de tienda individual para cada país con una URL base diferente. Por ejemplo, si la URL base de tu tienda principal es www.domain.com, y tienes una vista de tienda para EE. UU., su URL base sería www.domain.com/us/.

Todo iba bien, pero encontré un problema con el proceso de pago. Si vas a la tienda de EE. UU., agregas algunos productos al carrito y luego intentas realizar el pago, puedes encontrar un problema donde la página se redirige de nuevo a la página del carrito de compras, ya sea antes o después de ingresar la información de facturación. Si intentas realizar el pago nuevamente, el mismo proceso se repetirá. De hecho, Magento envía la solicitud de información de facturación al servidor usando Ajax, y a veces no puedes ver el error. Sin embargo, puedes ver el error en tu archivo de registro de excepciones o en el registro del sistema. Desafortunadamente, mientras estaba probando el problema, no pude ver ningún mensaje de error en el registro de excepciones o en el registro del sistema, así que hice un poco de depuración a través de la función Ajax de Prototype, que se comunica con el servidor para las solicitudes de información de facturación.

abre opcheckout.js y encuentra el siguiente código:

var request = new Ajax.Request(

this.saveUrl,

{

método: 'post',

onComplete: this.onComplete,

onSuccess: this.onSave,

onFailure: checkout.ajaxFailure.bind(checkout),

parámetros: Form.serialize(this.form)

}

);

y realiza los siguientes cambios, para que esta alerta sea el mensaje de fallo

var request = new Ajax.Request(

this.saveUrl,

{

método: 'post',

onComplete: this.onComplete,

onSuccess: this.onSave,

onFailure: function(transport){alert(transport.responseText)},

parámetros: Form.serialize(this.form)

}

);

Entonces, si hay algún error, verás un mensaje de alerta: “No se puede cargar el archivo csv de precios de Royal Mail para ‘$file’. Asegúrate de que el directorio app/ esté en tu ruta de inclusión.”

En realidad, el problema que encontré (en mi caso, podría ser algo diferente para ti) es que la extensión Meanbee Royal Mail almacena el precio de envío en un archivo CSV dentro de la carpeta app/code/community/Meanbee/Royalmail/data. Cuando intentamos realizar el pago desde una vista de tienda diferente, y quizás la URL base sea diferente (aquí era algo como www.domain.com/us/), la función _loadCsv($file) de la clase Abstract.php siempre busca el archivo dentro de la carpeta de la URL base. Por lo tanto, encontrará un error de solicitud de ruta de archivo no válida. Si realizas los siguientes cambios en la función _loadCsv, puedes solucionar este error.

$filename = “/app/code/community/Meanbee/Royalmail/data/{$file}.csv”;

//reemplazar la línea anterior con

$filename = Mage::getBaseDir(‘app’) . “/code/community/Meanbee/Royalmail/data/{$file}.csv”;

//siempre buscará desde el directorio base

No puedo garantizar que esto funcione al 100% para ti, sin embargo, esto solucionó mi problema.