【发布时间】:2015-04-18 05:51:49
【问题描述】:
我想通过 curl / doPost 从基于 php 的数据库系统向谷歌应用程序引擎提交一些简单的数据。目标是 GAS 以访问网络应用程序的用户身份执行应用程序,并且任何人(拥有 google 帐户)都可以访问该应用程序。
在 PHP 系统端,我有以下代码来发送数据:
// Get cURL resource
//
$curl = curl_init();
// Set some options
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://script.google.com/macros/s/AKfycbw-BksmkTsn_KEX40EhzfEulE-rJsUmlbIjUtW9PrTRMQLyiA/exec',
CURLOPT_POST => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_SSL_VERIFYPEER => 1,
CURLOPT_POSTFIELDS => array(
'firstname' => 'John',
'lastname' => 'Miller'
)
));
// Send the request, save response to $resp
$resp = curl_exec($curl);
//echo curl_error($curl);
// Show response
echo $resp;
// Close request to clear up some resources
curl_close($curl);
//echo 'curl closed';
在 GAS 方面,我有以下代码来接收数据:
function doPost(e) {
var parameter
var wert
for (var i in e.parameter) {
parameter = i;
wert = e.parameter[i];
if (parameter == "firstname") {var firstname = wert;}
if (parameter == "lastname") {var lastname = wert;}
}
//Return
return ContentService.createTextOutput("The name is: " + firstname + " " + lastname);
}
只有在使用以下选项部署 GAS 中的脚本时,代码才能正常工作:“将应用程序执行为:”设置为“我自己”。 “谁有权访问该应用程序”设置为“任何人,甚至匿名”。如果有人想测试代码,您还必须在 php.ini 中添加一些行并在您的计算机上保存一个“cacert.pem”文件:
[curl]
curl.cainfo="C:/[path to]/cacert.pem"
CURLOPT_SSL_VERIFYPEER=1
如果我将部署选项“将应用程序执行为:”切换为“用户访问 Web 应用程序”并且“谁有权访问该应用程序”切换为“任何人”,则它不再起作用。屏幕上出现以下内容:
通过 cURL 将 https 请求发送到 google 应用程序脚本后,会出现一个登录屏幕,供用户登录到 google。 chrome 中的标签标题为“认识 Google”。它显示“登录以继续使用 Google 云端硬盘”。整个登录屏幕都是英文的(我是德国人)。之后,我输入我的私人谷歌帐户的登录信息,然后按“登录”按钮。之后会出现第二个登录屏幕。 chrome 中的标签标题为“Google Drive”。它说“Zur Nutzung von Google Drive anmelden”(翻译:“请登录以访问 google drive。”)。然后我再次输入相同的登录信息并按下“anmelden”按钮(翻译:“登录”)。接下来发生的事情是应用程序脚本的 URL 出现在 chrome 中。该选项卡的标题为“Fehler”(翻译:“错误”)。在窗口中我可以阅读“Skript-Funktion nicht gefunden: doGet”(翻译:“找不到脚本函数:doGet”)。
我无法理解 Google Apps 脚本的行为。特别是我不明白为什么谷歌要求“doGet”,尽管应用脚本中肯定有一个“doPost”。
我们非常欢迎一些帮助。
几个月后我仍在处理这个问题。
我在 google 开发者控制台中创建了一个项目,并将应用程序脚本连接到该项目。
这样就可以通过 PHP 的 google api 调用访问登录的 google 用户。所以我必须在 PHP 中完成所有的编码。但这不是我想要的。
我想通过谷歌应用脚本访问当前登录的谷歌用户 gmail / drive 等。我只想通过 PHP 传输一些数据。
在网上搜索了几个小时后,在我看来这是不可能的。
非常欢迎任何提示。
【问题讨论】: