Página de Respuesta
La Página de Respuesta es una página obligatoria que te permite mostrar el resultado de la transacción al pagador. Nuestro sistema redirecciona al pagador a esta página una vez la transacción haya sido realizada. La información de los resultados del pago es enviada a tu sistema a través del método HTTP GET. Esta página es invocada para todos los estados de la transacción: aprobada, rechazada, en validación, esperando el pago (para pagos en efectivo), etc.
Consideraciones
- Algunos proveedores de hosting tienen configuraciones que no permite enviar URLs como valores de parámetros. Por ejemplo:
&merchant_url=http%3A%2F%2Fwww.mitienda.com
- Para cuentas de Brasil, no hay redirección a la página de respuesta.
- No dependas de la página de respuesta para actualizar tu base de datos o ejecutar procesos ya que es posible que el usuario no regrese a la misma; utiliza la página de confirmación.
- Si quieres mostrar información relacionada con la transacción, te sugerimos mostrar como mínimo lo siguiente: estado, referencia, valor, moneda y fecha.
- Se recomienda enviar el parámetro
responseUrl
en el formulario de pago o configurarlo en el Módulo PayU; tiene mayor prioridad el enviado como parámetro. Si PayU no encuentra ninguno, el proceso de pago finaliza en el Webcheckout.
Importante
Si deseas que PayU siempre muestra la información de la transacción, no envíes ningún valor en el parámetroresponseUrl
del formulario de pagos y déjalo en blanco en el Módulo PayU. En este caso, el comprador no tendrá la opción de regresar a tu página.
Variables
Variables enviadas a la Página de respuesta.
Variables enviadas a la Página de respuesta
Campo | Tipo | Tamaño | Descripción | Aplica para |
---|---|---|---|---|
merchantId | Numérico | 12 | Identificador de tu tienda en el sistema de PayU, puedes encontrar este número en el correo de creación de tu cuenta. | — |
transactionState | Numérico | 2 | Indica el estado de la transacción en el sistema. Ver los estados de la transacción en la columna respectiva. |
— |
risk | Decimal (#.00) | — | Riesgo asociado con la transacción. Los posibles valores están entre 0 y 1. Entre mayor sea el valor, mayor es el riesgo. Formato ###.00 . |
— |
polResponseCode | Alfanumérico | 64 | Código de respuesta. Ver los códigos de respuesta en la columna respectiva. |
— |
referenceCode | Alfanumérico | 255 | Referencia de la venta o la orden. Debe ser única por cada transacción enviada al sistema. | — |
reference_pol | Alfanumérico | 255 | Referencia o número de transacción generado por PayU. | — |
signature | Alfanumérico | 255 | Firma digital creada por cada transacción. | — |
polPaymentMethod | Alfanumérico | 255 | Identificador interno utilizado por los métodos de pago. | — |
polPaymentMethodType | Numérico | 2 | Método de pago utilizado. Ver los códigos de los métodos de pago. |
— |
installmentsNumber | Numérico | 2 | Número de cuotas en las cuales se difirió el pago con tarjeta crédito. | — |
TX_VALUE | Numérico | 14,2 | Valor total de la transacción. Puede contener dos dígitos decimales. Por ejemplo 10000.00 o 10000. | — |
TX_TAX | Numérico | 14,2 | Valor del IVA de la transacción, si no se envió IVA, el sistema aplica el 19% automáticamente. Puede contener dos dígitos decimales. Por ejemplo 19000.00. En caso de que no tenga IVA, debe enviarse 0. |
— |
buyerEmail | Alfanumérico | 255 | Campo que contiene el correo electrónico del comprador para notificar el resultado de la transacción. Se recomienda validarlo cuando se toma este valor del formulario. | — |
processingDate | Fecha (AAAA-MM-DD HH:mm:ss) | — | Fecha en la que se realizó la transacción. | — |
currency | Alfanumérico | 3 | Moneda respectiva en la que se hace el pago. El proceso de conciliación se realiza en pesos colombianos a la tasa representativa del día. | — |
cus | Alfanumérico | 255 | El CUS, Código Único de Seguimiento, es la referencia de pago dentro del banco, aplica solo para pagos con PSE. | PSE Colombia. |
pseBank | Alfanumérico | 255 | Nombre del banco, aplica solo para pagos con PSE. | PSE Colombia. |
lng | Alfanumérico | 2 | Idioma en el que se quiere mostrar la pasarela de pagos. | — |
description | Alfanumérico | 255 | Descripción de la venta. | — |
lapResponseCode | Alfanumérico | 64 | Código de Respuesta entregado por PayU. Ver los códigos de respuesta en la columna respectiva. |
— |
lapPaymentMethod | Alfanumérico | 255 | Método de pago utilizado, por ejemplo VISA. | — |
lapPaymentMethodType | Alfanumérico | 255 | Tipo del método de pago utilizado, por ejemplo CREDIT_CARD. | — |
lapTransactionState | Alfanumérico | 32 | Estado de la transacción. Ver los estados de la transacción en la columna respectiva. |
— |
message | Alfanumérico | 255 | Descripción del estado de la transacción. | — |
extra1 | Alfanumérico | 255 | Campo adicional para enviar información relacionada con la compra. | — |
extra2 | Alfanumérico | 255 | Campo adicional para enviar información relacionada con la compra. | — |
extra3 | Alfanumérico | 255 | Campo adicional para enviar información relacionada con la compra. | — |
authorizationCode | Alfanumérico | 12 | Código de autorización de la venta. | — |
merchant_address | Alfanumérico | 255 | Dirección del comercio. | — |
merchant_name | Alfanumérico | 255 | Nombre del comercio. | — |
merchant_url | Alfanumérico | 255 | URL de la página web del comercio. | — |
orderLanguage | Alfanumérico | 2 | Idioma de la orden (ISO-639-1). | — |
pseCycle | Numérico | — | Identificador generado por PSE. | PSE Colombia |
pseReference1 | Alfanumérico | 255 | Referencia no. 1 por PSE payments. | PSE Colombia |
pseReference2 | Alfanumérico | 255 | Referencia no. 2 por PSE payments. | PSE Colombia |
pseReference3 | Alfanumérico | 255 | Referencia no. 3 por PSE payments. | PSE Colombia |
telephone | Alfanumérico | 20 | Teléfono del comercio. | — |
transactionId | Alfanumérico | 36 | Identificador del comercio. | — |
trazabilityCode | Alfanumérico | 64 | Código de trazabilidad de la venta en la página web del comercio. | — |
TX_ADMINISTRATIVE_FEE | Decimal (#.00) | — | Valor de la tarifa administrativa. | — |
TX_TAX_ADMINISTRATIVE _FEE | Decimal (#.00) | — | Valor del impuesto de la tarifa administrativa. | — |
TX_TAX_ADMINISTRATIVE _FEE_RETURN_BASE | Decimal (#.00) | — | Valor base de la tarifa administrativa para reintegro de impuestos. | — |
action_code_description | Alfanumérico | 255 | Descripción del código de respuesta de VISANET. | VISANET Perú |
cc_holder | Alfanumérico | 150 | Nombre del tarjetahabiente. | VISANET Perú |
cc_number | Alfanumérico | — | Número de la tarjeta de crédito. | VISANET Perú |
processing_date_time | Fecha (AAAA-MM-DD) | — | Fecha de procesamiento de la venta. | VISANET Perú |
request_number | Alfanumérico | 9 | Número de Orden + identificador de la transacción. | VISANET Perú |
Integrar la página de respuesta
El siguiente es un ejemplo en PHP de cómo integrar la página de respuesta:
<?php
$ApiKey = "4Vj8eK4rloUd272L48hsrarnUA";
$merchant_id = $_REQUEST['merchantId'];
$referenceCode = $_REQUEST['referenceCode'];
$TX_VALUE = $_REQUEST['TX_VALUE'];
$New_value = number_format($TX_VALUE, 1, '.', '');
$currency = $_REQUEST['currency'];
$transactionState = $_REQUEST['transactionState'];
$firma_cadena = "$ApiKey~$merchant_id~$referenceCode~$New_value~$currency~$transactionState";
$firmacreada = md5($firma_cadena);
$firma = $_REQUEST['signature'];
$reference_pol = $_REQUEST['reference_pol'];
$cus = $_REQUEST['cus'];
$extra1 = $_REQUEST['description'];
$pseBank = $_REQUEST['pseBank'];
$lapPaymentMethod = $_REQUEST['lapPaymentMethod'];
$transactionId = $_REQUEST['transactionId'];
if ($_REQUEST['transactionState'] == 4 ) {
$estadoTx = "Transacción aprobada";
}
else if ($_REQUEST['transactionState'] == 6 ) {
$estadoTx = "Transacción rechazada";
}
else if ($_REQUEST['transactionState'] == 104 ) {
$estadoTx = "Error";
}
else if ($_REQUEST['transactionState'] == 7 ) {
$estadoTx = "Pago pendiente";
}
else {
$estadoTx=$_REQUEST['mensaje'];
}
if (strtoupper($firma) == strtoupper($firmacreada)) {
?>
<h2>Resumen de la transacción</h2>
<table>
<tr>
<td>Estado de la transacción</td>
<td><?php echo $estadoTx; ?></td>
</tr>
<tr>
<tr>
<td>ID de la transacción</td>
<td><?php echo $transactionId; ?></td>
</tr>
<tr>
<td>Referencia de venta</td>
<td><?php echo $reference_pol; ?></td>
</tr>
<tr>
<td>Referencia de la transacción</td>
<td><?php echo $referenceCode; ?></td>
</tr>
<tr>
<?php
if($pseBank != null) {
?>
<tr>
<td>cus </td>
<td><?php echo $cus; ?> </td>
</tr>
<tr>
<td>Banco </td>
<td><?php echo $pseBank; ?> </td>
</tr>
<?php
}
?>
<tr>
<td>Valor total</td>
<td>$<?php echo number_format($TX_VALUE); ?></td>
</tr>
<tr>
<td>Moneda</td>
<td><?php echo $currency; ?></td>
</tr>
<tr>
<td>Descripción</td>
<td><?php echo ($extra1); ?></td>
</tr>
<tr>
<td>Entidad:</td>
<td><?php echo ($lapPaymentMethod); ?></td>
</tr>
</table>
<?php
}
else
{
?>
<h1>Error validando la firma digital.</h1>
<?php
}
?>
Ejemplo GET enviado a la página de respuesta.
http://mypaginadeprueba.com/response.php?&merchantId=508029&merchant_name=Test+PayU+Test&merchant_address=Av+123+Calle+12&telephone=7512354&merchant_url=http%3A%2F%2Fpruebaslapv.xtrweb.com&transactionState=6&lapTransactionState=DECLINED&message=Declinada&referenceCode=2015-05-27+13%3A04%3A37&reference_pol=7069375&transactionId=f5e668f1-7ecc-4b83-a4d1-0aaa68260862&description=test_payu_01&trazabilityCode=&cus=&orderLanguage=es&extra1=&extra2=&extra3=&polTransactionState=6&signature=e1b0939bbdc99ea84387bee9b90e4f5c&polResponseCode=5&lapResponseCode=ENTITY_DECLINED&risk=1.00&polPaymentMethod=10&lapPaymentMethod=VISA&polPaymentMethodType=2&lapPaymentMethodType=CREDIT_CARD&installmentsNumber=1&TX_VALUE=100.00&TX_TAX=.00¤cy=USD&lng=es&pseCycle=&buyerEmail=test%40payulatam.com&pseBank=&pseReference1=&pseReference2=&pseReference3=&authorizationCode=&TX_ADMINISTRATIVE_FEE=.00&TX_TAX_ADMINISTRATIVE_FEE=.00&TX_TAX_ADMINISTRATIVE_FEE_RETURN_BASE=.00
Validación de la firma
La validación de la firma te permite comprobar la integridad de los datos, debes generar la firma con los datos que encuentras en la página de respuesta y compararla con la información del parámetro signature.
Para validar la firma en la página de respuesta debes tener en cuenta:
- Para obtener el nuevo valor
new_value
se debe aproximarTX_VALUE
siempre a un decimal con el método de redondeo Round half to even:- Si el primer decimal es par y el segundo es
5
, redondéalo hacia el menor valor. - Si el primer decimal es impar y el segundo es
5
, redondéalo hacia el mayor valor. - Si no, debes redondearlo al decimal más cercano.
- Si el primer decimal es par y el segundo es
- Obten los parámetros para generar la firma (
merchantId
,referenceCode
,TX_VALUE
,currency
ytransactionState
) de la página de respuesta, no de la base de datos. - Debes guardar tu ApiKey de forma segura.
- Crea la firma así:
"ApiKey~merchantId~referenceCode~new_value~currency~transactionState"
Ejemplos:
Primer decimal es par y el segundo es 5
Your apiKey: 4Vj8eK4rloUd272L48hsrarnUA
Parámetros obtenidos de la página de respuesta:
- merchantId = 508029
- referenceCode = TestPayU04
- TX_VALUE = 150.25
- currency = USD
- transactionState = 6
La firma se genera así:
MD5(4Vj8eK4rloUd272L48hsrarnUA~508029~TestPayU04~150.2~USD~6) = 00286dc735bd9eaa8ae3a3a4cbb40688
signature = 00286dc735bd9eaa8ae3a3a4cbb40688
Primer decimal es impar y el segundo es 5
Your apiKey: 4Vj8eK4rloUd272L48hsrarnUA
Parámetros obtenidos de la página de respuesta:
- merchantId = 508029
- referenceCode = TestPayU04
- TX_VALUE = 150.35
- currency = USD
- transactionState = 6
La firma se genera así:
MD5(4Vj8eK4rloUd272L48hsrarnUA~508029~TestPayU04~150.4~USD~6) = 9df2bb60e2838170009040982967923f
signature = 9df2bb60e2838170009040982967923f
Otros casos
Your apiKey: 4Vj8eK4rloUd272L48hsrarnUA
Parámetros obtenidos de la página de respuesta:
- merchantId = 508029
- referenceCode = TestPayU04
- TX_VALUE = 150.34
- currency = USD
- transactionState = 6
La firma se genera así:
MD5(4Vj8eK4rloUd272L48hsrarnUA~508029~TestPayU04~150.3~USD~6) = 779f163be9347a691bcdb25064644795
signature = 779f163be9347a691bcdb25064644795
Compara tu firma
Esta calculadora te permite generar la firma utilizando alguno de los métodos de cifrado disponibles.
Última modificación
24 de junio de 2022:
clon issue (d73e43fe5)