117 lines
4.4 KiB
PHP
117 lines
4.4 KiB
PHP
<?php
|
|
/**
|
|
* ==============================================================================
|
|
* SAQEL ENTERPRISE - CLIQ PAYMENT & TEACHER PAYOUT CONTROLLER
|
|
* ==============================================================================
|
|
*
|
|
* ملف: CliqPaymentController.php
|
|
* إدارة نقاط النهاية البرمجية لمدفوعات كليك الفورية للطلبة وطابور السحب المالي للمعلمين.
|
|
*/
|
|
|
|
namespace App\Controllers;
|
|
|
|
use App\Core\Request;
|
|
use App\Core\Response;
|
|
use App\Services\CliqPaymentService;
|
|
use App\Services\StudentAccessControlService;
|
|
|
|
class CliqPaymentController
|
|
{
|
|
/**
|
|
* طلب دفع كليك لطالب خارجي
|
|
* POST /api/payment/cliq/initiate
|
|
*/
|
|
public function initiatePayment(Request $request, Response $response): void
|
|
{
|
|
$body = $request->getBody();
|
|
$studentId = (int)($body['student_id'] ?? $request->user_id ?? 0);
|
|
$courseId = (int)($body['course_id'] ?? 0);
|
|
|
|
if (!$studentId || !$courseId) {
|
|
$response->status(400)->json([
|
|
'status' => 'error',
|
|
'message' => 'معرف الطالب ومعرف الدورة مطلوبان لإصدار مطالبة كليك'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$res = CliqPaymentService::initiatePayment($studentId, $courseId);
|
|
$status = ($res['status'] ?? 'error') === 'success' ? 200 : 400;
|
|
$response->status($status)->json($res);
|
|
}
|
|
|
|
/**
|
|
* رفع إيصال كليك والتحقق الذكي بالذكاء الاصطناعي
|
|
* POST /api/payment/cliq/submit-receipt
|
|
*/
|
|
public function submitReceipt(Request $request, Response $response): void
|
|
{
|
|
$body = $request->getBody();
|
|
$studentId = (int)($body['student_id'] ?? $request->user_id ?? 0);
|
|
$referenceCode = trim((string)($body['reference_code'] ?? ''));
|
|
$receiptBase64 = (string)($body['receipt_image'] ?? '');
|
|
$manualTxId = isset($body['bank_transaction_id']) ? (string)$body['bank_transaction_id'] : null;
|
|
|
|
if (!$studentId || empty($referenceCode)) {
|
|
$response->status(400)->json([
|
|
'status' => 'error',
|
|
'message' => 'معرف الطالب والرمز المرجعي مطلوبان'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$res = CliqPaymentService::verifyPaymentReceipt($studentId, $referenceCode, $receiptBase64, $manualTxId);
|
|
$status = ($res['status'] ?? 'error') === 'success' ? 200 : 400;
|
|
$response->status($status)->json($res);
|
|
}
|
|
|
|
/**
|
|
* طلب سحب أرباح للمعلم عبر كليك
|
|
* POST /api/teacher/payout/request
|
|
*/
|
|
public function requestTeacherPayout(Request $request, Response $response): void
|
|
{
|
|
$body = $request->getBody();
|
|
$teacherId = (int)($body['teacher_id'] ?? $request->user_id ?? 1);
|
|
$amountJod = (float)($body['amount_jod'] ?? 0.0);
|
|
$cliqAlias = trim((string)($body['cliq_alias'] ?? ''));
|
|
|
|
if ($amountJod <= 0 || empty($cliqAlias)) {
|
|
$response->status(400)->json([
|
|
'status' => 'error',
|
|
'message' => 'المبلغ ومعرّف كليك مطلوبان لإتمام طلب السحب'
|
|
]);
|
|
return;
|
|
}
|
|
|
|
$res = CliqPaymentService::requestTeacherPayout($teacherId, $amountJod, $cliqAlias);
|
|
$status = ($res['status'] ?? 'error') === 'success' ? 200 : 400;
|
|
$response->status($status)->json($res);
|
|
}
|
|
|
|
/**
|
|
* استعلام المعلم عن حالة طلبات السحب في طابور كليك
|
|
* GET /api/teacher/payout/status
|
|
*/
|
|
public function getTeacherPayoutStatus(Request $request, Response $response): void
|
|
{
|
|
$teacherId = (int)($request->user_id ?? $_GET['teacher_id'] ?? 1);
|
|
$payouts = CliqPaymentService::getTeacherPayouts($teacherId);
|
|
|
|
$response->json([
|
|
'status' => 'success',
|
|
'data' => $payouts
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* معالجة طابور السحب المالي (تُستدعى أيضاً عبر الكرون جوب أو المشرف)
|
|
* POST /api/admin/payout/process-queue
|
|
*/
|
|
public function processPayoutQueue(Request $request, Response $response): void
|
|
{
|
|
$res = CliqPaymentService::processPayoutQueue();
|
|
$response->json($res);
|
|
}
|
|
}
|