Jump to content

error cecatpv 0.61


ocarrig

Recommended Posts

Buenos dias

 

Llevo dias luchando con un error y por mas que busco, leo y hago pruebas no doy con ello, por si alguien puede ayudarme, os cuento:

 

-La tienda no esta en el raiz del hosting, esta en /tienda y es un prestashop 1.6.1.7

-Tengo el modulo instalado con los permisos correctos (755) y la configuracion tanto en el panel de CECA como en el modulo (pienso) es correcta

-Me permite hacer todo el proceso de compra correctamente (incluso con el ok de la web de ceca)

 

PROBLEMA:

 

Cuando me voy a modulos veo estos errores y no veo el modulo en cuestion:

 

->Arriba del todo un warning con estos textos:

 

2 errores

  1. cecatpv (parse error en /modules/cecatpv/cecatpv.php)
  2. cecatpv (la clase que falta en /modules/cecatpv/cecatpv.php)

 

->Más abajo, justo encima del listado de los modulos donde estan las opciones para filtrar:

Parse error: syntax error, unexpected '?' in /usr/home/midominio.com/web/tienda/classes/module/Module.php(1224) : eval()'d code on line 1

 

1224 if (eval('if (false){    '.$file.' }') !== false)
1225                       require_once( _PS_MODULE_DIR_.$module.'/'.$module.'.php' );
1226                    else
1227                $errors[] = sprintf(Tools::displayError('%1$s (parse error in %2$s)'), $module, substr($filepath, strlen(_PS_ROOT_DIR_)));
1228                }

 

 

Pensando que el problema pudiera estar en que la tienda no esta en el raiz (cuelga de tienda) he ido modificando todas la rutas que he visto dentro de ceccatpv.php incluyendo ese "tienda", pero ni con esas.

 

 

Ando loco con el tema, porque como digo, por mas que leo e investigo, no soy capaz de quitar dichos errores.

 

MUCHAS GRACIAS!!

Saludos.

 

PD: Decir que tengo otro comercio exactamente igual, solo que este si cuelga todo del raiz, y aqui funciona todo ok.... por eso mi cabeza no hace mas que pensar que el fallo pueda estar en tener esta tienda en otro directorio.... uffff!!!

Edited by ocarrig (see edit history)
Link to comment
Share on other sites

el codigo del archivo cecatpv.php sin modificar nada (solo la linea 4 para la clave en PRO) es el siguiente:

<?php
class cecatpv extends PaymentModule{
    // ESCRIBE LA CLAVE PROPORCIONADA POR LA CECA PARA EL CALCULO DE LA FIRMA
    // private $ClaveCECA = "la que sea";  // PRE
    private $ClaveCECA = "la clave que me indica el banco";  // PRO

    
    private $_html = '';
    private $_postErrors = array();
    
    public function __construct(){
        $this->name = 'cecatpv';
        $this->tab = 'Payment';
        $this->version = 0.61;
                
        // Array config con los datos de configuración
        $config = Configuration::getMultiple(array(
            'CECATPV_URLTPV',
            'CECATPV_MERCHANTID',
            'CECATPV_ACQUIRERBIN',
            'CECATPV_TERMINALID',
            'CECATPV_EXPONENTE',
            'CECATPV_TIPOMONEDA',
            'CECATPV_ERRORACTION',
            'CECATPV_DEBUGMODE',
            'CECATPV_DEBUGEMAIL'));
        
        // Establecer propiedades según los datos de configuración
        if (isset($config['CECATPV_URLTPV']))
            $this->urltpv = $config['CECATPV_URLTPV'];    

        if (isset($config['CECATPV_MERCHANTID']))
            $this->MerchantID = $config['CECATPV_MERCHANTID'];    
                
        if (isset($config['CECATPV_ACQUIRERBIN']))
            $this->AcquirerBIN = $config['CECATPV_ACQUIRERBIN'];
            
        if (isset($config['CECATPV_TERMINALID']))
            $this->TerminalID = $config['CECATPV_TERMINALID'];
                        
        if (isset($config['CECATPV_EXPONENTE']))
            $this->Exponente = $config['CECATPV_EXPONENTE'];
                        
        if (isset($config['CECATPV_TIPOMONEDA']))
            $this->TipoMoneda = $config['CECATPV_TIPOMONEDA'];

        if (isset($config['CECATPV_ERRORACTION']))
            $this->ErrorAction = $config['CECATPV_ERRORACTION'];

        if (isset($config['CECATPV_DEBUGMODE']))
            $this->DebugMode = $config['CECATPV_DEBUGMODE'];        

        if (isset($config['CECATPV_DEBUGEMAIL']))
            $this->DebugEMail = $config['CECATPV_DEBUGEMAIL'];                                    

        parent::__construct();
                
        $this->page = basename(__FILE__, '.php');
        $this->displayName = $this->l('CECA TPV');
        $this->description = $this->l('Aceptar pagos con tarjeta vía CECA');
        
        // Mostrar aviso en la página principal de módulos si faltan datos de configuración.
        if (
            !isset($this->urltpv)
            OR !isset($this->MerchantID)
            OR !isset($this->AcquirerBIN)
            OR !isset($this->TerminalID)
            OR !isset($this->Exponente)
            OR !isset($this->TipoMoneda)
            OR !isset($this->ErrorAction)
            OR !isset($this->DebugMode)
            OR !isset($this->DebugEMail)
        )
            $this->warning = $this->l('Te faltan datos a configurar el módulo CECA TPV.');
    }

    public function install()    {
        // Valores por defecto al instalar el módulo
        if (
            !parent::install()  
            OR !Configuration::updateValue('CECATPV_URLTPV', 'http://tpv.ceca.es:8000/cgi-bin/tpv')
            OR !Configuration::updateValue('CECATPV_TERMINALID', '00000003')
            OR !Configuration::updateValue('CECATPV_EXPONENTE', '2')
            OR !Configuration::updateValue('CECATPV_TIPOMONEDA', '978')
            OR !Configuration::updateValue('CECATPV_ERRORACTION', '0')
            OR !Configuration::updateValue('CECATPV_DEBUGMODE', '0')
            OR !Configuration::updateValue('CECATPV_DEBUGEMAIL', Configuration::get('PS_SHOP_EMAIL') )
            OR !$this->registerHook('payment')
        )
            return false;

        return true;
    }

    public function uninstall()    {
         // Valores a quitar si desinstalamos el módulo
        if (
            !Configuration::deleteByName('CECATPV_URLTPV')
            OR !Configuration::deleteByName('CECATPV_MERCHANTID')
            OR !Configuration::deleteByName('CECATPV_ACQUIRERBIN')
            OR !Configuration::deleteByName('CECATPV_TERMINALID')
            OR !Configuration::deleteByName('CECATPV_EXPONENTE')
            OR !Configuration::deleteByName('CECATPV_TIPOMONEDA')
            OR !Configuration::deleteByName('CECATPV_ERRORACTION')
            OR !Configuration::deleteByName('CECATPV_DEBUGMODE')
            OR !Configuration::deleteByName('CECATPV_DEBUGEMAIL')
            OR !parent::uninstall()
        )
            return false;
            
        return true;
    }

    private function _postValidation(){
            // Si al enviar los datos del formulario de configuración hay campos vacios, mostrar errores.
        if (isset($_POST['btnSubmit'])){            
            if (empty($_POST['urltpv']))
                $this->_postErrors[] = $this->l('Se requiere la URL de llamada del entorno.');        
            if (empty($_POST['merchantid']))
                $this->_postErrors[] = $this->l('Se requiere Merchant ID.');                    
            if (empty($_POST['acquirerbin']))
                $this->_postErrors[] = $this->l('Se requiere Acquirer BIN.');    
            if (empty($_POST['terminalid']))
                $this->_postErrors[] = $this->l('Se requiere Terminal ID.');                    
            if (empty($_POST['exponente']))
                $this->_postErrors[] = $this->l('Se requiere Exponente.');                                        
            if (empty($_POST['tipomoneda']))
                $this->_postErrors[] = $this->l('Se requiere el Tipo de moneda.');            
        }
    }

