Update: 2026-08-08 12:58:16
This commit is contained in:
@@ -0,0 +1,77 @@
|
||||
<?php
|
||||
/**
|
||||
* income_summary_s2s.php — ملخّص دخل السائق المارّ بالمحفظة
|
||||
* ─────────────────────────────────────────────────────────────
|
||||
* يجيب على سؤال واحد: هل قناة تحصيل هذا السائق حيّة؟
|
||||
*
|
||||
* تستعمله بوابة الائتمان في محرك الالتزامات. سائق الكاش الذي يحصّل
|
||||
* نقداً ولا تمرّ أرباحه بالمحفظة يظهر بأرباح صفر كل يوم، فسقف الخصم
|
||||
* اليومي صفر، فلا يُحصَّل منه شيء أبداً — ومنحه وقوداً أو صيانة بالدَّين
|
||||
* يعني تسليمه قيمةً فعلية مقابل وعد بالسداد من قناة لا يمرّ بها ماله.
|
||||
*
|
||||
* المقياس الأساسي أيام لا مبلغ: السؤال ليس «كم يكسب؟» بل «هل المال
|
||||
* يمرّ من هنا بانتظام؟». دخل واحد كبير قد يكون استرداداً أو تسوية
|
||||
* حادثة؛ اثنا عشر يوماً متفرّقاً قناةٌ تعمل.
|
||||
*
|
||||
* قراءة فقط — لا تكتب شيئاً ولا تلمس رصيداً.
|
||||
*/
|
||||
|
||||
require_once __DIR__ . '/../../jwtconnect.php';
|
||||
|
||||
// نداء خادم-لخادم حصراً. الرد يُبنى عليه قرار منح ائتمان، فلا يُفتح
|
||||
// لجلسة سائق قد تسأل عن غيره.
|
||||
$providedKey = $_SERVER['HTTP_X_S2S_API_KEY'] ?? '';
|
||||
$expectedKey = getenv('S2S_SHARED_KEY') ?: '';
|
||||
if (empty($expectedKey) || empty($providedKey) || !hash_equals($expectedKey, $providedKey)) {
|
||||
http_response_code(401);
|
||||
printFailure('Unauthorized: Invalid or missing X-S2S-Api-Key.');
|
||||
exit;
|
||||
}
|
||||
|
||||
$driverID = filterRequest('driverID');
|
||||
$windowDays = (int) (filterRequest('window_days', 'numeric') ?: 30);
|
||||
|
||||
if (empty($driverID)) {
|
||||
printFailure('Missing required parameter: driverID');
|
||||
exit;
|
||||
}
|
||||
|
||||
// نافذة محدودة: مسح سنوات من الحركات لكل فحص أهلية حِمل بلا فائدة —
|
||||
// دخلُ سائقٍ قبل ستة أشهر لا يقول شيئاً عن قناته اليوم.
|
||||
if ($windowDays < 1 || $windowDays > 180) {
|
||||
$windowDays = 30;
|
||||
}
|
||||
|
||||
try {
|
||||
// الصفوف الموجبة وحدها. السالبة خصومات (عمولة، التزامات) وعدّها
|
||||
// هنا كان سيجعل سائقاً يُخصم منه كثيراً يبدو ذا قناة نشطة.
|
||||
//
|
||||
// وباستثناء صفوف الالتزامات صراحةً: 'obligation' مرجعها هذا المحرك
|
||||
// نفسه، ولو ظهرت يوماً بمبلغ موجب (تصحيح، استرداد) لصارت البوابة
|
||||
// تقيس أثر نفسها.
|
||||
$st = $con->prepare("
|
||||
SELECT
|
||||
COUNT(DISTINCT DATE(dateCreated)) AS days_with_income,
|
||||
COALESCE(SUM(amount), 0) AS total_income,
|
||||
MAX(DATE(dateCreated)) AS last_income_date
|
||||
FROM driverWallet
|
||||
WHERE driverID = ?
|
||||
AND amount > 0
|
||||
AND paymentMethod <> 'obligation'
|
||||
AND dateCreated >= DATE_SUB(CURDATE(), INTERVAL ? DAY)
|
||||
");
|
||||
$st->execute([$driverID, $windowDays]);
|
||||
$row = $st->fetch(PDO::FETCH_ASSOC) ?: [];
|
||||
|
||||
printSuccess([
|
||||
'driver_id' => $driverID,
|
||||
'window_days' => $windowDays,
|
||||
'days_with_income' => (int) ($row['days_with_income'] ?? 0),
|
||||
'total_income' => (float) ($row['total_income'] ?? 0),
|
||||
'last_income_date' => $row['last_income_date'] ?? null,
|
||||
]);
|
||||
} catch (PDOException $e) {
|
||||
error_log('[obligation/income_summary] ' . $e->getMessage());
|
||||
http_response_code(500);
|
||||
printFailure('Failed to read income summary');
|
||||
}
|
||||
Reference in New Issue
Block a user