<?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
]
];
}