API de Anulaciones y Reembolsos
Void
o Refund
.Nota
Para integrarte con la API de Anulaciones y Reembolsos, dirige tus solicitudes a la URL del entorno correspondiente:
- Pruebas:
https://sandbox.api.payulatam.com/payments-api/4.0/service.cgi
- Producción:
https://api.payulatam.com/payments-api/4.0/service.cgi
Para comprender mejor las anulaciones y reembolsos, incluidos los conceptos clave y consideraciones, consulta este documento.
Consideraciones por país
Antes de usar la API de Anulaciones y Reembolsos, ten en cuenta las siguientes consideraciones específicas por país.
Argentina
Anulaciones | Reembolsos |
---|---|
|
|
Brasil
Anulaciones | Reembolsos |
---|---|
|
|
Chile
Anulaciones | Reembolsos |
---|---|
|
|
Colombia
Anulaciones | Reembolsos |
---|---|
|
|
México
Anulaciones | Reembolsos |
---|---|
|
|
Panamá
Anulaciones | Reembolsos |
---|---|
|
|
Perú
Anulaciones | Reembolsos |
---|---|
|
|
Anulación
El método VOID
cancela una transacción previamente autorizada. Este es un proceso automático—tan pronto como se envía la solicitud VOID
, no sigue un flujo de aprobación y la transacción no se carga al titular de la tarjeta.
Parámetros para la Solicitud y Respuesta
Solicitud
Nombre del Campo | Formato | Tamaño | Descripción | Obligatorio |
---|---|---|---|---|
language |
Alfanumérico | 2 | Idioma utilizado en la solicitud. Esto determina el idioma de los mensajes de error. Ver idiomas compatibles. | Sí |
command |
Alfanumérico | Máx: 32 | Debe establecerse en SUBMIT_TRANSACTION . |
Sí |
test (JSON)isTest (XML) |
Booleano | — | Establezca en true para modo de prueba; de lo contrario, false . |
Sí |
merchant |
Objeto | — | Contiene los datos de autenticación. | Sí |
merchant > apiLogin |
Alfanumérico | Mín: 12, Máx: 32 | Usuario o login proporcionado por PayU. Cómo obtener API Login. | Sí |
merchant > apiKey |
Alfanumérico | Mín: 6, Máx: 32 | Contraseña proporcionada por PayU. Cómo obtener API Key. | Sí |
transaction |
Objeto | — | Contiene los datos de la transacción. | Sí |
transaction > order |
Objeto | — | Contiene los detalles de la orden. | Sí |
transaction > order > id |
Numérico | — | ID de la orden que se va a anular. | Sí |
transaction > type |
Alfanumérico | 32 | Establezca en VOID para cancelar una transacción autorizada. |
Sí |
transaction > reason |
Alfanumérico | — | Motivo de la anulación de la transacción. | No |
transaction > parentTransactionId |
Alfanumérico | 36 | ID de la transacción que se va a anular. | Sí |
Respuesta
Nombre del Campo | Formato | Tamaño | Descripción |
---|---|---|---|
code |
Alfanumérico | — | Código de respuesta de la transacción. Valores posibles: ERROR , SUCCESS . |
error |
Alfanumérico | Máx: 2048 | Mensaje de error cuando el código de respuesta es ERROR . |
transactionResponse |
Objeto | — | Contiene los detalles de la respuesta. |
transactionResponse > orderId |
Numérico | — | ID de la orden generada o existente en PayU. |
transactionResponse > transactionId |
Alfanumérico | 36 | ID de la transacción en PayU. |
transactionResponse > state |
Alfanumérico | Máx: 32 | Estado de la transacción. |
transactionResponse > paymentNetworkResponseCode |
Alfanumérico | Máx: 255 | Código de respuesta de la red financiera. |
transactionResponse > paymentNetworkResponseErrorMessage |
Alfanumérico | Máx: 255 | Mensaje de error de la red financiera. |
transactionResponse > trazabilityCode |
Alfanumérico | Máx: 32 | Código de trazabilidad de la red financiera. |
transactionResponse > authorizationCode |
Alfanumérico | Máx: 12 | Código de autorización de la red financiera. |
transactionResponse > responseCode |
Alfanumérico | Máx: 64 | Código de respuesta relacionado con el estado de la transacción. |
transactionResponse > responseMessage |
Alfanumérico | Máx: 2048 | Mensaje relacionado con el código de respuesta. |
transactionResponse > operationDate |
Fecha | — | Fecha en la que se generó la respuesta en el sistema de PayU. |
Llamada a la API
Los siguientes ejemplos muestran los cuerpos de solicitud y respuesta para este tipo de transacción.
Ejemplo de una Solicitud:
{
"language": "es",
"command": "SUBMIT_TRANSACTION",
"merchant": {
"apiKey": "4Vj8eK4rloUd272L48hsrarnUA",
"apiLogin": "pRRXKOl8ikMmt9u"
},
"transaction": {
"order": {
"id": "1400462414"
},
"type": "VOID",
"reason": "Razón para solicitar la anulación de la transacción",
"parentTransactionId": "c8ec8737-7645-4756-a991-6e60a99eb4d9"
},
"test": false
}
Ejemplo de una Respuesta:
{
"code": "SUCCESS",
"error": null,
"transactionResponse": {
"orderId": 1400462414,
"transactionId": "57546e0a-8275-48e3-af11-7d3dc7420bfe",
"state": "APPROVED",
"paymentNetworkResponseCode": "0",
"paymentNetworkResponseErrorMessage": null,
"trazabilityCode": "49263990",
"authorizationCode": "NPS-011111",
"pendingReason": null,
"responseCode": "APPROVED",
"errorCode": null,
"responseMessage": "APROBADA - Autorizada",
"transactionDate": null,
"transactionTime": null,
"operationDate": 1624880273010,
"referenceQuestionnaire": null,
"extraParameters": null,
"additionalInfo": null
}
}
Ejemplo de una Solicitud:
<request>
<language>es</language>
<command>SUBMIT_TRANSACTION</command>
<merchant>
<apiKey>4Vj8eK4rloUd272L48hsrarnUA</apiKey>
<apiLogin>pRRXKOl8ikMmt9u</apiLogin>
</merchant>
<transaction>
<order>
<id>1400462466</id>
</order>
<type>VOID</type>
<parentTransactionId>50876ad6-46f2-4c8d-bb91-2f028b56ccb8</parentTransactionId>
</transaction>
<isTest>false</isTest>
</request>
Ejemplo de una Respuesta:
<paymentResponse>
<code>SUCCESS</code>
<transactionResponse>
<orderId>1400462466</orderId>
<transactionId>5fbb1ab0-3d2e-448f-a0be-b0bcfb5501ae</transactionId>
<state>APPROVED</state>
<paymentNetworkResponseCode>0</paymentNetworkResponseCode>
<trazabilityCode>49263990</trazabilityCode>
<authorizationCode>NPS-011111</authorizationCode>
<responseCode>APPROVED</responseCode>
<responseMessage>APROBADA - Autorizada</responseMessage>
<operationDate>2021-06-28T06:57:44</operationDate>
</transactionResponse>
</paymentResponse>
Reembolsos
Un reembolso se emite cuando un comerciante devuelve voluntariamente el pago al comprador. Esto puede ocurrir debido a insatisfacción del cliente o cuando el producto está agotado. El método REFUND
revierte una transacción previamente capturada.
Los reembolsos pueden emitirse por el monto total o como un reembolso parcial (PARTIAL_REFUND
).
Parámetros para la Solicitud y Respuesta
Solicitud
Nombre del Campo | Formato | Tamaño | Descripción | Obligatorio |
---|---|---|---|---|
language |
Alfanumérico | 2 | Idioma utilizado en la solicitud. Esto determina el idioma de los mensajes de error. Ver idiomas compatibles. | Sí |
command |
Alfanumérico | Máx: 32 | Debe establecerse en SUBMIT_TRANSACTION . |
Sí |
test (JSON)isTest (XML) |
Booleano | — | Establezca en true para modo de prueba; de lo contrario, false . |
Sí |
merchant |
Objeto | — | Contiene los datos de autenticación. | Sí |
merchant > apiLogin |
Alfanumérico | Mín: 12, Máx: 32 | Usuario o login proporcionado por PayU. Cómo obtener API Login. | Sí |
merchant > apiKey |
Alfanumérico | Mín: 6, Máx: 32 | Contraseña proporcionada por PayU. Cómo obtener API Key. | Sí |
transaction |
Objeto | — | Contiene los datos de la transacción. | Sí |
transaction > additionalValues |
Objeto | — | Especifica el monto para un reembolso parcial. Requerido para reembolsos parciales. | No |
transaction > additionalValues > TX_VALUE |
Objeto | — | Contiene los detalles del monto de la transacción. Requerido para reembolsos parciales. | No |
transaction > additionalValues > TX_VALUE > value |
Numérico | Máx: 19 | Monto a reembolsar. Requerido para reembolsos parciales. | No |
transaction > additionalValues > TX_VALUE > currency |
Alfanumérico | 3 | Código de moneda ISO. Ver monedas aceptadas. Requerido para reembolsos parciales. | No |
transaction > order |
Objeto | — | Contiene los detalles de la orden. | Sí |
transaction > order > id |
Numérico | — | ID de la orden a reembolsar. | Sí |
transaction > type |
Alfanumérico | 32 | Especifica el tipo de reembolso: - REFUND para reembolsos totales.- PARTIAL_REFUND para reembolsos parciales (si es compatible). |
Sí |
transaction > reason |
Alfanumérico | — | Motivo del reembolso. | No |
transaction > parentTransactionId |
Alfanumérico | 36 | ID de la transacción original que se está reembolsando. | Sí |
Respuesta
Nombre del Campo | Formato | Tamaño | Descripción |
---|---|---|---|
code |
Alfanumérico | — | Código de respuesta de la transacción. Valores posibles: ERROR , SUCCESS . |
error |
Alfanumérico | Máx: 2048 | Mensaje de error cuando el código de respuesta es ERROR . |
transactionResponse |
Objeto | — | Contiene los detalles de la respuesta. |
transactionResponse > orderId |
Numérico | — | ID de la orden generada o existente en PayU. |
transactionResponse > transactionId |
Alfanumérico | 36 | ID de la transacción en PayU. |
transactionResponse > state |
Alfanumérico | Máx: 32 | Estado de la transacción. |
transactionResponse > paymentNetworkResponseCode |
Alfanumérico | Máx: 255 | Código de respuesta de la red financiera. |
transactionResponse > paymentNetworkResponseErrorMessage |
Alfanumérico | Máx: 255 | Mensaje de error de la red financiera. |
transactionResponse > trazabilityCode |
Alfanumérico | Máx: 32 | Código de trazabilidad de la red financiera. |
transactionResponse > authorizationCode |
Alfanumérico | Máx: 12 | Código de autorización de la red financiera. |
transactionResponse > responseCode |
Alfanumérico | Máx: 64 | Código de respuesta asociado con el estado de la transacción. |
transactionResponse > responseMessage |
Alfanumérico | Máx: 2048 | Mensaje asociado con el código de respuesta. |
transactionResponse > operationDate |
Fecha | — | Fecha en la que se generó la respuesta en el sistema de PayU. |
Llamada a la API
Los siguientes ejemplos muestran los cuerpos de solicitud y respuesta para este tipo de transacción.
Ejemplo de una Solicitud de Reembolso:
{
"language": "es",
"command": "SUBMIT_TRANSACTION",
"merchant": {
"apiKey": "4Vj8eK4rloUd272L48hsrarnUA",
"apiLogin": "pRRXKOl8ikMmt9u"
},
"transaction": {
"order": {
"id": "1400462687"
},
"type": "REFUND",
"reason": "Razón para solicitar el reembolso de la transacción",
"parentTransactionId": "60e2080d-08b1-4db2-a54f-8bcbe8271662"
},
"test": false
}
Ejemplo de una Solicitud de Reembolso Parcial:
{
"command":"SUBMIT_TRANSACTION",
"language":"es",
"merchant":{
"apiKey": "4Vj8eK4rloUd272L48hsrarnUA",
"apiLogin": "pRRXKOl8ikMmt9u"
},
"transaction":{
"additionalValues":{
"TX_VALUE":{
"value":"950",
"currency":"ARS"
}
},
"order":{
"id":"1400462690"
},
"parentTransactionId":"0486359b-a048-4b6b-9b72-af584e710e64",
"reason":"Razón para solicitar el reembolso de la transacción",
"type":"PARTIAL_REFUND"
}
}
Ejemplo de una Respuesta:
{
"code": "SUCCESS",
"error": null,
"transactionResponse": {
"orderId": 1400462690,
"transactionId": null,
"state": "PENDING",
"paymentNetworkResponseCode": null,
"paymentNetworkResponseErrorMessage": null,
"trazabilityCode": null,
"authorizationCode": null,
"pendingReason": "PENDING_REVIEW",
"responseCode": null,
"errorCode": null,
"responseMessage": "1400462690",
"transactionDate": null,
"transactionTime": null,
"operationDate": null,
"referenceQuestionnaire": null,
"extraParameters": null,
"additionalInfo": null
}
}
Ejemplo de una Solicitud de Reembolso:
<request>
<language>es</language>
<command>SUBMIT_TRANSACTION</command>
<merchant>
<apiKey>4Vj8eK4rloUd272L48hsrarnUA</apiKey>
<apiLogin>pRRXKOl8ikMmt9u</apiLogin>
</merchant>
<transaction>
<order>
<id>1400462689</id>
</order>
<type>REFUND</type>
<reason>Razón para solicitar el reembolso de la transacción.</reason>
<parentTransactionId>1d31ea44-0d8f-4e65-93ac-6be4347e5b40</parentTransactionId>
</transaction>
<isTest>false</isTest>
</request>
Ejemplo de una Solicitud de Reembolso Parcial:
<request>
<command>SUBMIT_TRANSACTION</command>
<language>es</language>
<merchant>
<apiKey>4Vj8eK4rloUd272L48hsrarnUA</apiKey>
<apiLogin>pRRXKOl8ikMmt9u</apiLogin>
</merchant>
<transaction>
<additionalValues>
<entry>
<string>TX_VALUE</string>
<additionalValue>
<value>950</value>
<currency>ARS</currency>
</additionalValue>
</entry>
</additionalValues>
<order>
<id>1400462690</id>
</order>
<parentTransactionId>0486359b-a048-4b6b-9b72-af584e710e64</parentTransactionId>
<reason>Reason for requesting the refund or cancellation of the transaction</reason>
<type>PARTIAL_REFUND</type>
</transaction>
</request>
Ejemplo de una Respuesta:
<paymentResponse>
<code>SUCCESS</code>
<transactionResponse>
<orderId>1400462691</orderId>
<transactionId>6cef020a-8006-4744-b7f9-d9a343807297</transactionId>
<state>PENDING</state>
<pendingReason>PENDING_REVIEW</pendingReason>
<responseMessage>1400462690</responseMessage>
</transactionResponse>
</paymentResponse>
Consultar el Estado del Reembolso
Como se mencionó anteriormente, las solicitudes de reembolso pasan por un proceso de aprobación en el que PayU tarda entre 1 y 3 días en procesarlas y aprobarlas o rechazarlas. Puedes verificar el estado de un reembolso utilizando uno de los siguientes métodos:
Consultar el Estado a través del Panel de Administración de PayU
-
Inicia sesión en tu cuenta del módulo de PayU. En el panel izquierdo, expande el menú Transacciones y selecciona Reporte de Ventas.
-
Usa el campo Filtrar mis ventas para buscar la orden utilizando el ID de la orden o el ID de la transacción.
-
La columna Estado indica si el reembolso ha sido aprobado, rechazado o si está pendiente.
Consultar el Estado a través de la API de Consultas
También puedes verificar el estado del reembolso utilizando la API de Consultas. Para hacerlo, envía una solicitud que contenga el ID de la orden.
Al consultar una orden, el sistema devuelve la última transacción asociada con ella.
La respuesta puede indicar uno de los tres posibles estados:
-
Solicitud No Resuelta: Si la solicitud de reembolso aún está en revisión, la orden aparece con el estado
CAPTURED
(result.payload.status
en la respuesta).- El primer tipo de transacción es
AUTHORIZATION_AND_CAPTURE
(result.transactions.type
en la respuesta). - El primer estado de la transacción es
APPROVED
(result.transactions.transactionResponse.state
en la respuesta).
- El primer tipo de transacción es
-
Aprobado: Si la solicitud de reembolso es aprobada por un agente de servicio al cliente de PayU, la orden aparece con el estado
REFUNDED
(result.payload.status
en la respuesta).- El primer tipo de transacción es
REFUND
(result.transactions.type
en la respuesta). - El primer estado de la transacción es
APPROVED
(result.transactions.transactionResponse.state
en la respuesta).
- El primer tipo de transacción es
-
Rechazado: Si la solicitud de reembolso es rechazada por un agente de servicio al cliente de PayU, la orden aparece con el estado
CAPTURED
(result.payload.status
en la respuesta).- El primer tipo de transacción es
REFUND
(result.transactions.type
en la respuesta). - El primer estado de la transacción es
DECLINED
(result.transactions.transactionResponse.state
en la respuesta).
- El primer tipo de transacción es