'186691761268d6f85579c84532234998155044887968d6f85579c891167595247', 'base_url' => 'https://pay.wifibills.com/api', 'gateway_name' => 'PipraPay' ]; function piprapay_validate_config() { global $piprapay_config; } function piprapay_show_config() { global $ui, $piprapay_config; $ui->assign('_title', $piprapay_config['gateway_name'] . ' - Payment Gateway'); echo '
' . $piprapay_config['gateway_name'] . ' Configuration

' . $piprapay_config['gateway_name'] . ' Gateway

This payment gateway is pre-configured and ready to use.

Gateway Active
' . $piprapay_config['gateway_name'] . ' is ready to accept payments.
'; } function piprapay_save_config() { global $admin; _log('[' . $admin['username'] . ']: ' . Lang::T('PipraPay_Configuration_Viewed'), 'Admin', $admin['id']); r2(U . 'paymentgateway/piprapay', 's', Lang::T('PipraPay_is_preconfigured')); } function piprapay_create_transaction($trx, $user) { global $piprapay_config; $success_url = U . 'callback/piprapay?status=success&invoice_id=' . $trx['id']; $cancel_url = U . 'order/view/' . $trx['id']; // Create simple metadata $metadata = [ 'invoice_id' => $trx['id'], 'customer_id' => $user['id'], 'customer_name' => $user['fullname'] ?: $user['username'], 'plan_id' => $trx['plan_id'] ]; // Payload with ALL required fields $payload = [ 'full_name' => $user['fullname'] ?: $user['username'], 'email_mobile' => $user['email'] ?: ($user['phonenumber'] ?: 'user@example.com'), 'amount' => number_format($trx['price'], 2, '.', ''), 'redirect_url' => $success_url, 'return_type' => 'GET', 'cancel_url' => $cancel_url, 'webhook_url' => U . 'callback/piprapay', 'currency' => 'BDT', 'metadata' => $metadata ]; $headers = [ 'accept: application/json', 'content-type: application/json', 'mh-piprapay-api-key: ' . $piprapay_config['api_key'] ]; $create_charge_url = $piprapay_config['base_url'] . '/create-charge'; // Make the API call $result = json_decode(Http::postJsonData($create_charge_url, $payload, $headers), true); // Check for success using the correct response format if (isset($result['status']) && $result['status'] === true) { if (isset($result['pp_url'])) { $transaction_id = $result['pp_id'] ?? uniqid(); // Save payment gateway transaction $d = ORM::for_table('tbl_payment_gateway') ->where('username', $user['username']) ->where('status', 1) ->find_one(); if (!$d) { $d = ORM::for_table('tbl_payment_gateway')->create(); $d->username = $user['username']; $d->created_date = date('Y-m-d H:i:s'); } $d->gateway_trx_id = $transaction_id; $d->pg_url_payment = $result['pp_url']; $d->pg_request = json_encode($result); $d->expired_date = date('Y-m-d H:i:s', strtotime('+24 HOURS')); $d->gateway = 'piprapay'; $d->save(); // Redirect to payment gateway header('Location: ' . $result['pp_url']); exit(); } else { $error_message = 'Payment URL not received from gateway'; r2(U . 'order/package', 'e', Lang::T("Failed to create transaction. ") . $error_message); } } else { $error_message = $result['message'] ?? 'Failed to create payment'; r2(U . 'order/package', 'e', Lang::T("Failed to create transaction. ") . $error_message); } } function piprapay_get_status($trx, $user) { global $piprapay_config; if (empty($trx['gateway_trx_id'])) { r2(U . "order/view/" . $trx['id'], 'e', Lang::T("No transaction ID found for verification.")); } $verify_url = $piprapay_config['base_url'] . '/verify-payments'; $payload = [ 'transaction_id' => $trx['gateway_trx_id'] ]; $headers = [ 'accept: application/json', 'content-type: application/json', 'mh-piprapay-api-key: ' . $piprapay_config['api_key'] ]; $result = json_decode(Http::postJsonData($verify_url, $payload, $headers), true); // Check for success using the correct response format if (isset($result['status']) && $result['status'] === true && isset($result['payment_status'])) { $payment_status = strtolower($result['payment_status']); if ($payment_status == 'success' || $payment_status == 'completed' || $payment_status == 'paid') { if ($trx['status'] == 2) { r2(U . "order/view/" . $trx['id'], 'd', Lang::T("Transaction has been paid.")); } if (!Package::rechargeUser($user['id'], $trx['routers'], $trx['plan_id'], $trx['gateway'], $piprapay_config['gateway_name'])) { r2(U . "order/view/" . $trx['id'], 'd', Lang::T("Failed to activate your Package, try again later.")); } $trx->pg_paid_response = json_encode($result); $trx->payment_method = $piprapay_config['gateway_name']; $trx->payment_channel = $piprapay_config['gateway_name']; $trx->paid_date = date('Y-m-d H:i:s'); $trx->status = 2; $trx->save(); r2(U . "order/view/" . $trx['id'], 's', Lang::T("Payment successful! Your package has been activated.")); } else { r2(U . "order/view/" . $trx['id'], 'w', Lang::T("Payment status: ") . $result['payment_status']); } } else { $error_message = $result['message'] ?? 'Verification failed'; r2(U . "order/view/" . $trx['id'], 'e', Lang::T("Failed to verify payment. Please try again later.")); } } // Simple callback handler function piprapay_callback_handler() { // Handle successful payment redirect if (isset($_GET['status']) && $_GET['status'] == 'success' && isset($_GET['invoice_id'])) { $invoice_id = $_GET['invoice_id']; // Find the transaction $trx = ORM::for_table('tbl_transactions')->find_one($invoice_id); if (!$trx) { r2(U . 'order/package', 'e', Lang::T("Transaction not found.")); } // Find user $user = ORM::for_table('tbl_customers')->find_one($trx['customer_id']); if (!$user) { r2(U . 'order/package', 'e', Lang::T("User not found.")); } // Find payment gateway transaction $pg_trx = ORM::for_table('tbl_payment_gateway') ->where('username', $user['username']) ->where('status', 1) ->order_by_desc('id') ->find_one(); if ($pg_trx) { // Update transaction with gateway_trx_id $trx->gateway_trx_id = $pg_trx['gateway_trx_id']; $trx->save(); // Verify payment status via API piprapay_get_status($trx, $user); } else { r2(U . 'order/package', 'w', Lang::T("Payment verification in progress. Please check your order status in a few moments.")); } } // Handle cancelled payment if (isset($_GET['status']) && $_GET['status'] == 'cancel') { r2(U . 'order/package', 'w', Lang::T("Payment was cancelled. Please try again.")); } // Default redirect r2(U . 'order/package'); } // Register callback route if (defined('CALLBACK_ROUTE')) { piprapay_callback_handler(); }