SDK de Reembolsos y Anulaciones
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
- Ingresa a tu cuenta PayU. En el panel izquierdo, expande el menú Transacciones y selecciona la opción Reporte de ventas.
- Utiliza el campo Filtrar mis ventas para encontrar la orden utilizando su ID y el ID de la transacción.
- 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.
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 esAUTHORIZATION_AND_CAPTURE
y el primer estado de la transacción esAPPROVED
. - 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 esAPPROVED
. - 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 esREFUND
y el primer estado de la transacción esDECLINED
.