    private function _postProcess(){
            // Actualizar la configuración en la BBDD
        if (isset($_POST['btnSubmit'])){
            Configuration::updateValue('CECATPV_URLTPV',      $_POST['urltpv']);    
            Configuration::updateValue('CECATPV_MERCHANTID',  $_POST['merchantid']);
            Configuration::updateValue('CECATPV_ACQUIRERBIN', $_POST['acquirerbin']);
            Configuration::updateValue('CECATPV_TERMINALID',  $_POST['terminalid']);
            Configuration::updateValue('CECATPV_EXPONENTE',   $_POST['exponente']);
            Configuration::updateValue('CECATPV_TIPOMONEDA',  $_POST['tipomoneda']);
            Configuration::updateValue('CECATPV_ERRORACTION',  $_POST['erroraction']);
            Configuration::updateValue('CECATPV_DEBUGMODE',  $_POST['debugmode']);
            Configuration::updateValue('CECATPV_DEBUGEMAIL',  $_POST['debugemail']);
        }

        $this->_html .= '<div class="conf confirm"><img src="../img/admin/ok.gif" alt="'.$this->l('ok').'" /> '.$this->l('Configuración actualizada').'</div>';
    }

    private function _displaycecatpv()
    {
        // Aparición el la lista de módulos
        $this->_html .= '<img src="../modules/cecatpv/ceca-banner.jpg" style="float:left; margin-right:15px;"><b>'.$this->l('Este módulo te permite aceptar pagos con tarjeta.').'</b><br /><br />
        '.$this->l('Si el cliente elije este modo de pago, podrá pagar de forma automática.').'<br /><br /><br />';
    }

    private function _displayForm(){
        // Mostar formulario
        $this->_html .=
        '<form action="'.$_SERVER['REQUEST_URI'].'" method="post">
            <fieldset>
            <legend><img src="../img/admin/contact.gif" />'.$this->l('Configuración del TPV').'</legend>
                <p class="clear">'.$this->l('Por favor completa la información requerida que te proporcionará tu caja').'.</p>
                    <label>'.$this->l('URL del TPV').'</label>
                        <div class="margin-form"><input type="text" name="urltpv" value="'.
                        Tools::getValue('urltpv', $this->urltpv).
                        '" style="width: 330px;" /></div>
                    <label>'.$this->l('Código comercio (MerchantID)').'</label>
                        <div class="margin-form" style="height: 35px;"><input type="text" name="merchantid" value="'.
                        Tools::getValue('merchantid', $this->MerchantID).
                        '" style="width: 330px;" /></div>
                    <label>'.$this->l('Código entidad (AcquirerBIN)').'</label>
                        <div class="margin-form" style="height: 35px;"><input type="text" name="acquirerbin" value="'.
                        Tools::getValue('acquirerbin', $this->AcquirerBIN).
                        '" style="width: 330px;" /></div>
                    <label>'.$this->l('TerminalID').'</label>
                        <div class="margin-form"><input type="text" name="terminalid" value="'.
                        Tools::getValue('terminalid', $this->TerminalID).
                        '" style="width: 330px;" /></div>
                    <label>'.$this->l('Exponente').'</label>
                        <div class="margin-form"><input type="text" name="exponente" value="'.
                        Tools::getValue('exponente', $this->Exponente).
                        '" style="width: 330px;" /></div>
                    <label>'.$this->l('Tipo Moneda').'</label>
                        <div class="margin-form"><input type="text" name="tipomoneda" value="'.
                        Tools::getValue('tipomoneda', $this->TipoMoneda).
                        '" style="width: 330px;" /></div>
                    <label>'.$this->l('Acción ante pago incorrecto').'</label>
                    <div class="margin-form">
                        <input type="radio" name="erroraction" id="erroraction_nochange" value="0" '.($this->ErrorAction==0 ? 'checked="checked" ' : '').'/>
                        <label class="t" for="debugmode_nochange">'.$this->l('Dejar el carrito sin modificar y mostrarlo de nuevo para que el cliente pueda completar el pedido escogiendo otro medio de pago').'</label><br />
                        <input type="radio" name="erroraction" id="erroraction_ordererror" value="1" '.($this->ErrorAction==1 ? 'checked="checked" ' : '').'/>
                        <label class="t" for="erroraction_ordererror">'.$this->l('Cancelar el pedido, cambiando su estado a "Error de pago", vaciando en carrito y mostrar el historial de sus pedidos al cliente').'</label>
                    </div>
                    <label>'.$this->l('Activar modo depuración').'</label>
                    <div class="margin-form">
                        <input type="radio" name="debugmode" id="debugmode_on" value="1" '.(Tools::getValue('debugmode', $this->DebugMode) ? 'checked="checked" ' : '').'/>
                        <label class="t" for="debugmode_on"> <img src="../img/admin/enabled.gif" alt="'.$this->l('Enabled').'" title="'.$this->l('Activado').'" /></label>
                        <input type="radio" name="debugmode" id="debugmode_off" value="0" '.(!Tools::getValue('debugmode', $this->DebugMode) ? 'checked="checked" ' : '').'/>
                        <label class="t" for="debugmode_off"> <img src="../img/admin/disabled.gif" alt="'.$this->l('Disabled').'" title="'.$this->l('Desactivado').'" /></label>
                        <p class="clear">'.$this->l('Envía un e-mail con información cada vez que CECA TPV valida un pago, con información útil para encontrar errores').'</p></div>
                    <label>'.$this->l('Correo de depuración').'</label>
                        <div class="margin-form"><input type="text" name="debugemail" value="'.
                        Tools::getValue('debugemail', $this->DebugEMail).
                        '" style="width: 330px;" />
                        <p class="clear">'.$this->l('Correo electrónico para depuración. Por defecto el correo de la tienda').'</p></div>
                    <center><input class="button" name="btnSubmit" value="'.$this->l('Guardar configuración').'" type="submit" /></center>
            </fieldset>
        </form>';


        
    }    

