Estoy usando el sandbox y en algunos momentos deja de responder el api (se queda esperando) por lo cual la petición se cae en el servidor.

Mi punto de vista es tener un timeout en el curl de mercadopago.php (no se si de ustedes dependa este cliente), además deberíamos insertar la transacción como pendiente dado que podemos ni enterarnos de que método de pago intentó usar el cliente y lo que sucedió.

Es decir si el api falla y no se puede obtener la información del pago al menos dejarla como pendiente para manualmente poderla confirmar posteriormente.

Saludos

Comments

ropic created an issue.

jrviorato’s picture

Hola,

Me podrías dar más información de cuándo ocurre esto. ¿Es cuando llega la notificación de mercado pago?

No me había encontrado con el caso en que fallara la conexión con el API, ¿esto te ocurre con frecuencia?

Por otro lado, no sería fácil poner la orden en pendiente si no se logra la comunicación con la API, es que precisamente la información para saber a qué orden se refiere la noticación no llega con la notificación de la API sólo llega un ID de transacción que fue creado por Mercado Pago, luego es necesario conectarse a la API para pedir más información sobre dicha transacción y así obtener de qué orden se trata.

Si hubo una falla de conexión, lo que podemos hacer es notificar a la API sobre que no pudimos procesar su notificación y que intente más tarde. La api intentará de nuevo unos minutos después.

Veré en los próximos días qué se puede hacer, aunque antes de hacer algo me gustaría saber qué tan frecuente y molesta es la falla de conexión.

P.D. Sobre mercadopago.php, sí, no depende de mi. Este módulo (Mercado pago for drupal commerece) es una programación independiente que hice, no trabajo ni conzco a la gente de MercadoPago. En especial, no conozco al programador de mercadopago.php (el SDK de mercadopago para PHP).

ropic’s picture

Hola Jesús,

Efectivamente es al estar esperando la respuesta de la api de mercadopago, es decir luego de recibir la notificación, concretamente en:

$payment_info = $mp->get_payment_info('' . $ipn["id"]);

Y en efecto encontré hace unas horas que no tenemos posibilidad de conocer el número de orden para guardar la transacción al recibir la notificación, solo que registraramos la transacción antes de enviar al usuario a mercado pago con un estado "temporal" y se reutilice al poder conectarnos para confirmar.

jrviorato’s picture

La idea creo que funcionaría, lamentablemente creo que requerirá un tiempo largo de programación, ya que implicaría varios cambios en la programación actual, según entiendo habría que hacer lo siguiente:

  • Mantener una tabla en drupal que guarde las relaciones de los ID de MP con los ID de transacciones (tal vez sea mejor relacionarlo con la Orden ID)
  • Luego, cada que se genere la forma de redireccionamiento, crear una transacción en la orden y una entrada en la tabla anterior.
  • Después, en caso de falla de comunicación se deberá acudir a la tabla de relaciones anterior para extraer a partir del ID de MP el ID de la transacción y actualizar el estatus del pago con un mensaje como; connection time out with API
  • Disparar Checkout complete

Pero no imagino qué tan importante es realizar estos cambios, y revisando otros módulo de pago como el de PayPal, no veo que se tomaran la molestia en programar algo así (también requieren hacer una llamada al API de PayPal).

Tal vez una solución más simple, que seguramente no cumplirá con todas las necesidades es lo siguiente:

  • Poner el timeout
  • Cuando falle por timeout, notificar a MP mandando un header con el error y su correspondiente log en watchdog
  • MP nos enviará una notificación de nuevo minutos más tarde y esperemos que ahora no falle.

Con esto, el usuario sentirá únicamente que tardó en confirmarse su pago, pero esperemos que esto sea poco usual.

¿Con qué frecuencia te ocurre el problema que mencionas?¿Y qué tanto tiempo se queda colgado el servidor?

ropic’s picture

Entiendo perfectamente lo del tiempo requerido, te quise dar la sugerencia por si en el futuro aplica como mejora.

No lo se, truena a los 30segs la petición por mi configuración en el servidor lo malo es que ante esta circunstancia no se reporta nada.

Ayer estuve haciendo pruebas de mi sistema usando el modo sandbox y comenzó a ocurrirme por la noche.