RubenQuintela / cecamodule

CECA módulo Prestashop 1.7 TPV - CECA module Prestashop 1.7 TPV
MIT License
3 stars 5 forks source link

Prestashop no reconoce la transacción, pero el pago se realiza correctamente #5

Open pcuenban opened 6 years ago

pcuenban commented 6 years ago

Al hacer un pago usando el módulo no reconoce que se halla completado el pedido y sigue apareciendo en el carrito, pero el pago se hace correctamente.

La configuracion del tpv es la siguiente: Comunicación on-line OK: Sí URL online OK: https:///modules/cecamodule/validation.php Respuesta requerida OK: No

Si pongo Respuesta requerida OK: Sí, el pago da error de comunicación.

Gracias

EDITO:

El error que me da al intetnar acceder a la url de /modules/cecamodule/validation.php es Error http 500

dfragac commented 6 years ago

¿Tienes la web en "modo desarrollo" o "offline"?

krrtcaurel commented 6 years ago

A mi me pasa lo mismo. He tenido que cambiar el nombre de Modulo para que se me instale a cecamodule y me pasa lo mismo que dice pcuenban. Tengo que modificar algo en el validate ??? ya que no recoge el pedido , tras el pago y en prestashop> pedidos , no aparece ningun pedido nuevo.

La tienda esta activada, no esta en modo desarrollo

dfragac commented 6 years ago

Tienes configurado, en la intranet de CECA la URL completa (con tu nuevo nombre de carpeta) para el validation.php en el callback (cuando se hace el pago ok)?

En la intranet de CECA es un campo en el que tienes que meter https://miurldepagina/modules/cecamodule/validation.php (o el que coincida con tu instalación).

krrtcaurel commented 6 years ago

Si, la tengo así y coincide con el hosting:

image

dfragac commented 6 years ago

Por lo que puedo ver, la URL online OK está mal porque devuelve un 404: https://sarriaphone.com/modules/cecamodule/validation.php

Comprueba la URL...

krrtcaurel commented 6 years ago

Gracias por responder @dfragac . Pero la URL es esa. Para comprobarlo tras tu consejo e creado un archivo prueva.txt en la misma carpeta y lo abre correctamente. Entiendo que pueda ser del Validation.php que no lo interpreta. Te pego el achivo por si me puedes probar si esta correcto para la PS 1.7.3.1 y PHP: 7.0.32.

Esta es la URL de prueba que el enlace a la carpeta es correcto: https://sarriaphone.com/modules/cecamodule/prueva.txt Te pego mas abajo el codigo del validation por si veis algo que este mal.

Muchas Gracias

krrtcaurel commented 6 years ago

`<?php
include(dirname(FILE).'/../../config/config.inc.php'); include(dirname(FILE).'/../../header.php'); if (isset(Context::getContext()->controller)) { $controller = Context::getContext()->controller; } else { $controller = new FrontController(); $controller->init(); $controller->setMedia(); } Tools::displayFileAsDeprecated(); $controller->displayHeader();

include(dirname(FILE).'/cecamodule.php');

if(!function_exists("writeLog")||!function_exists("generateIdLogCECA")) { require_once('apiCeca/cecaLib.php'); }

$idLog = generateIdLogCECA(); writeLog($idLog.' - Conexión - ',true);

$cecamodule = new cecamodule();

if (!empty($_POST)){ $MerchantID = $_POST["MerchantID"]; $AcquirerBIN = $_POST["AcquirerBIN"]; $TerminalID = $_POST["TerminalID"]; $Num_operacion = $_POST["Num_operacion"]; $Importe = $_POST["Importe"]; $Tipo_moneda = $_POST["TipoMoneda"]; $Exponente = $_POST["Exponente"]; $Referencia = $_POST["Referencia"]; $signature = $_POST["Firma"]; $Num_aut = $_POST["Num_aut"]; $moneda_tienda = 1; // Euros

$ImporteEUR = round(floatval($Importe/100), 2);

$key = Configuration::get('CECA_ClaveCifrado');
$local_signature = sha1($key.$MerchantID.$AcquirerBIN.$TerminalID.$Num_operacion.$Importe.$Tipo_moneda.$Exponente.$Referencia);

writeLog($idLog.' - IP: '.$_SERVER['REMOTE_ADDR'].' - ',true);
writeLog($idLog.' - Número de operación: '.$Num_operacion.' - ',true);
writeLog($idLog.' - Firma calculada: '.$local_signature.' - ',true);
writeLog($idLog.' - Firma CECA: '.$signature.' - ',true);
writeLog($idLog.' - Referencia: '.$Referencia.' Número de Autorización: '.$Num_aut.' - ',true);
writeLog($idLog.' - ------------ - ',true);

if ($signature != $local_signature){
    writeLog($idLog.' - Error: Las firmas no coinciden - ',true);
    writeLog($idLog.' - Devolviendo error desde plataforma - ',true);
    echo "Error: Las firmas no coinciden";
}else{
    /** Objetos para confirmar el pedido **/
    $pedidoSecuencial = $Num_operacion;
    $pedido = intval(substr($pedidoSecuencial, 0, 11));
    $cart = new Cart($pedido);

    /** Validación cliente **/
    $customer = new Customer((int)$cart->id_customer);

    /** VALIDACIONES DE DATOS y LIBRERÍA **/
    //Total
    writeLog($idLog.' -- Total (' . $Num_operacion . '): '.$ImporteEUR.' €',true);
    writeLog($idLog.' - ------------ - ',true);
    writeLog($idLog.' - Success: Las firmas coinciden - ',true);
    writeLog($idLog.' - Devolviendo estado PAGADO desde plataforma - ',true);
    $cecamodule->validateOrder($cart->id, _PS_OS_PAYMENT_, $ImporteEUR, $cecamodule->displayName, null, array(), (int)$cart->id_currency, $cecamodule->l('Pago recibido. Número de autorización: ').$Num_aut, $customer->secure_key);
    echo '$*$OKY$*$';
}

}else{ writeLog($idLog.' - Acceso no autorizado, conexión no realizada por POST - ',true); writeLog($idLog.' - Devolviendo error desde plataforma - ',true); echo "Error: Acceso no autorizado."; }

?>`