    public function getContent()
    {
        // Recoger datos
        $this->_html = '<h2>'.$this->displayName.'</h2>';
        if (!empty($_POST))
        {
            $this->_postValidation();
            if (!sizeof($this->_postErrors))
                $this->_postProcess();
            else
                foreach ($this->_postErrors AS $err)
                    $this->_html .= '<div class="alert error">'. $err .'</div>';
        }
        else
            $this->_html .= '<br />';
        $this->_displaycecatpv();
        $this->_displayForm();
        return $this->_html;
    }

    public function enviar_mail_debug($asunto, $mensaje){
        if(Configuration::get('CECATPV_DEBUGMODE')==1){
            $para      = Configuration::getValue('CECATPV_DEBUGEMAIL');
            $cabeceras = 'From: ' . Configuration::getValue('PS_SHOP_EMAIL') . "\r\n";
            mail($para, $asunto, $mensaje, $cabeceras);
        }
    }

    public function calculaFirma($stringFirma){
        return sha1($this->ClaveCECA.$stringFirma);
    }
    
    public function hookPayment($params){
        global $smarty, $cookie, $cart;
        
        //Generamos para $Descripcion en $productos una lista de los articulos indicando cantidad

        $products = $params['cart']->getProducts();
        $productos = '';
        foreach ($products as $product) {
            $productos .= $product['quantity'].' '.$product['name'].'<br />';
        }
        $productos = substr($productos, 0, 1000);


        //Calculo para $Importe de la compra en $cantidad
        //BUG Da por supuesto que PS esta configurado en la misma moneda que TipoMoneda
        $id_currency = intval(Configuration::get('PS_CURRENCY_DEFAULT'));            
        $currency = new Currency(intval($id_currency));
        /* @Cart.php function getOrderTotal($withTaxes = true, $type = 3)
         *  $withTaxes true == con impuestos incluidos
         *  $type 3 == total del carrito, productos y descuentos
        */
        $cantidad = number_format(
            Tools::convertPrice($params['cart']->getOrderTotal(true, 3), $currency),
            2, '.', ''
        );
        $cantidad = str_replace('.','',$cantidad);    

        $urltpv           = Tools::getValue('urltpv', $this->urltpv);
        $MerchantID       = Tools::getValue('merchantid', $this->MerchantID);
        $AcquirerBIN      = Tools::getValue('acquirerbin', $this->AcquirerBIN);
        $TerminalID       = Tools::getValue('terminalid', $this->TerminalID);
        $Exponente        = Tools::getValue('exponente', $this->Exponente);
        $TipoMoneda       = Tools::getValue('tipomoneda', $this->TipoMoneda);


        $Num_operacion    = $params['cart']->id;
        $Importe          = $cantidad;
        $Idioma           = '1';
        $Pago_soportado   = 'SSL';
        $Descripcion      = $productos;
        $Cifrado                  = 'SHA1';
 
        $Firma=$this->calculaFirma($MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$TipoMoneda.$Exponente.$Cifrado.$url_OK.$url_NOK);
                    
        $smarty->assign(array(
            'urltpv'          => $urltpv,
            'merchantid'      => $MerchantID,
            'acquirerbin'     => $AcquirerBIN,
            'terminalid'      => $TerminalID,
            'exponente'       => $Exponente,
            'tipomoneda'      => $TipoMoneda,
            'url_ok'          => $url_OK,
            'url_nok'         => $url_NOK,
            'num_operacion'   => $Num_operacion,
            'importe'         => $Importe,
            'idioma'          => $Idioma,
            'pago_soportado'  => $Pago_soportado,
            'descripcion'     => $Descripcion,
            'firma'           => $Firma,
            'cifrado'                    => $Cifrado,

            'titular' => ($cookie->logged ? $cookie->customer_firstname.' '.$cookie->customer_lastname : false),            

            'this_path' => $this->_path
        ));
        return $this->display(__FILE__, 'cecatpv.tpl');
        }
}
?>

