jesusangel / wc-sermepa

Sermepa payment gateway plugin for WooCommerce
Other
28 stars 16 forks source link

Problema al enviar importe y (creo que) numero de order desde WC 3.2 #35

Closed sc-sycer closed 6 years ago

sc-sycer commented 7 years ago

Parece que el problema viene de como esta pillando el importe, no se si habran cambiado algo o si sera de otra cosa, pero podeis ver el problema aqui:

http://www.furrnion.org/es/finalizar-compra/order-pay/2882?pay_for_order=true&key=wc_order_59a37610ace13

Muchas gracias por adelantado por ayudarme!

sc-sycer commented 7 years ago

Lo del numero de order debe estar relacionado porque aparece como 0 en el log:

08-28-2017 @ 04:01:02 - Generating payment form for order #0. Notify URL: http://www.furrnion.org/es/?wc-api=WC_MyRedsys 08-28-2017 @ 04:01:02 - Sending data to Redsys Array ( [Ds_SignatureVersion] => HMAC_SHA256_V1 [Ds_MerchantParameters] => eyJEU19NRVJDSEFOVF9BTU9VTlQiOiIwIiwiRFNfTUVSQ0hBTlRfT1JERVIiOiIwMDAwMDAwMDAxMDIiLCJEU19NRVJDSEFOVF9NRVJDSEFOVENPREUiOiIzMzU1ODI3NDgiLCJEU19NRVJDSEFOVF9DVVJSRU5DWSI6Ijk3OCIsIkRTX01FUkNIQU5UX1RSQU5TQUNUSU9OVFlQRSI6IjAiLCJEU19NRVJDSEFOVF9URVJNSU5BTCI6IjAwMSIsIkRTX01FUkNIQU5UX01FUkNIQU5UVVJMIjoiaHR0cDpcL1wvd3d3LmZ1cnJuaW9uLm9yZ1wvZXNcLz93Yy1hcGk9V0NfTXlSZWRzeXMiLCJEU19NRVJDSEFOVF9VUkxPSyI6Imh0dHA6XC9cL3d3dy5mdXJybmlvbi5vcmdcL2VzXC9maW5hbGl6YXItY29tcHJhXC9vcmRlci1yZWNlaXZlZFwvMD9rZXkiLCJEU19NRVJDSEFOVF9VUkxLTyI6Imh0dHA6XC9cL3d3dy5mdXJybmlvbi5vcmdcL2VzXC9jYXJyaXRvXC8/Y2FuY2VsX29yZGVyPXRydWUmYW1wO29yZGVyJmFtcDtvcmRlcl9pZD0wJmFtcDtyZWRpcmVjdCZhbXA7X3dwbm9uY2U9YzZkMDhiZmI2OSIsIkRzX01lcmNoYW50X0NvbnN1bWVyTGFuZ3VhZ2UiOiIwMDEiLCJEc19NZXJjaGFudF9Qcm9kdWN0RGVzY3JpcHRpb24iOiIiLCJEc19NZXJjaGFudF9UaXR1bGFyIjoiRnVycm5pb24iLCJEc19NZXJjaGFudF9NZXJjaGFudERhdGEiOiIyYzJjMGJhYzRlM2FjYWIxNjQyNDEwMjVlZjI1YmVhMzg1YzU0ZTkzIiwiRHNfTWVyY2hhbnRfTWVyY2hhbnROYW1lIjoiRnVycm5pb24iLCJEc19NZXJjaGFudF9QYXlNZXRob2RzIjoiVCIsIkRzX01lcmNoYW50X01vZHVsZSI6Indvb2NvbW1lcmNlIn0= [Ds_Signature] => QvzILNXpla12K5t4eO0mcy/N13NDiH+Ian22Bm7G1kk= )

jesusangel commented 7 years ago

Hola.

¿Es posible que uses PHP 7? Asegúrate de tener actualizado el plugin. La última versión (1.2.5) corrige un par de cosas para que funcione sobre PHP 7.1

Saludos cordiales.

sc-sycer commented 7 years ago

