401 Несанкционированная ошибка при попытке использовать функцию отправки PHP cURL в скрипт Google Apps.

Я получаю сообщение об ошибке «Запрошенный URL-адрес вернул ошибку: 401 Неавторизованный» при попытке использовать PHP cURL со скриптом Google Apps.

Я следовал следующим инструкциям, но ничего не работает:
Как отправить сообщение в скрипт Google с помощью cURL в PHP и вернуть текст?
Отправка данных в скрипт приложений Google с помощью php/curl

Вчера я опубликовал этот дополнительный вопрос, который помог мне понять, что мне нужно настроить все сертификаты SSL:
Как использовать скрипты Google с cURL PHP? [дубликат]

Моя страница test.php:

<div id="body">
    <form name="testing" method="post">
        Email: <input type="text" name="email"><br>
        <input type="submit" value="Submit" onClick="return OnTest1();">
    </form>
</div>

<script>
    function OnTest1()
    {
        document.testing.action = "testsubmit.php";
        document.testing.submit();
        return true;
    }
</script>

Моя страница testsubmit.php:

<?php   
    $url = 'https://script.google.com/a/meditech.com/macros/s/[SCRIPT ID]/exec';
    $data['email'] = $_POST['email'];
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);    
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_FAILONERROR,true);

    $result = curl_exec($ch);

    if(curl_error($ch))
    {
        echo curl_error($ch);
    }
    else
    {
        echo $result;
    }

    curl_close($ch);
?>

И мой скрипт Google Apps:

function doPost(e)
{
  return ContentService.createTextOutput(e.parameter.email);
}

Я хочу иметь возможность в какой-то момент передать кучу информации на мою php-страницу для обработки в базе данных, которую я настроил, оттуда, как только она будет сброшена в базу данных, мне нужно затем отправить всю эту информацию в Google Apps Скрипт для отправки электронного письма.

Спасибо всем, кто может помочь.


person Russ B    schedule 26.04.2018    source источник
comment
Можем ли мы спросить вас о состоянии развернутых веб-приложений? Это Execute the app as: и Who has access to the app:.   -  person Tanaike    schedule 27.04.2018
comment
Настройки приложения: Execute the app as: Я и Who has access to the app: CompanyDomain.com.   -  person Russ B    schedule 27.04.2018
comment
Согласно недавнему обновлению, для доступа к веб-приложениям требуется общий доступ к проекту. Можете ли вы поделиться развернутыми веб-приложениями проекта и повторить попытку? Если это не было решением для вашей ситуации, извините.   -  person Tanaike    schedule 27.04.2018
comment
Привет @Tanaike, приложение доступно только в домене моей компании.   -  person Russ B    schedule 27.04.2018
comment
Спасибо за ваш ответ. Могу ли я считать, что проект с развернутыми веб-приложениями уже предоставлен пользователям?   -  person Tanaike    schedule 27.04.2018
comment
Привет @Tanaike, я не уверен, что понял твой вопрос, приношу свои извинения. Я думаю, что достаточно установить политики веб-приложений на Execute the app as: Myself и Who has access to the app: CompanyDomain.com, верно?   -  person Russ B    schedule 27.04.2018
comment
Также я беспокоюсь, что я, возможно, не смог понять о вашей ситуации. Прошу прощения за мое плохое знание английского. Вы развернули веб-приложения с помощью developers.google.com/apps-script/guides/web< /а> ?   -  person Tanaike    schedule 27.04.2018
comment
Я так и сделал. Он был развернут с помощью doPost и возвращает значение ContentService: function doPost(e) { return ContentService.createTextOutput(e.parameter.email); }   -  person Russ B    schedule 27.04.2018
comment
В моей среде я пока не могу воспроизвести вашу ситуацию. Так что я хотел бы подтвердить о ситуации. Во-первых, вы когда-нибудь подтверждали, может ли он получить доступ к развернутым веб-приложениям другими способами? Если вы никогда этого не делали, можете ли вы попробовать получить доступ к веб-приложениям с помощью curl, который не является php? образец завитка - простой способ. Таким образом, могут быть найдены неправильные точки. Прошу прощения за мой плохой навык.   -  person Tanaike    schedule 27.04.2018


Ответы (1)


Да, использование Execute the app as: Myself и Who has access to the app: CompanyDomain.com абсолютно нормально, но в то же время вы должны убедиться, что Google идентифицирует вас только из CompanyDomain.com. Как ты это делаешь сейчас?

Я думаю, для этого вам нужно передать данные аутентификации с помощью requset, может быть, что-то вроде токена OAuth/2. Сначала получите токен для пользователя, который делает запрос, а затем передайте этот токен в заголовке аутентификации, чтобы Google идентифицировал пользователя.

Или, если вы этого не хотите, вы можете переключиться на Who has access to the app: Anyone, even anonymous, тогда вам не нужно подтверждать свою личность.

Выберите то, что лучше всего подходит для ваших нужд.

Вы также можете проверить мой ответ здесь Как создать doPost(e) для получения данных из внешней службы?

person Umair Mohammad    schedule 27.04.2018
comment
Я считаю, что ваш ответ правильный, мне просто трудно заставить PHP работать с API Google в целом. - person Russ B; 27.04.2018
comment
Привет @Umair, я отметил ваш ответ как правильный, однако, поскольку я новый участник, я не могу проголосовать за ваш ответ. - person Russ B; 30.04.2018
comment
Босс без проблем :D - person Umair Mohammad; 01.05.2018