דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. טוקן של גוגל לא מתרענן אוטומטית בPHP

טוקן של גוגל לא מתרענן אוטומטית בPHP

מתוזמן נעוץ נעול הועבר תכנות
8 פוסטים 3 כותבים 433 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • ש מנותק
    ש מנותק
    ששא
    כתב נערך לאחרונה על ידי ששא
    #1

    יש לי קוד בשפת 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();
        }
    }
    

    תודה רבה מראש!

    יאנג בויי תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב נערך לאחרונה על ידי
      #2

      זה יותר עזרה הGPT אנושי מאשר שאלה בפורום...
      כשיש קוד שלא עובד כמצופה, אז דבר ראשון מתחקים אחרי מה הוא עושה, לאיזה תנאי הוא נכנס ולאיזה לא, איפה הוא עוצר ושמים את האצבע יחסית על המקום שלא פועל כצפוי.

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      תגובה 1 תגובה אחרונה
      2
      • יאנג בויי מנותק
        יאנג בויי מנותק
        יאנג בוי
        השיב לששא נערך לאחרונה על ידי יאנג בוי
        #3

        @ששא
        פבלשת את החיבור בקלאוד?
        אם לא מפבלשים זה אמור להתאפס בתכיפות.


        שים לב שהמייל גלוי בקוד, שקול לערוך את ההודעה.


        @dovid במחילה מכבודכם, אבל נראה לי שהוא כתב בדיוק מה הבעיה שלו... הקוד עובד, ורק הטוקן מתאפס משום מה.

        ש dovidD 2 תגובות תגובה אחרונה
        2
        • ש מנותק
          ש מנותק
          ששא
          השיב ליאנג בוי נערך לאחרונה על ידי
          #4

          @יאנג-בוי כתב בטוקן של גוגל לא מתרענן אוטומטית בPHP:

          פבלשת את החיבור בקלאוד?

          אני לא מבין את המילה...
          יצרתי מזהה לקוח
          מה עוד?

          יאנג בויי תגובה 1 תגובה אחרונה
          0
          • יאנג בויי מנותק
            יאנג בויי מנותק
            יאנג בוי
            השיב לששא נערך לאחרונה על ידי
            #5

            @ששא
            זה אמור להראות ככה:
            f38c7d5b-8447-4498-ad14-4f4723cafd55-image.png
            אם במקום Back to testing יש לך Publish, תלחץ עליו.

            בהצלחה!

            ש תגובה 1 תגובה אחרונה
            2
            • dovidD מנותק
              dovidD מנותק
              dovid ניהול
              השיב ליאנג בוי נערך לאחרונה על ידי dovid
              #6

              @יאנג-בוי כתב בטוקן של גוגל לא מתרענן אוטומטית בPHP:

              @dovid במחילה מכבודכם, אבל נראה לי שהוא כתב בדיוק מה הבעיה שלו... הקוד עובד, ורק הטוקן מתאפס משום מה.

              לא האשמתי אותו בלא לכתוב ברור, טענתי שבשביל לדבאג קוד מישהו צריך להריץ ולבחון אותו וזה אמור להיות מי שבכל מקרה מריץ אותו.
              יש קוד נהדר, עם בקרת זרימה ופלט, ואין לי מושג מה התרחש בפועל.
              למשל, האימות מחדש קורה בשני אפשרויות, או אם getRefreshToken מחזיר ריק או אם יש שגיאה (catch), ואין לי מושג איזה שלב קרה.

              מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

              בכל נושא אפשר ליצור קשר dovid@tchumim.com

              תגובה 1 תגובה אחרונה
              1
              • ש מנותק
                ש מנותק
                ששא
                השיב ליאנג בוי נערך לאחרונה על ידי ששא
                #7

                @יאנג-בוי זה אכן לא מפורסם עדיין
                מה בעצם כולל הפרסום? זה אכן מפורסם איפשהוא? או מה?

                עריכה: הם דורשים המון דברים(למשל דף בית, מדיניות פרטיות, סרטון הדגמה) שאין לי בדיוק כי זה לא באמת אפליקצייה או אתר אלא רק קוד שרץ ברקע
                אין דרך אחרת?

                יאנג בויי תגובה 1 תגובה אחרונה
                0
                • יאנג בויי מנותק
                  יאנג בויי מנותק
                  יאנג בוי
                  השיב לששא נערך לאחרונה על ידי
                  #8

                  @ששא
                  זה לא מתפרסם בשום מקום. רק תזהר לא לשתף את הטוקנים שלך.

                  @ששא כתב בטוקן של גוגל לא מתרענן אוטומטית בPHP:

                  הם דורשים המון דברים(למשל דף בית, מדיניות פרטיות, סרטון הדגמה) שאין לי

                  הם מבקשים, למיטב ידיעתי בפעם האחרונה שעשיתי זה לא היה חובה.
                  יש לי פרוייקטים שרצים בלי זה.
                  זה רק יכתוב שהאפליקציה לא אומתה וכו'.

                  תגובה 1 תגובה אחרונה
                  2

                  בא תתחבר לדף היומי!
                  • התחברות

                  • אין לך חשבון עדיין? הרשמה

                  • התחברו או הירשמו כדי לחפש.
                  • פוסט ראשון
                    פוסט אחרון
                  0
                  • דף הבית
                  • קטגוריות
                  • פוסטים אחרונים
                  • משתמשים
                  • חיפוש
                  • חוקי הפורום