Javascript 如何使用PHP和cURL向googleapps脚本发送e.parameter

Javascript 如何使用PHP和cURL向googleapps脚本发送e.parameter,javascript,php,curl,google-apps-script,Javascript,Php,Curl,Google Apps Script,下面的代码可以工作。它使用e.queryStringrequest参数将数据发送到谷歌应用程序脚本。我想知道如何更新它,使其发送相同的数据,但使用对象和e.parameter参数 如何更新工作代码,使其将以下对象e.parameter发送到脚本@https://script.google.com/macros/s/XXXXXXSCRIPTIDXXXXX/exec并将值返回到我的php文件 对象 {"responderName": "todd", "presenterName": "steve"}

下面的代码可以工作。它使用
e.queryString
request参数将数据发送到谷歌应用程序脚本。我想知道如何更新它,使其发送相同的数据,但使用对象和
e.parameter
参数

如何更新工作代码,使其将以下对象
e.parameter
发送到脚本@
https://script.google.com/macros/s/XXXXXXSCRIPTIDXXXXX/exec
并将值返回到我的php文件

对象

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

使用e.queryString参数运行PHP代码

$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);
}
  • 您希望将
    responderName=todd&presenterName=steve
    的数据发送到Web应用程序,而不使用URL查询参数
  • 您的Web应用已部署为
    执行应用为:Me
    谁有权访问该应用:任何人,甚至是匿名的
  • 您希望使用PHP的curl发送数据
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

问题和解决方法: 如果要在不使用URL查询参数的情况下将数据发送到Web应用程序,则需要使用POST方法。因此,在您的情况下,请使用
doPost()
而不是
doGet()
。通过这种方式,数据可以作为POST方法接收

修改脚本: 谷歌应用程序脚本: 请修改您的谷歌应用程序脚本如下

function doPost(e) { // Modified
  var params = JSON.stringify(e);
  return ContentService.createTextOutput(params);
}
$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);
  • 当您修改Web应用的脚本时,请将Web应用重新部署为新版本。由此,最新的脚本得到了反映。请小心这个
PHP: 请按如下方式修改您的PHP脚本

function doPost(e) { // Modified
  var params = JSON.stringify(e);
  return ContentService.createTextOutput(params);
}
$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脚本时,可以在
doPost(e)
e
中检索以下事件对象。在这种情况下,可以通过
e.postData.contents
检索数据。但是在本例中,如果您想将数据用作JSON对象,请使用
JSON.parse()

参考资料:
如果我误解了你的问题,而这不是你想要的方向,我道歉。

  • 您希望将
    responderName=todd&presenterName=steve
    的数据发送到Web应用程序,而不使用URL查询参数
  • 您的Web应用已部署为
    执行应用为:Me
    谁有权访问该应用:任何人,甚至是匿名的
  • 您希望使用PHP的curl发送数据
如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一

问题和解决方法: 如果要在不使用URL查询参数的情况下将数据发送到Web应用程序,则需要使用POST方法。因此,在您的情况下,请使用
doPost()
而不是
doGet()
。通过这种方式,数据可以作为POST方法接收

修改脚本: 谷歌应用程序脚本: 请修改您的谷歌应用程序脚本如下

function doPost(e) { // Modified
  var params = JSON.stringify(e);
  return ContentService.createTextOutput(params);
}
$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);
  • 当您修改Web应用的脚本时,请将Web应用重新部署为新版本。由此,最新的脚本得到了反映。请小心这个
PHP: 请按如下方式修改您的PHP脚本

function doPost(e) { // Modified
  var params = JSON.stringify(e);
  return ContentService.createTextOutput(params);
}
$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脚本时,可以在
doPost(e)
e
中检索以下事件对象。在这种情况下,可以通过
e.postData.contents
检索数据。但是在本例中,如果您想将数据用作JSON对象,请使用
JSON.parse()

参考资料:

如果我误解了你的问题,而这不是你想要的方向,我道歉。

不清楚。您想发送一个对象而不是发送一个查询字符串吗?@TheMaster,很抱歉问题的措辞不正确。答案是使用。我想发送一个对象而不是查询字符串。谢谢你的帮助!事件对象已具有
参数
参数
属性。Google根据URL参数构造在您的
doGet
方法中接收的对象添加以下代码片段后,请查看Stackdriver日志中的e:
console.log({message:“doGet e”,eventObject:e})
@tehhowch,谢谢。这些信息帮助我理解了我的问题的措辞是错误的。我正试图找出如何在不使用URL中的查询字符串的情况下将信息发送到Google Apps脚本。是否可以在不向url添加数据的情况下发送对象?不清楚。您想发送一个对象而不是发送一个查询字符串吗?@TheMaster,很抱歉问题的措辞不正确。答案是使用。我想发送一个对象而不是查询字符串。谢谢你的帮助!事件对象已具有
参数
参数
属性。Google根据URL参数构造在您的
doGet
方法中接收的对象添加以下代码片段后,请查看Stackdriver日志中的e:
console.log({message:“doGet e”,eventObject:e})
@tehhowch,谢谢。这些信息帮助我理解了我的问题的措辞是错误的。我正试图找出如何在不使用URL中的查询字符串的情况下将信息发送到Google Apps脚本。是否可以在不将数据添加到url的情况下发送对象?@B先生,谢谢您的回复。我很高兴你的问题解决了。也谢谢你。你在这里帮了我好几次,我真的很感激你!祝您一周愉快。@B先生,谢谢您的回复。我很高兴你的问题解决了。也谢谢你。你在这里帮了我好几次,我真的很感激你!祝你一周愉快。