-
Notifications
You must be signed in to change notification settings - Fork 11
Description
Hola,
Abro un nuevo hilo, relacionado con el #33, ya que tengo el mismo error pero la solución descrita en ese hilo (ya resuelto) no aplica en mi caso.
En mi caso tengo una tienda multi-tienda, en la que hay un path por idioma: https://domain/es, https://domain/en, ...
Para depurar lo que está ocurriendo, he incluido en el archivo app/code/community/Devopensource/Redsys/controllers/IndexController.php, después de la línea 60, el siguiente código:
Mage::log($redsys, null, 'redsys.log', true);
Al realizar una operación de compra con Redsys, veo la siguiente información en el archivo redsys.log
[vars_pay] => Array
(
[DS_MERCHANT_AMOUNT] => 3000
[DS_MERCHANT_ORDER] => 000556688
[DS_MERCHANT_MERCHANTCODE] => 99999999
[DS_MERCHANT_CURRENCY] => 978
[DS_MERCHANT_TRANSACTIONTYPE] => 0
[DS_MERCHANT_TERMINAL] => 1
[DS_MERCHANT_MERCHANTURL] => https://domain/redsys/index/callback
[DS_MERCHANT_URLOK] => https://domain/es/redsys/index/success
[DS_MERCHANT_URLKO] => https://domain/es/redsys/index/cancel
[Ds_Merchant_ConsumerLanguage] => 001
[Ds_Merchant_ProductDescription] => MiProducto x 1
[Ds_Merchant_Titular] => CompanyName
[Ds_Merchant_MerchantName] => CompanyName
[Ds_Merchant_PayMethods] => C
)
El error está en el cálculo de DS_MERCHANT_MERCHANTURL, ya que no incluye la tienda, y la URL que genera devuelve un error 404. La URL correcta, en este caso, sería https://domain/es/redsys/index/callback
Tal y como se apunta en el hilo #33, parece un error en la función getUrlStore (como apunta zarapico123):
public function getUrlStore(){
$url = Mage::getStoreConfig('payment/redsys/callback', Mage::app()->getStore());
if ($url==0) {
return Mage::getStoreConfig('web/unsecure/base_url', Mage::app()->getStore())."redsys/index/callback";
}elseif($url==1){
return Mage::getStoreConfig('web/secure/base_url', Mage::app()->getStore())."redsys/index/callback";
}else{
return Mage::getStoreConfig('payment/redsys/callbackurl', Mage::app()->getStore());
}
}
Que al cambiarla por el siguiente código (tal y como indica zarapico123) genera correctamente la URL de callback en el caso de una multi-tienda:
public function getUrlStore(){
$url = Mage::getStoreConfig('payment/redsys/callback', Mage::app()->getStore());
if ($url==0) {
return Mage::getBaseUrl() . 'redsys/index/callback';
}elseif($url==1){
return Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK, true) . 'redsys/index/callback';
}else{
return Mage::getStoreConfig('payment/redsys/callbackurl', Mage::app()->getStore());
}
}
No he podido probar este código en una instalación con una única tienda, así que no sé qué efecto tiene en ese caso.