Как отправить e.parameter в Google Apps Script, используя PHP и cURL - PullRequest
1 голос
/ 25 января 2020

Код ниже работает. Он отправляет данные в скрипт приложения Google, используя параметр запроса e.queryString. Я хотел бы знать, как обновить его, чтобы он отправлял те же данные, но с использованием объекта и параметра e.parameter.

Как мне обновить мой рабочий код, чтобы он отправлял следующий объект e.parameter в мой скрипт @ https://script.google.com/macros/s/XXXXXXSCRIPTIDXXXXX/exec и возвращал значения в мой php файл?

Object

{"responderName": "todd", "presenterName": "steve"}

Документация Google

Рабочая PHP Код с использованием e.queryString параметра

$url = 'https://script.google.com/macros/s/XXXXXXSCRIPTIDXXXXX/exec?responderName=todd&presenterName=steve';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, true);
$response = curl_exec($curl);
echo $response;
curl_close($curl);

Код скрипта рабочего приложения с использованием e.queryString

function doGet(e) {
  var params = JSON.stringify(e);
  return ContentService.createTextOutput(params);
}

1 Ответ

2 голосов
/ 26 января 2020
  • Вы хотите отправить данные responderName=todd&presenterName=steve в веб-приложения без использования параметра запроса URL.
  • Ваши веб-приложения были развернуты как Execute the app as: Me и Who has access to the app: Anyone, even anonymous.
  • Вы хотите отправить данные с помощью скручивания PHP.

Если мое понимание верно, как насчет этого ответа? Думайте об этом как об одном из нескольких возможных ответов.

Проблема и обходное решение:

Если вы хотите отправить данные в веб-приложения без использования параметра запроса URL, необходимо использовать метод POST. Так что в вашем случае, пожалуйста, используйте doPost() вместо doGet(). Таким образом, данные могут быть получены методом POST.

Модифицированный скрипт:

Скрипт Google Apps:

Пожалуйста, измените скрипт Google Apps следующим образом.

function doPost(e) { // Modified
  var params = JSON.stringify(e);
  return ContentService.createTextOutput(params);
}
  • При изменении сценария веб-приложений, пожалуйста, повторно разверните веб-приложения как новую версию. Этим отражается последний сценарий. Пожалуйста, будьте осторожны.

PHP:

Пожалуйста, измените ваш PHP скрипт следующим образом.

$data = array(
    'responderName' => 'todd',
    'presenterName' => 'steve'
);

$url = 'https://script.google.com/macros/s/###/exec';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$header = ['Content-Type: application/json'];
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($curl);
echo $response;
curl_close($curl);
  • В этом случае, заголовки могут не потребоваться.

Результат:

При использовании вышеуказанного сценария PHP следующий объект события может быть получен с e из doPost(e). В этом случае данные могут быть получены с помощью e.postData.contents. Но в этом случае, если вы хотите использовать данные как JSON объект, используйте JSON.parse().

{
  "parameter": {},
  "contextPath": "",
  "contentLength": 48,
  "queryString": "",
  "parameters": {},
  "postData": {
    "type": "application/json",
    "length": 48,
    "contents": "{\"responderName\":\"todd\",\"presenterName\":\"steve\"}",
    "name": "postData"
  }
}

Ссылки:

Если я неправильно понял ваш вопрос и это не то направление, которое вам нужно, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...