טוקן של גוגל לא מתרענן אוטומטית בPHP
-
יש לי קוד בשפת PHP שאמור לסמן כנקרא+תווית כלשהוא מיילים עם id שאני שולח לפונקצייה
לצורך כך צריך ליצור לקוח בקלאוד ואח"כ ליצור טוקן
אך משום מה הטוקן מחזיק מעמד רק כמה ימים ואז אני צריך להיכנס ולאמת מחדש במקום שזה יתרענן אוטומטית
ניסיתי לבקש עזרה מGPT אבל הוא רק סיבך אותי...
אשמח מאוד אם תוכלו לעזור לי
זה הקוד שיש לי כרגע<?php error_reporting(E_ALL); ini_set('display_errors', 1); ini_set('log_errors', 1); ini_set('error_log', '/var/www/unread_mail.log'); require __DIR__ . '/vendor/autoload.php'; use Google\Client; use Google\Service\Gmail; use Google\Service\Gmail\ModifyMessageRequest; function unread_mail($id, $status) { $credentialsPath = '/var/www/client_unread_gmail.json'; // קובץ האישורים $tokenPath = '/var/www/token_unread_gmail.json'; // קובץ הטוקן $client = new Client(); $client->setApplicationName('Gmail API PHP Quickstart'); $client->setScopes(Gmail::GMAIL_MODIFY); $client->setAuthConfig($credentialsPath); $client->setAccessType('offline'); $client->setPrompt('select_account'); // כדי לא לבקש אישור כל פעם מחדש // אם יש token שמור, טען אותו if (file_exists($tokenPath)) { $accessToken = json_decode(file_get_contents($tokenPath), true); $client->setAccessToken($accessToken); } // אם אין token או שהוא לא בתוקף, יש לחדש אותו if ($client->isAccessTokenExpired()) { // אם הטוקן פג תוקף, נסה לרענן אותו if ($client->getRefreshToken()) { try { $newAccessToken = $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); $client->setAccessToken($newAccessToken); file_put_contents($tokenPath, json_encode($client->getAccessToken())); } catch (Exception $e) { // אם רענון הטוקן נכשל, צריך לעשות אימות מחדש $authUrl = $client->createAuthUrl(); printf("פתח את הקישור הבא בדפדפן שלך כדי לאמת:\n%s\n", $authUrl); print 'הזן את הקוד שקיבלת: '; $authCode = trim(fgets(STDIN)); $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); $client->setAccessToken($accessToken); file_put_contents($tokenPath, json_encode($accessToken)); } } else { // אם אין refresh_token, יש צורך באימות מחדש $authUrl = $client->createAuthUrl(); printf("פתח את הקישור הבא בדפדפן שלך כדי לאמת:\n%s\n", $authUrl); print 'הזן את הקוד שקיבלת: '; $authCode = trim(fgets(STDIN)); $accessToken = $client->fetchAccessTokenWithAuthCode($authCode); $client->setAccessToken($accessToken); file_put_contents($tokenPath, json_encode($accessToken)); } } $service = new Gmail($client); $labels = $service->users_labels->listUsersLabels('me'); $update_id = null; foreach ($labels->getLabels() as $label) { if ($label->getName() === $status) { $update_id = $label->getId(); break; } } if (!$update_id) { $newLabel = new Google\Service\Gmail\Label([ 'name' => $status, 'labelListVisibility' => 'labelShow', 'messageListVisibility' => 'show' ]); $createdLabel = $service->users_labels->create('me', $newLabel); $update_id = $createdLabel->getId(); } $messageId = $id; $modifyRequest = new ModifyMessageRequest([ 'addLabelIds' => [$update_id], 'removeLabelIds' => ['UNREAD', 'INBOX'] ]); try { $service->users_messages->modify('me', $messageId, $modifyRequest); return "ok"; } catch (Exception $e) { return 'שגיאה: ' . $e->getMessage(); } }
תודה רבה מראש!
-
@יאנג-בוי כתב בטוקן של גוגל לא מתרענן אוטומטית בPHP:
@dovid במחילה מכבודכם, אבל נראה לי שהוא כתב בדיוק מה הבעיה שלו... הקוד עובד, ורק הטוקן מתאפס משום מה.
לא האשמתי אותו בלא לכתוב ברור, טענתי שבשביל לדבאג קוד מישהו צריך להריץ ולבחון אותו וזה אמור להיות מי שבכל מקרה מריץ אותו.
יש קוד נהדר, עם בקרת זרימה ופלט, ואין לי מושג מה התרחש בפועל.
למשל, האימות מחדש קורה בשני אפשרויות, או אם getRefreshToken מחזיר ריק או אם יש שגיאה (catch), ואין לי מושג איזה שלב קרה. -
@ששא
זה לא מתפרסם בשום מקום. רק תזהר לא לשתף את הטוקנים שלך.@ששא כתב בטוקן של גוגל לא מתרענן אוטומטית בPHP:
הם דורשים המון דברים(למשל דף בית, מדיניות פרטיות, סרטון הדגמה) שאין לי
הם מבקשים, למיטב ידיעתי בפעם האחרונה שעשיתי זה לא היה חובה.
יש לי פרוייקטים שרצים בלי זה.
זה רק יכתוב שהאפליקציה לא אומתה וכו'.