diff --git a/backend/ride/firebase/send_fcm.php b/backend/ride/firebase/send_fcm.php index 98abe732..6dcd463b 100644 --- a/backend/ride/firebase/send_fcm.php +++ b/backend/ride/firebase/send_fcm.php @@ -6,6 +6,9 @@ header('Content-Type: application/json; charset=utf-8'); $apiKey = $_SERVER['HTTP_X_API_KEY'] ?? ''; $expectedKey = getenv('FCM_INTERNAL_API_KEY'); if (!empty($expectedKey) && !hash_equals($expectedKey, $apiKey)) { + // ‏فشل صامت خطير: التطبيقان لا يرسلان x-api-key إطلاقاً، فلحظة ضبط + // ‏FCM_INTERNAL_API_KEY في البيئة تموت **كل** الرسائل والمكالمات بينهما. + error_log('[SEND_FCM] REJECTED 403 — FCM_INTERNAL_API_KEY set but request sent no x-api-key'); http_response_code(403); echo json_encode(['status' => 'error', 'message' => 'Unauthorized']); exit; @@ -49,6 +52,10 @@ $tone = $requestData['tone'] ?? 'default'; $customData = $requestData['data'] ?? []; if (!$target) { + // ‏يعني أن المُرسِل لا يملك توكن الطرف الآخر — عادةً tokenPassenger أو + // ‏driverToken فارغ في التطبيق لأنه لم يصله في حمولة القبول. + error_log('[SEND_FCM] REJECTED 400 — empty target. category=' + . (string)($requestData['data']['category'] ?? '?')); http_response_code(400); echo json_encode(['status' => 'error', 'message' => 'Missing: target, title, or body.']); exit; @@ -197,6 +204,17 @@ $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); +// ‏هذه النقطة هي مسار كل الرسائل والمكالمات بين الراكب والسائق (التطبيقان +// ‏يستدعيانها مباشرة)، ولم تكن تسجّل شيئاً إطلاقاً — بخلاف FcmService التي +// ‏تطبع [FCM_DEBUG]. فكان فشل الرسائل غير قابل للتشخيص: لا سبب ولا رد Google. +$logCategory = (string)($customData['category'] ?? ''); +$logTarget = $isTopic ? "topic:$target" : substr((string)$target, 0, 16) . '…'; +error_log( + "[SEND_FCM] category=$logCategory target=$logTarget http=$httpCode" + . " len=" . strlen((string)$target) + . ($httpCode == 200 ? '' : " response=$result") +); + // الرد if ($httpCode == 200) { echo json_encode([