Asi funciona todo OK, pero veo los errores comentados entrando a los modulos, asi que como indicaba en el primer post hice la prueba de añadir "tienda" en todos los sitios que he pensando debia ir "tienda" pensando que fuera por esto, por ejemplo:

 

ORIGINAL: <img src="../img/admin/ok.gif

MODIFICADO: <img src="../tienda/img/admin/ok.gif

 

Pero o me dejo algo o fallo en algo que desconozco.

 

El resto de archivos que vienen en el modulo no he visto que tengan nada configurable por asi decirlo, aunque si es preciso comentamos uno a uno.

Ya digo que el proceso de compra funciona OK, pero es al entrar a la opcion de modulos del presta, cuando tengo estos errores que me gustaria no tener. y que tampoco entiendo que quieren decir.

 

GRACIAS DE NUEVO
 

Edited by ocarrig (see edit history)
Link to comment
Share on other sites

Una idea.... pudiera ser que tuviera que indicar la carpeta "tienda" en la entrada "_PS_ROOT_DIR_" que figura en el archivo defines.inc.php dentro de la carpeta config.... tendria que modificar esto, correcto?

 

/* Directories */
if (!defined('_PS_ROOT_DIR_'))
{
    define('_PS_ROOT_DIR_', realpath($currentDir.'/..'));

    if (!defined('_PS_CORE_DIR_'))
        define('_PS_CORE_DIR_', _PS_ROOT_DIR_);
}
elseif (!defined('_PS_CORE_DIR_'))
    define('_PS_CORE_DIR_', realpath($currentDir.'/..'));

 

 

Seria una manera de indicarle a todo el presta donde esta instalado no?

Os parece apropiado o no tiene nada que ver?

 

Es que estoy convencido que el fallo viene porque este modulo no se entera (o yo no soy capaz de hacerselo saber) que tiene toda la info bajo la carpeta tienda

 

GRACIAS DE NUEVO

Edited by ocarrig (see edit history)
Link to comment
Share on other sites

Ok, ok, paro quieto entonces.... y espero si alguien me puede iluminar.

 

Una cosa quiero dejar clara, todo funciona OK, el problema es cuando entro a los modulos, que es cuando me salen los fallos que indico.

 

El proceso de compra funciona OK y la ruta de la imagen que "puse de ejemplo" se ve tanto con el original, como cuando modifico y meto el "tienda".

Edited by ocarrig (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...