Path : /home/vishqocm/pcib.in/enroll/includes/
File Upload :
Current File : /home/vishqocm//pcib.in/enroll/includes/razorpay_config.php

<?php
/**
 * Razorpay Configuration
 * Contains settings and utility functions for Razorpay integration
 */

// Razorpay API keys (Replace with your actual keys)
// For test mode, use keys from https://dashboard.razorpay.com/app/keys
// For production, use live keys from the same dashboard
$razorpay_key_id = 'rzp_test_fIHlD0EzBUuvzc';
$razorpay_key_secret = 'YI15P7Cf7NoFMIewK3i5QKV2';

// Webhook secret (set in the Razorpay Dashboard under Settings > Webhooks)
$razorpay_webhook_secret = 'wbhk_KLM9876OPQRstuvwxyz1234';

// Razorpay API endpoints
$razorpay_api_url = 'https://api.razorpay.com/v1/';

// Payment settings
$razorpay_currency = 'INR';
$razorpay_company_name = 'Popular Computer Institute';
$razorpay_company_logo = 'assets/img/logo.png';
$razorpay_theme_color = '#4e73df';

/**
 * Create a Razorpay order
 * 
 * @param float $amount Amount in rupees
 * @param string $payment_plan Payment plan (monthly, six_month, full)
 * @param string $receipt_id Optional receipt ID
 * @param array $additional_notes Additional notes to include with the order
 * @return array|bool Order data or false on failure
 */
function create_razorpay_order($amount, $payment_plan, $receipt_id = '', $additional_notes = []) {
    global $razorpay_key_id, $razorpay_key_secret, $razorpay_api_url, $razorpay_currency;
    
    // Generate receipt ID if not provided
    if (empty($receipt_id)) {
        $receipt_id = 'receipt_' . time() . '_' . mt_rand(1000, 9999);
    }
    
    // Convert amount to paise (Razorpay uses smallest currency unit)
    $amount_in_paise = round($amount * 100);
    
    // Prepare notes
    $notes = array_merge([
        'payment_plan' => $payment_plan
    ], $additional_notes);
    
    // Prepare request data
    $data = [
        'amount' => $amount_in_paise,
        'currency' => $razorpay_currency,
        'receipt' => $receipt_id,
        'notes' => $notes
    ];
    
    // Initialize cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $razorpay_api_url . 'orders');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_USERPWD, $razorpay_key_id . ":" . $razorpay_key_secret);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Content-Type: application/json'
    ]);
    
    // Execute request
    $response = curl_exec($ch);
    $error = curl_error($ch);
    
    // Close cURL
    curl_close($ch);
    
    if ($error) {
        error_log("cURL Error creating Razorpay order: " . $error);
        return false;
    }
    
    // Parse response
    $order_data = json_decode($response, true);
    
    if (isset($order_data['error'])) {
        error_log("Razorpay API Error: " . json_encode($order_data['error']));
        return false;
    }
    
    return $order_data;
}

/**
 * Verify Razorpay payment signature
 * 
 * @param string $order_id Razorpay order ID
 * @param string $payment_id Razorpay payment ID
 * @param string $signature Razorpay signature
 * @return bool Whether the signature is valid
 */
function verify_razorpay_signature($order_id, $payment_id, $signature) {
    global $razorpay_key_secret;
    
    // Generate signature
    $generated_signature = hash_hmac('sha256', $order_id . "|" . $payment_id, $razorpay_key_secret);
    
    // Compare signatures
    return hash_equals($generated_signature, $signature);
}

/**
 * Fetch payment details from Razorpay
 * 
 * @param string $payment_id Razorpay payment ID
 * @return array|bool Payment data or false on failure
 */
function get_razorpay_payment($payment_id) {
    global $razorpay_key_id, $razorpay_key_secret, $razorpay_api_url;
    
    // Log the request
    error_log("Fetching Razorpay payment details for payment ID: $payment_id");
    
    // Initialize cURL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $razorpay_api_url . 'payments/' . $payment_id);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, $razorpay_key_id . ":" . $razorpay_key_secret);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    
    // Execute request
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    
    // Close cURL
    curl_close($ch);
    
    if ($error) {
        error_log("cURL Error fetching Razorpay payment: " . $error);
        return false;
    }
    
    // Log HTTP response code
    error_log("Razorpay API response code: " . $http_code);
    
    // Check for HTTP errors
    if ($http_code != 200) {
        error_log("Razorpay API HTTP error: " . $http_code);
        error_log("Response: " . $response);
        return false;
    }
    
    // Parse response
    $payment_data = json_decode($response, true);
    
    if (json_last_error() !== JSON_ERROR_NONE) {
        error_log("JSON parsing error: " . json_last_error_msg());
        error_log("Raw response: " . substr($response, 0, 1000));
        return false;
    }
    
    if (isset($payment_data['error'])) {
        error_log("Razorpay API Error: " . json_encode($payment_data['error']));
        return false;
    }
    
    // Log successful fetch
    error_log("Successfully fetched payment data from Razorpay");
    
    return $payment_data;
}

/**
 * Get Razorpay checkout configuration
 * 
 * @param string $order_id Razorpay order ID
 * @param float $amount Amount in rupees
 * @param string $description Payment description
 * @param array $user User information
 * @return array Razorpay checkout configuration
 */
function get_razorpay_checkout_config($order_id, $amount, $description, $user) {
    global $razorpay_key_id, $razorpay_company_name, $razorpay_company_logo, $razorpay_theme_color, $razorpay_currency;
    
    return [
        'key' => $razorpay_key_id,
        'amount' => $amount * 100, // Amount in paise
        'currency' => $razorpay_currency,
        'name' => $razorpay_company_name,
        'description' => $description,
        'order_id' => $order_id,
        'image' => $razorpay_company_logo,
        'prefill' => [
            'name' => $user['first_name'] . ' ' . $user['last_name'],
            'email' => $user['email'],
            'contact' => $user['phone'] ?? ''
        ],
        'theme' => [
            'color' => $razorpay_theme_color
        ]
    ];
}