mercadopago / DEPRECATED-sdk-php

DEPRECATED - MercadoPago PHP SDK
MIT License
1 stars 10 forks source link

PUT en payments permite transiciones inválidas de estados #50

Closed knifesk closed 9 years ago

knifesk commented 9 years ago

Buenas, realizando pruebas acabo de llegar a la conclusión de que enviando un PUT a la siguiente URL

https://api.mercadolibre.com/sandbox/collections/<id>/status?access_token=<token>

Puedo cambiar el estado de los pagos, incluso en transciones que no están especificadas en el grafico de cambios de estado

Si yo realizo un pago, y este pasa a estado approved, haciendo un PUT con la siguiente data

{"status":"refunded"}

El pago pasará a refunded y el sistema de MP enviará un IPN a mi servidor con el cual yo realizo las acciones necesarias en caso de un refund (en mi caso es emitir una nota de crédito automática)... Hasta aquí todo bien, pero si yo realizo otro PUT con la siguiente data:

{"status":"cancelled"}

El pago cambia de estado y recibo otro IPN, lo cual me da a entender que en el gráfico dicha transición no está dibujada, o es un error de sistema, o es a propósito en el modo Sandbox.. Entonces sigo probando; si cancelled es un estado final y yo realizo un PUT nuevamente con

{"status":"in_mediation"}

debería recibir un mensaje de error por intentar cambiar de un estado final a un estado no final (lo cual es un gravísimo error)... resulta ser que nó.. mercadopago actualiza nuevamente el estado del pago y recibo nuevamente un IPN notificando el cambio... Si yo nuevamente envío

{"status":"refunded"}

Mercadopago vuelve a enviarme la notificación del refund y mi sistema emite nuevamente la nota de crédito.. lo cual es un error crítico, ya que se emitieron 2 notas de crédito para el sistema y se incrementó 2 veces en mis stocks el producto por el cual el cliente inició el pago....

Pregunta: es el modo sandbox más flexible en cuanto al update de estados de los pagos, o en modo producción también puede hacerse lo mismo? Si la respuesta es lo segundo creo que MP debería solucionar este problema de manera urgente, ya que permite a la persona que esta cobrando manipular los estados de las operaciones y así generar incongruencias en el sitema

Saludos

sebagun commented 9 years ago

@knifesk, ese comportamiento sólo es factible en modo sandbox, y está hecho para que puedas probar la interacción de tu sistema ante cada uno de los estados y notificaciones posibles de un pago. No es posible realizar dicho cambio de estado en modo producción, de hecho esa API (collections/status) no existe en modo producción.

Saludos

knifesk commented 9 years ago

Ahhhh! Perfecto entonces, me quedo mas tranquilo :smiley: