2015-06-05 2 views
5

ПОЛОЖЕНИЕ:Gmail API: Недостаточное Разрешение

Я тестирование Gmail API для моего приложения.

Я протестировал несколько запросов, и они работают нормально. Например, получите сообщения, получите историю пользователей, получите черновик списка и т. Д.

В основном все только запросы работают нормально.

У меня есть некоторые проблемы, связанные с разрешением с другими запросами, например, когда мне нужно написать или удалить черновик.

Это ошибка, я получаю:

(403) Insufficient Permission 

КОД:

Это функция для инициализации приложения:

public function gmail_init_service() 
{ 
    $client = new Google_Client(); 

    $client->setApplicationName("Gmail API test"); 
    $client->setDeveloperKey("MY_KEY"); 
    $client->setClientSecret('MY_CLIENT_SECRET'); 
    $client->SetClientId('MY_CLIENT_ID'); 
    $client->setScopes(array('https://mail.google.com/')); 
    $client->setAccessToken('{"access_token":"MY_ACCESS_TOKEN","token_type":"Bearer","expires_in":3600,"refresh_token":"MY_REFRESH_TOKEN","created":1433502343}'); 

    $service = new Google_Service_Gmail($client); 

    return $service; 
} 

Это запрос на удаление одного проект:

public function gmail_delete_draft() 
{ 
    $service = $this->gmail_init_service(); 

    // --------------- Get draft list -------------- 

    $list = $service->users_drafts->listUsersDrafts('me'); 
    $draftList = $list->getDrafts(); 

    // --------------- Get draft IDs --------------- 

    $inbox_draft = []; 

    foreach($draftList as $mlist) 
    { 
     $draftId = $mlist->id; 
     $optParamsGet2['format'] = 'full'; 
     $single_message = $service->users_drafts->get('me', $draftId , $optParamsGet2); 

     $inbox_draft[]['draftId'] = $draftId; 
     $inbox_draft[]['draft'] = $single_message; 
    } 

    // --------------- Delete draft --------------- 

    $draft_delete = $service->users_drafts->delete('me', 'DRAFT_ID'); 
} 

EDIT:

Я попытался отозвать разрешение и настройки новых учетных данных. Объем объявляется при инициализации службы является:

https://mail.google.com/ 

, что, как указано в документации, предоставление полный доступ к учетной записи в.

Но я все еще получаю ту же ошибку. То же самое точное ошибка по следующим запросам:

Удаление проекта - Создание проекта - Создать ярлык - Удалить сообщение

ВОПРОС:

Почему я получаю эту ошибку?
Он имеет отношение к тому же хранению значений в кеше?
Или связано с разрешением API?

+0

Как вы получаете access_token в первую очередь? – abraham

ответ

7

Для создания черновика вам необходимо «https://www.googleapis.com/auth/gmail.compose». Так что же происходит, если вы

$client->setScopes(array(
    'https://mail.google.com/', 
    'https://www.googleapis.com/auth/gmail.compose' 
)); 

или если вы хотите получить более формальный

define('SCOPES', implode(' ', array(
    Google_Service_Gmail::MAIL_GOOGLE_COM, 
    Google_Service_Gmail::GMAIL_COMPOSE) 
)); 

$client->setScopes(SCOPES) 

или любой действительный PHP может быть (я не сделал PHP на некоторое время).

Примечание что если у вас уже есть токен, вам, возможно, придется выполнить некоторые проверки, чтобы отменить его, чтобы вы могли переиздавать с добавленными разрешениями. Это может означать удаление файла, возможно, названного gmail.storage, или, если у вас есть доступ к учетной записи входа и введите свой путь до https://security.google.com/settings/security/permissions, разрешения доступа могут быть отменены вручную.

Эта ссылка может иметь значение: https://developers.google.com/gmail/api/auth/scopes

И меандр through the source code может быть полезным.

Вы могли бы почерпнуть некоторое представление from my battle with this same sort of thing under Python

+1

Спасибо, я в основном собрал два ответа. и повторного включения api было недостаточно, но я создал новую учетную запись, а в файле quickstart.php я заменил Google_Service_Gmail :: GMAIL_READONLY на Google_Service_Gmail :: MAIL_GOOGLE_COM, Google_Service_Gmail :: GMAIL_COMPOSE. «https://mail.google.com/», «https://www.googleapis.com/auth/gmail.compose» при инициализации api в моем приложении. Теперь работает нормально. – johnnyfittizio

2

В качестве возможности для удаления почты вам необходимо https://mail.google.com/.

+0

Спасибо, что ответили! Я пробовал эту область отдельно и в сочетании с предыдущей областью, но все же я получаю ту же ошибку. – johnnyfittizio

+0

Должно быть, это проблема кэширования, о которой вы говорите. Стреляйте! С другой стороны, я думаю, что вам лучше просто создать клиента один раз, когда ваше приложение будет запущено, и вместо этого передайте свою переменную $ service вместо своих функций. Перейдите и отмените доступ к вашему приложению (https://security.google.com/settings/security/permissions) и повторите попытку :) – Tholle

+0

Но изменение области в зависимости от запроса нет? Или я могу использовать https://mail.google.com/ для всех запросов? – johnnyfittizio

Смежные вопросы