dfragac commented 6 years ago

Ambos archivos están bien. El tema es que el validation.php te está dando un 404, es decir, no encuentra el endpoint. ¿Puedes tener algún problema con las reglas de URL? (Igual te está intentando validar alguna url o redirigir a otro sitio y no lo encuentra). Comprueba el nombre del archivo validation.php (mayúsculas, etc... si el server es Linux te puede dar problemas por eso aunque es raro). y las reglas de las URL.

krrtcaurel commented 6 years ago

El nombre, la verdad esta bien, tiene incluso 0666 en permisos y he probado con 0777 .Esta es la configuracion de las url:

image

Si el archivo esta bien, podria ser alguna conf a mayores del PS?? La verdad es que estoy perdido

dfragac commented 6 years ago

¿Has probado a desactivar la URL amigable (aunque parezca que mod_rewrite no está activo por si es un falso positivo? Prueba a quitarlo y eliminar la caché.

krrtcaurel commented 6 years ago

Gracias por la respuestas @dfragac . Pero lo acabo de probar y no va

EDITO: En otra tienda , con la pasarela de esta funciona. Es decir, la conf y el modulo es correcto, ahora tengo que mirar que tiene mal esa instalación de PS1.7.3 ..Gracias

xonsuns commented 6 years ago

hola , lo primero muchas gracias por el módulo! Me ocurre lo mismo que a @krrtcaurel, tengo acceso correcto al validation.php, el pago se completa en la pasarela y todo es correcto pero no se completa al volver en la web (no borra el carrito, no genera el pedido o resta stock), ni mail de confirmación, etc Tambien he probado con permisos 666 y 777, sin resultado. Es una tienda que tenia en 1.6.4.2 y la he actualizado a 1.7.4.3, si te ayuda de algo

https://www.nac-inter.com/3MPeltor/modules/cecamodule/validation.php

krrtcaurel commented 6 years ago

Hola @xonsuns . Yo lo he resuelto comprando un módulo. Pero tampoco iba y me lo arreglaron cambiando los permisos de las carpetas por ftp. Dentro de la carpeta modulos/ceca.... Los permisos se han modificado a 755 para directorios y 644 para ficheros. Pruebalo y me dices. Saludos

xonsuns commented 6 years ago

Gracias pues lo probaré a ver si eso lo soluciona. Un saludo!

xonsuns commented 6 years ago

@krrtcaurel @dfragac no lo soluciona con esos permisos (755 dir, 644 file), he cambiado a 777 para todos y tampoco. El archivo lo carga correctamente pero entra en el if de (!empty($_POST)) como si no hubiera campos POST, y escribe lo siguiente en el LOG

23-10-2018 09:55:13 -- fxlPevlW05Uyiw6wxNSt - Conexión - 23-10-2018 09:55:13 -- fxlPevlW05Uyiw6wxNSt - Acceso no autorizado, conexión no realizada por POST - 23-10-2018 09:55:13 -- fxlPevlW05Uyiw6wxNSt - Devolviendo error desde plataforma -

xonsuns commented 6 years ago

Bueno dejo esto aqui por si ayuda a alguien, he conseguido que funcione comentando las lineas de validation.php

/if (isset(Context::getContext()->controller)) { $controller = Context::getContext()->controller; } else { $controller = new FrontController(); $controller->init(); $controller->setMedia(); } Tools::displayFileAsDeprecated(); $controller->displayHeader();/

Que consecuencias tiene no las se, el pedido en principio viene correcto, el stock se resta y envía el correo

hugmax commented 4 years ago

yo tengo el mismo error y no encuentro la solucion.

$cecabank->validateOrder( $cart->id, _PS_OS_PAYMENT_, ((int) $importe) / 100, $cecabank->displayName, $cecabank->l(sprintf('Cecabank transaction ID: %s.', $reference)), array('transaction_id' => $reference), null, false, $customer->secure_key, null );

esta funcion no la encuentro en cecabank.php

PHP 7.2

rakeshlg90 commented 2 years ago

Al hacer un pago usando el módulo no reconoce que se halla completado el pedido y sigue apareciendo en el carrito, pero el pago se hace correctamente.

La configuracion del tpv es la siguiente: Comunicación on-line OK: Sí URL online OK: https:///modules/cecamodule/validation.php Respuesta requerida OK: No

Si pongo Respuesta requerida OK: Sí, el pago da error de comunicación.

Gracias

EDITO:

El error que me da al intetnar acceder a la url de /modules/cecamodule/validation.php es Error http 500

-> SOLUCION: <- En el URL online OK, en la configuración del Ceca acceso online: tienes que incluir el "www" -> https://"www."(nombredominio).com/.......
sin el www. no va a funcionar

tenía el mismo problema y agregando esto ya se solucionó.