SDK de Reembolsos y Anulaciones

Esta funcionalidad te permite solicitar la cancelación o el reembolso de transacciones autorizadas o cobradas. Puedes crear la solicitud utilizando los métodos de reembolso (Refund) o de cancelación (Void) de acuerdo con el estado de la transacción.

Para integrarte con el SDK de Reembolsos y Anulaciones, apunta tus peticiones a las siguientes URLs de acuerdo con tu ambiente.

// URL para pruebas: https://sandbox.api.payulatam.com/payments-api/
PayU.paymentsUrl = https://api.payulatam.com/payments-api/”;
// URL para pruebas: https://sandbox.api.payulatam.com/reports-api/
PayU.reportsUrl = https://api.payulatam.com/reports-api/”;
// URL para pruebas: https://sandbox.api.payulatam.com/payments-api/4.0/service.cgi
Environment::setPaymentsCustomUrl(“https://api.payulatam.com/payments-api/4.0/service.cgi”);
// URL para pruebas: https://sandbox.api.payulatam.com/reports-api/4.0/service.cgi
Environment::setReportsCustomUrl(“https://api.payulatam.com/reports-api/4.0/service.cgi”);

Si necesitas entender los conceptos y leer más consideraciones sobre Reembolsos y Anulaciones, consulta este artículo.

Consideraciones por país

Antes de utilizar el API de Reembolsos y Anulaciones, ten en cuenta las siguientes consideraciones.

Argentina

  • El tiempo máximo para enviar una anulación es 14 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se anula automáticamente.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 365 días y 180 días para reembolsos parciales.
  • No se soportan reembolsos con decimales.
  • Cuando se aprueba el reembolso, el pagador obtiene su dinero en máximo 30 días hábiles.

Brasil

  • El tiempo máximo para enviar una anulación es siete (7) días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se cancela.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 90 días para transacciones procesadas en Redecard y 120 para transacciones procesadas en Cielo.
  • Cuando se aprueba el reembolso, el pagador obtiene su dinero en máximo 15 días hábiles.

Chile

  • Debido a restricciones de la red, se pueden autorizar anulaciones dentro de las tres primeras horas luego de la autorización. Si no se acepta la anulación o no se envía una captura luego de siete (7) días, la transacción se anula automáticamente.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 90 días.
  • No se soportan reembolsos con decimales.
  • Cuando se aprueba un reembolso, el pagador obtiene su dinero en 8 a 20 días hábiles.
  • Los reembolsos parciales para transacciones que utilizan cuotas se reciben en línea pero son procesados de forma manual debido a restricciones de la red adquirente.
  • El valor mínimo para enviar un Reembolso es 10 CLP.

Colombia

  • Voids are not supported.
  • The minimum time to send a refund is 10 minutes after the approval and the maximum is two years.
  • Minimum amount to send the Refund 300 COP.
  • If refund is not sent the same day in which the transaction was captured (before 9 pm UTC-5) the refund goes immediately to a manual process without sending the online attempt.
  • When a refund is approved, the payer gets the money back in maximum 30 working días.
  • Partial refunds are not available for international credit cards.

México

  • El tiempo mínimo para enviar una anulación (Void) es 10 minutos luego de la autorización y el máximo es 30 días. Si la transacción se hizo con American Express, el tiempo máximo es siete (7) días.
    Si no se envía una anulación o una captura luego de este tiempo, la transacción se anula automáticamente.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 180 días. Si la transacción fue procesada por Bancomer, el tiempo máximo es 45 días.
  • Cuando se aprueba un reembolso, el pagador obtiene su dinero en 30 días hábiles.
  • No se soportan reembolsos con decimales.

Perú

  • Los días máximos para enviar una autorización son:
    • Visa: 21 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se captura automáticamente.
    • Mastercard: 28 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se captura automáticamente.
    • American Express: 30 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se anula automáticamente.
    • Diners: 11 días. Si no se envía una anulación o una captura luego de este tiempo, la transacción se anula automáticamente.
  • El tiempo mínimo para enviar un reembolso es 10 minutos luego de la aprobación y el máximo es 180 días.
  • Se soportan reembolsos parciales para transacciones sin cuotas. Ten en cuenta que las transacciones en una cuota son consideradas como sin cuotas.
  • Los Reembolsos parciales con visanet deben enviarse un día después.
  • Cuando se aprueba un reembolso, el pagador obtiene su dinero en 15 to 25 días hábiles.
  • La cantidad mínima para enviar un Reembolso es 1 USD o 1 PEN.

Anulación (Void)

Le método VOID cancela una transacción previamente autorizada. La anulación es un procedimiento automático, tan pronto envías la petición de VOID, no sigue ningún flujo de aprobación y la transacción no se cobra al tarjetahabiente.

Llamado del método

Los siguientes ejemplos muestra cómo llamar los métodos para esta transacción de acuerdo con el lenguaje de programación.

Map<String, String> parameters = new HashMap<String, String>();

// Ingresa aquí el ID de la orden.
parameters.put(PayU.PARAMETERS.ORDER_ID, "40049920");

// Ingresa aquí el ID de la transacción.
parameters.put(PayU.PARAMETERS.TRANSACTION_ID, "96535b36-99db-4c66-bd87-6ad5c59b25a8");

// Ingresa la razón de la anulación. Opcional
parameters.put(PayU.PARAMETERS.REASON, "Razón para solicitar la anulación de la transacción");

TransactionResponse response = PayUPayments.doVoid(parameters);

// Respuesta
if (response != null){
  response.getOrderId();
  response.getState();
  response.getPendingReason();
  response.getResponseMessage();
}
$parameters = array(
	// Ingresa aquí el ID de la orden.
	PayUParameters::ORDER_ID => "40049920",

	// Ingresa aquí el ID de la transacción.
	PayUParameters::TRANSACTION_ID => "96535b36-99db-4c66-bd87-6ad5c59b25a8",

	// Ingresa la razón de la anulación. Opcional
	PayUParameters::REASON => "Razón para solicitar la anulación de la transacción",
);

$response = PayUPayments::doVoid($parameters);

if ($response) {
	$response->transactionResponse->orderId;
	$response->transactionResponse->state;
	$response->transactionResponse->pendingReason;
	$response->transactionResponse->responseMessage; 
}

Reembolsos (Refunds)

Un reembolso se solicita cuando una tienda decide voluntariamente regresar el dinero al cliente debido a razones de insatisfacción o cuando la tienda no tiene suficiente inventario del producto comprado. El método REFUND solicita el reverso de una transacción previamente capturada.

Los reembolsos pueden ser solicitados por la cantidad total o parcial (PARTIAL REFUND).

Llamado del método

Los siguientes ejemplos muestra cómo llamar los métodos para esta transacción de acuerdo con el lenguaje de programación.

Reembolso

Map<String, String> parameters = new HashMap<String, String>();

// Ingresa aquí el ID de la orden.
parameters.put(PayU.PARAMETERS.ORDER_ID, "40049920");

// Ingresa aquí el ID de la transacción.
parameters.put(PayU.PARAMETERS.TRANSACTION_ID, "96535b36-99db-4c66-bd87-6ad5c59b25a8");

// Ingresa aquí la razón del reembolso
parameters.put(PayU.PARAMETERS.REASON, "Razón para solicitar el reembolso de la transacción");

TransactionResponse response = PayUPayments.doRefund(parameters);

// Respuesta
if (response != null){
  response.getOrderId();
  response.getState();
  response.getPendingReason();
  response.getResponseMessage();
}
$parameters = array(
	// Ingresa aquí el ID de la orden.
	PayUParameters::ORDER_ID => "40049920",

	// Ingresa aquí el ID de la transacción.
	PayUParameters::TRANSACTION_ID => "96535b36-99db-4c66-bd87-6ad5c59b25a8",

	// Ingresa aquí la razón del reembolso
	PayUParameters::REASON => "Razón para solicitar el reembolso de la transacción",
);

$response = PayUPayments::doRefund($parameters);

if ($response) {
	$response->transactionResponse->orderId;
	$response->transactionResponse->state;
	$response->transactionResponse->pendingReason;
	$response->transactionResponse->responseMessage; 
}

Reembolso parcial

Map<String, String> parameters = new HashMap<String, String>();

// Ingresa aquí el ID de la orden.
parameters.put(PayU.PARAMETERS.ORDER_ID, "40049920");

// Ingresa aquí el ID de la transacción.
parameters.put(PayU.PARAMETERS.TRANSACTION_ID, "96535b36-99db-4c66-bd87-6ad5c59b25a8");

// -- Valor de reembolso parcial --
// Ingresa aquí el valor del reembolso parcial.
parameters.put(PayU.PARAMETERS.VALUE, "950");
// Ingresa aquí la moneda.
parameters.put(PayU.PARAMETERS.CURRENCY, ""+Currency.CLP.name());

// Ingresa aquí la razón del reembolso parcial
parameters.put(PayU.PARAMETERS.REASON, "Razón para solicitar el reemplazo parcial de la transacción");

TransactionResponse response = PayUPayments.doPartialRefund(parameters);

// Respuesta
if (response != null){
  response.getOrderId();
  response.getState();
  response.getPendingReason();
  response.getResponseMessage();
}
$parameters = array(
	// Ingresa aquí el ID de la orden.
	PayUParameters::ORDER_ID => "40049920",

	// Ingresa aquí el ID de la transacción.
	PayUParameters::TRANSACTION_ID => "96535b36-99db-4c66-bd87-6ad5c59b25a8",

  // -- Valor de reembolso parcial --
  // Ingresa el valor del reembolso parcial.
  PayUParameters::VALUE => "950",
  // Ingresa aquí la moneda.
  PayUParameters::CURRENCY => "CLP",

	// Ingresa aquí la razón del reembolso parcial
	PayUParameters::REASON => "Razón para solicitar el reemplazo parcial de la transacción",
);

$response = PayUPayments::doPartialRefund($parameters);

if ($response) {
	$response->transactionResponse->orderId;
	$response->transactionResponse->state;
	$response->transactionResponse->pendingReason;
	$response->transactionResponse->responseMessage; 
}

Consultar los estados de los Reembolsos

Como mencionamos anteriormente, la solicitud de reembolso tarda entre 1 y 3 días en ser procesada y aprobada o rechazada. Si deseas saber el estado de un reembolso, tienes dos opciones:

Verificar el estado en el Módulo PayU

  1. Ingresa a tu cuenta PayU. En el panel izquierdo, expande el menú Transacciones y selecciona la opción Reporte de ventas.

PrintScreen

  1. Utiliza el campo Filtrar mis ventas para encontrar la orden utilizando su ID y el ID de la transacción.

PrintScreen

  1. La columna estado muestra si el reembolso a sido aprobado o rechazado; si no ha sido aprobado, esta columna muestra que se ha solicitado un reembolso.

PrintScreen

Verificar el estado utilizando consultas

Puedes consultar el estado de un reembolso utilizando el API de consultas. En la petición de la consulta, necesitas enviar el id de la orden.

Cuando consultas una orden, el sistema retorna su última transacción.

Hay tres posibles estados en la respuesta de tu solicitud:

  • Solicitud no resuelta: si la solicitud no ha sido resuelta, la orden que aparece en la consulta está en estado CAPTURED, el primer tipo de transacción es AUTHORIZATION_AND_CAPTURE y el primer estado de la transacción es APPROVED.
  • Aprobada: si la solicitud de reembolso ha sido aprobada por un agente de servicio de PayU, la orden que aparece en la consulta está en estado REFUND y el primer estado de la transacción es APPROVED.
  • Declinada: si la solicitud de reembolso ha sido declinada por un agente de servicio de PayU, la orden que aparece en la consulta está en estado CAPTURED , el primer tipo de transacción es REFUND y el primer estado de la transacción es DECLINED.
Última modificación 24 de junio de 2022: clon issue (d73e43fe)