TransbankDevelopers / transbank-plugin-woocommerce-webpay-rest

Código fuente de Plugin WooCommerce para Transbank Webpay Rest
BSD 3-Clause "New" or "Revised" License
19 stars 14 forks source link

Error del plugin de Transbank en servidores de wordpress.com #115

Closed UpperCod closed 1 year ago

UpperCod commented 1 year ago

Existen servicios de hosting que ofrecen una distribución propia de wordpress, como el caso de Wordpress.com

Para reproducir

  1. Adquirir un servicio de wordpress.com
  2. Instalar Woocommerce
  3. Agregar el plugins de Transbank, cualquier entorno generara el error

Comportamiento observado

No se finaliza la redirección a Transbank, dado que Transbank intenta crear una carpeta llamada log/Transbank_webpay, el error es que Transbank usa las constantes por defecto de WP para acceder al directorio de raíz para crear un archivo en un lugar sin atribuciones de escritura o lectura.

There is no existing directory at "/wordpress/core/6.1.1/log/Transbank_webpay" and its not buildable: Read-only file system

Comportamiento esperado

Finalizar con la redirección a Transbank

Versiones

Contexto adicional

El error se repara comentando el registro de log en el archivo transbank-webpay-plus-rest\src\TransbankSdkWebpayRest.php del plugins de Transbank:

try {
            $txDate = date('d-m-Y');
            $txTime = date('H:i:s');
            // AQUI $this->log->logInfo('initTransaction - amount: ' . $amount . ', sessionId: ' . $sessionId .
            //     ', buyOrder: ' . $buyOrder . ', txDate: ' . $txDate . ', txTime: ' . $txTime);

            $initResult = $this->transaction->create($buyOrder, $sessionId, $amount, $returnUrl);

            // AQUI $this->log->logInfo('createTransaction - initResult: ' . json_encode($initResult));
            if (isset($initResult) && isset($initResult->url) && isset($initResult->token)) {
                $result = [
                    'url'      => $initResult->url,
                    'token_ws' => $initResult->token,
                ];
            } else {
                throw new Exception('No se ha creado la transacción para, amount: ' . $amount . ', sessionId: ' . $sessionId . ', buyOrder: ' . $buyOrder);
            }
        } catch (Exception $e) {
            $result = [
                'error'  => 'Error al crear la transacción',
                'detail' => $e->getMessage(),
            ];
            $this->log->logError(json_encode($result));
        }

Recomendación

Lo ideal seria mantener un sistema de log distinto al actual o escribir los logs dentro del mismo plugin.

mvarlic commented 1 year ago

Se soluciona en la versión 1.6.3 muchas gracias por las sugerencias y tomarte el tiempo de detallar las posibles soluciones, tal como indicas se movió el log dentro del plugin para solventar el problema de los permisos