DevopensourceTeam / Devopensource_Redsys

Método de pago para Redsys para Magento compatible con SHA-256 y parche SUPEE-6788
https://devopensource.com/blog/devopensource-y-redsys
27 stars 11 forks source link

Pedidos en estado "Pendiente" después de procesarse el pago #49

Open dtamajon opened 8 years ago

dtamajon commented 8 years ago

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.

antoniolite commented 8 years ago

Yo he tenido este problema en una tienda de Magento con varias vistas e idiomas. Desde que instalé este módulo, no funciona el callback de Redsys y los estados de los pedidos no se actualizan.

Es más, desde que instalé este módulo, ¡algunos pedidos se registran sin el email!

He modificado las 2 líneas del fichero Data.php que se comenta, a ver si con esto se soluciona.

En cuanto registre algún pedido.... lo cuento.

luiselkano commented 7 years ago

Hola,

Tenía el problema del callback con multistore, y al cambiar la función por la aquí propuesta, ha comenzado a funcionar correctamente.