<?php
// Configuración inicial
$merchantId = "1017348"; // Tu Merchant ID de PayU
$apiKey = "Wmg6Szib1KqHGTt6srUwHlJRC0"; // Tu API Key de PayU
// Leer los datos enviados por PayU en la solicitud POST
$input = file_get_contents("php://input");
$data = json_decode($input, true);
// Verificar si los datos fueron recibidos correctamente
if ($data) {
// Extraer información clave del cuerpo del POST
$referenceCode = $data['reference_sale'] ?? null; // Código de referencia
$transactionId = $data['transaction_id'] ?? null;
$state = $data['state_pol'] ?? null; // Estado de la transacción
$amount = $data['value'] ?? null; // Monto de la transacción
$currency = $data['currency'] ?? 'USD'; // Moneda (USD, COP, etc.)
$signature = $data['sign'] ?? null; // Firma enviada por PayU
// Generar la firma esperada para validar la autenticidad de los datos
$expectedSignature = md5($apiKey . "~" . $merchantId . "~" . $referenceCode . "~" . $amount . "~" . $currency . "~" . $state);
if ($signature === $expectedSignature) {
// Procesar el estado del pago
switch ($state) {
case "4": // Aprobado
// Actualizar base de datos o lógica adicional
file_put_contents('log.txt', "Transacción $transactionId (Referencia: $referenceCode) aprobada.\n", FILE_APPEND);
http_response_code(200);
echo "Payment Approved";
break;
case "6": // Rechazado
file_put_contents('log.txt', "Transacción $transactionId (Referencia: $referenceCode) rechazada.\n", FILE_APPEND);
http_response_code(200);
echo "Payment Declined";
break;
case "7": // Pendiente
file_put_contents('log.txt', "Transacción $transactionId (Referencia: $referenceCode) pendiente.\n", FILE_APPEND);
http_response_code(200);
echo "Payment Pending";
break;
default:
file_put_contents('log.txt', "Transacción $transactionId (Referencia: $referenceCode) con estado desconocido.\n", FILE_APPEND);
http_response_code(400);
echo "Unknown Payment State";
break;
}
} else {
// Firma inválida
file_put_contents('log.txt', "Firma inválida para la transacción $transactionId (Referencia: $referenceCode).\n", FILE_APPEND);
http_response_code(401);
echo "Invalid Signature";
}
} else {
// No se recibieron datos
file_put_contents('log.txt', "No se recibieron datos en la solicitud.\n", FILE_APPEND);
http_response_code(400);
echo "No Data Received";
}
?>