Son un Cuento

confirmation

<?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";
}
?>
0