Hola! no, estoy usando 5.6, y estoy con la ultima version del plugin. Mi sospecha esta en que yo creo que woo debe estar enviando los datos en otra clase que no es '$order'. Luego lo investigo y os digo algo. El tema es que estoy usando woo 3.2 (que la version oficial no sale hasta el 4 de octubre) porque necesitaba lo de poder usar cupones en pedidos de administrador, aunque me imagino que no habran cambiado algo tan critico como esa clase en una version menor..

sc-sycer commented 7 years ago

Vale, ya veo donde esta el problema. La funcion receipt_page esta recibiendo un parametro $order nulo, con lo que a partir de ahi todo viene mal y no sabe que numero de orden u objeto buscar para coger mas adelante los datos. Sigo indagando, pero si es fallo de vuestro plugin me extraña que nadie mas tenga ese problema!

sc-sycer commented 7 years ago

Efectivamente, aunque yo no se si es por culpa de woo 3.2 o el plugin, pero lo he resuelto de la siguiente manera (no quiero comitearlo porque no estoy seguro de a que se debe e implica tambien un tweakeo de woo):

Dentro de Woocommerce/templates/checkout/order-receipt.php

Debajo de la linea 24, que contiene <ul class="order_details">

He forzado que duplique el objeto $order, que hasta ahi se estaba llevando bien. <? global $order2; $order2 = $order; ?>

Luego en wc_redsys_payment_gateway.php me he aprovechado de ella:

            function receipt_page( $order ) {
                echo '<p>'.__('Thank you for your order, please click the button below to pay with Redsys.', 'wc_redsys_payment_gateway').'</p>';
                if (!$order) {
                    global $order2;
                    $order = $order2;
                }
                echo $this->generate_redsys_form( $order );

            }

Si veis que os arroja algo de luz, me alegro haber podido contribuir. Aprovecho para agradeceros el magnifico trabajo y la generosidad en compartir el plugin. Nos habia funcionado muy bien hasta ahora, asi que estoy por apostar que es algun bug del propio woo 3.2 por ser aun una version beta.

jesusangel commented 7 years ago

Gracias por la información. Echaré un vistazo al changelog de WooCommerce 3.2 a ver si han cambiado algo del API que pueda explicar este caso. Tal vez podrías abrir un bug para que lo revisasen ellos en paralelo por si como dices fuera un problema por su parte.

Saludos cordiales.

michaelmmadsen commented 7 years ago

Hola.

Tengo el mismo problema: Numero de pedido y precio no llegan.

A ver si encuente una solución. Un saludo.

jesusangel commented 7 years ago

Hola.

¿Que versiones de Wordpress, WooCommerce y del plugin tienes? ¿Podrías indicar la URL de tu tienda para echar un vistazo?

Saludos cordiales.

michaelmmadsen commented 7 years ago

Buenas noches,

Gracias por tu mensaje. Versiones:

WordPress 4.8 WooCommerce 3.1.2 Sermepa Gateway: no encuentro ninguna indicación de la versión, pero lo acabo de descargar ayer de la página de WordPress, supongo que sea el más nuevo.

Mi tienda (en pruebas, sin terminar): http://andalucia.autentical.com/shop/ checkout: http://andalucia.autentical.com/checkout/

REDSYS indica: Importe 0 Sin Asignar

“Error en datos enviados. Contacte con su comercio.”

Espero que eso te ayude.

Un saludo. Michaelmmadsen

sc-sycer commented 7 years ago

Mientras los desarrolladores no den con una solucion mejor, haced lo que hice yo que explico mas arriba, y os funcionara.

michaelmmadsen commented 7 years ago

Gracias. Lo iba a hacer, pero dentro de

Woocommerce/templates/checkout/

no hay ningún

order-receipt.php

carmenates09 commented 7 years ago

Hola, hola, @michaelmmadsen qué versión de PHP estás usando?

Todavía sigues presentando el problema?

Yo probe con WordPress 4.8 y WooCommerce 3.1.2, y me funciona bien. En cuanto me respondan los podre ayudar.

Saludos.

michaelmmadsen commented 7 years ago

Hola carmenates09,

Uso PHP 5.6 Podría activar PHP 7 si fuera necesario...

Todavía tengo el problema, si. Redsys siempre me da el error "Error en datos enviados" y indica "Importe 0 Sin Asignar"

Y la solución que sugere Salmy no me sirve porque no existe el archivo que menciona en mi instalación...

Agradecería tu ayuda. Un saludo.

carmenates09 commented 7 years ago

@michaelmmadsen, Lo entiendo perfectamente y deseo ayudarlo.

Si puedes hagamos una prueba:

Necesito que si puede edite el siguiente fichero wp-content/plugins/woocommerce-sermepa-payment-gateway/wc_redsys_payment_gateway.php

y busque la línea:

'DS_MERCHANT_AMOUNT' => (string)$importe,

y la reemplace por:

'DS_MERCHANT_AMOUNT' => $importe,

La idea es que remueva (string).

Y nos deja saber si le funciona, y nosotros entonces hacemos la validación de la versión php, y en minutos usted ya tendrá el problema resuelto sin necesidad de actualizar su versión php.

Pero solo necesito que me confirme si es esa o no la solución.

Muchas gracias.

michaelmmadsen commented 7 years ago

Gracias por la sugerencia.

Lo he probado y sigue igual con esta modificacion: "Error en datos enviados" y "Importe 0 Sin Asignar "

Pero gracias por intentarlo.

carmenates09 commented 7 years ago

@michaelmmadsen, crees que pudieses sustituir la variable $importe por 9999, e intentar nuevamente, esto le debe enviar a redsys 99,99.

Si lo desea me puede adicionar al chat de gmail jramoscarmenates[at]gmail.com

Lo intentare ayudar pues su problema puede ser el de muchos, saludos.

michaelmmadsen commented 7 years ago

Gracias por intentarlo, carmenates09

Desafortunadamente este intento tampoco dió resultado distinto: Todavía da "Importe 0 Sin Asignar".

chat de gmail no tengo...

michaelmmadsen commented 7 years ago

Salmy:

He localizado las líneas que menciona, aunque el fichero se llamaba otra cosa en mi instalación. He realizado los cambios que recomenda, pero siguo teniendo Importe 0, sin asignar....

Alguna sugerencia?

jesusangel commented 7 years ago

Hola.

Reemplaza el contenido del archivo wc_redsys_payment_gateway.php con el del archivo adjunto, activa la depuración en la configuración del plugin de pago, añade algún producto a tu cesta y completa el proceso de pago hasta llegar a la pasarela del TPV. Por último copia y pega el contenido del log en tu respuesta. El log lo encontrarás en wp-content/plugins/woocommerce/logs/sermepa.txt

wc_redsys_payment_gateway.txt

michaelmmadsen commented 7 years ago

Gracias jesusangel. Lo voy a probar. Pero me puede explicar que significa "...activa la depuración en la configuración del plugin de pago...", por favor? Gracias de antemano.

jesusangel commented 7 years ago

Sí. En la zona de configuración del método de pago Redsys, donde están las opciones de código de comercio, clave, etc. hay una opción que es activar el log. Me refería a esa. Si no recuerdo mal es la última de todas.

michaelmmadsen commented 7 years ago

Ya lo he probado: 1) He reemplazado el contenido del fichero wc_redsys_payment_gateway.php con el nuevo. 2) He activado logging en Payment Gateway REDSYS en WordPress 3) He realizado una compra. A diferencia de antes ya no llega el mensaje de REDSYS indicando Importe 0; sin asignar. Al contrario se queda en la pantalla Checkout:"Gracias por su compra", aparentemente sin continuar hasta REDSYS. 4) Luego he buscado el fichero log , tanto en el enlace wp-content/plugins/woocommerce/logs/ como en el enlace que me da WordPress: wp-content/uploads/sites/2/wc-logs/ (es una instalación multisite) PERO: No hay ficheros de log en ninguno de los dos... (solo hay los ficheros .htaccess y index.html)

A conclusión parece que no llega a pasar la compra hasta REDSYS, por lo que no genera ningún fichero log.

jesusangel commented 7 years ago

Buenos días.

Vaya, lo siento. Me equivoqué en la línea 528:: $this->log->add( 'redsys', 'Getting order with id ' . $order_id() ); Debe ser: $this->log->add( 'redsys', 'Getting order with id ' . $order_id );

¿Puedes corregir el error y probar de nuevo? Deberías llegar hasta la pasarela de Redsys y tener un fichero de log.

Saludos cordiales.

michaelmmadsen commented 7 years ago

Gracias. Pero sigue igual... Indica "please click the button below to pay with Redsys", pero no hay nada en que se puede hacer clic.

Pero por lo menos ha generado un log ahora:

redsys-5bc3467fd4c0406853679cbc458de374.log

jesusangel commented 7 years ago

Hola de nuevo.

Parece que ha fallado al obtener el pedido:

`$order = new WC_Order( $order_id );

if ( 'yes' == $this->debug ) { $this->log->add( 'redsys', 'Order data: ' . print_t( $order, true ) ); }`

El log se queda en la línea anterior "Getting order with id 1481" pero luego no aparece nada sobre el pedido que se debería haber obtenido.

¿Podrías echar un vistazo al log de errores de tu servidor web? Si el servidor es Apache y lo gestionas con algún panel de control lo encontrarás en la carpeta logs en la carpera raíz de tu alojamiento. Al final debe aparecer algún error de PHP.

Saludos cordiales.

jesusangel commented 7 years ago

Intenta lo siguiente, cambia el texto $order = new WC_Order( $order_id ); por $order = wc_get_order( $order_id ); en las líneas 531, 631 y 722 y prueba de nuevo el pago.

michaelmmadsen commented 7 years ago

primero intenté de cambiar el new WC_Order por we_get_order. Sigue igual...

He encontrado un fichero .1 en logs. ?Es esa? GitHub no soporta estos ficheros .1...

fromcouch commented 7 years ago

Perdonar que me meta, @michaelmmadsen , tienes algun plugin extra del woocomerce? a mi el subscriptions me rompia por completo el woocomerce.

carmenates09 commented 7 years ago

@fromcouch tiene razón. Recomendaria que desactivara todos los plugines que esten activados.

Y muchas gracias.

On Nov 12, 2017 10:40 AM, "fromcouch" notifications@github.com wrote:

Perdonar que me meta, @michaelmmadsen https://github.com/michaelmmadsen , tienes algun plugin extra del woocomerce? a mi el subscriptions me rompia por completo el woocomerce.

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/jesusangel/wc-sermepa/issues/35#issuecomment-343745736, or mute the thread https://github.com/notifications/unsubscribe-auth/AEKjGTzs7o9fBN-noFJSMqv6cgBQXoiIks5s1xFvgaJpZM4PEA_S .

michaelmmadsen commented 7 years ago

Si, tengo el WooCommerce Accommodation Booking plugin activado.

Ahora he probado de desactivarlo y sigo teniendo los mismos resultados: Con el wc_redsys_payment_gateway.php modificado: "Gracias por su compra" y nada más. Con el wc_redsys_payment_gateway.php original: "Importe 0; sin asignar"

También he probado de desactivar los demás plugins que tengo, pero no cambia nada...

fromcouch commented 7 years ago

@michaelmmadsen que tema usas?

michaelmmadsen commented 7 years ago

INK (ThemeTrust)

michaelmmadsen commented 7 years ago

Ya he encontrado unos log de mi alojamiento que son ficheros .gz y que se pueden subir aquí. Subo 2 de ellos. Espero que sirvan:

andalucia.autentical.com.5.gz

andalucia.autentical.com.7.gz

jesusangel commented 7 years ago

Hola.

Esos logs son los de acceso. Se van rotando y comprimirendo periódicamente, de ahí los números .1, .2.gz, .3.gz, etc. El que nos interesa es el último, el que no tiene número. Si no te deja subirlo con el nombre original lo puedes renombrar antes de subirlo. En realidad, nos interesa más el log de errores. Será como el anterior, pero tendrá la palabra error en su nombre.

Saludos cordiales.

michaelmmadsen commented 7 years ago

el 7.gz es el último. No hay ninguno que se llama algo con 'error'. Luego hay uno que no tiene número. Pero es vacío.

Y uno que era un .1 fichero. Lo he re-nombrado aquí: andalucia.autentical.com.1.gz

Estos son todos los ficheros de la carpeta de log: andalucia.autentical.com (vacío) (no se puede subir por ser vacío)

andalucia.autentical.1 andalucia.autentical.com.1.gz

andalucia.autentical.2.gz andalucia.autentical.com.2.gz

andalucia.autentical.3.gz andalucia.autentical.com.3.gz

andalucia.autentical.4.gz andalucia.autentical.com.4.gz

andalucia.autentical.5.gz andalucia.autentical.com.5.gz

andalucia.autentical.6.gz andalucia.autentical.com.6.gz

andalucia.autentical.7.gz andalucia.autentical.com.7.gz

jesusangel commented 7 years ago

El fichero andalucia.autentical.1 sólo tiene registros del 11 de noviembre y el más antiguo, el número 7, del 14 de octubre. Pero en ambos casos hay muy pocos y sólo corresponden a un BOT que estuvo rastreando tu sitio.

Tiene que haber otros registros del servidor web con todas las pruebas que has realizado y con errores de PHP que seguramente se hayan dado. Consulta con tu proveedor de alojamiento para localizarlos ya que tendrán información útil para detectar el error.

Respecto al cambio que te indiqué, escribiste we_get_order en lugar de wc_get_order, no se si fue un errror al escribir el comentario o lo pusiste así en el código. En este último caso, debes escribir el nombre de la función correctamente, tal como te lo indiqué en el mensaje.

Saludos cordiales.

michaelmmadsen commented 7 years ago

"we" ha sido error al escribir el comentario aquí. En el código he puesto "wc".

Entonces hay estos: autentical.com.1.gz autentical.com.2.gz autentical.com.3.gz autentical.com.4.gz autentical.com.5.gz autentical.com.6.gz autentical.com.7.gz autentical.com.gz

jesusangel commented 7 years ago

Hola.

A ver, creo que estábamos mirando en el sitio equivocado. De todas formas, me sería de utilidad echar un vistazo a los logs de errores de tu servidor web. Los que has enviado hasta ahora son los de accesos. Los de errores serán algo así como autencical.com-error.

Creo que el problema está en la firma de los datos, tirando del hilo he conseguido reproducir el error que te da el TPV de Redsys y es el SIS0042 que significa que la firma de los datos no es correcta. Revisa que la clave secreta que has puesto en la configuración del módulo coincide con la que aparece en la página de administración del TPV.

Saludos cordiales.

michaelmmadsen commented 7 years ago

La clave estaba correcta. Pero he encontrado el problema.

En la configuración del Redsys en WordPress lo tenía puesto en modo "Test sis-t". Al cambiar esa configuración a "Production" funcionó inmediatamente. Aparentemente no debemos comprobarlo en modo test primero, sino configurarlo directamente a modo producción para que funcione.

Siento toda la molestia causado. Y le doy muchisimas gracias por ayudarme en el proceso.

Un saludo cordial.

jesusangel commented 7 years ago

Bueno, me alegro de que lo hayas solucionado. Como el hilo comenzó con problemas a la hora de enviar el importe, di por hecho que tu problema era el mismo. En realidad, en tu caso el importe se estaba enviando bien, pero al no ser correcta la firma, la interfaz de Redsys lo ponía como 0.

Lo correcto es empezar con las pruebas, y pasar a producción cuando éstas hayan finalizado correctamente. Pero si ya te funciona, pues perfecto.

Saludos cordiales.

jesusangel commented 6 years ago

Closed