Skip to content

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

@dtamajon

Description

@dtamajon

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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions