首页 > 解决方案 > 如何将返回的谷歌应用脚​​本“doPost(e)”函数存储在 cURL 的变量中?

问题描述

我在谷歌应用程序脚本上编写了一个 doPost(e) 函数,该函数将根据发送的数据返回一个数字。该脚本返回一个数字,有点像这样:

谷歌应用脚​​本代码:

doPost(e)
{
/* Code that does stuff with the parameters */
var results = 3;
var result_output = JSON.stringify(results);
var output = ContentService.createTextOutput(result_output).setMimeType(ContentService.MimeType.JSON);
return output;
}

这是我的 cURL 代码,它发送适当的值,旨在将 Google App 脚本代码返回的输出存储在一个变量中,以便稍后在程序中使用:

function connect_to_GAS() 
{
// Get cURL resource
$curl = curl_init();
// Set some options
curl_setopt_array($curl, array(
CURLOPT_URL => 'puturlhere',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => array(
// add params here
)
));

curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // there is a redirect

// Send the request, save response to $resp

$resp = curl_exec($curl);

echo $resp;
}

当我返回 $resp 值时,它只返回“1”,因为该函数已成功执行,但由于某种原因我无法让它存储重新调整的值!!!

我已将其部署为 Web 应用程序,并且脚本的 Post 功能确实有效,但我的 cURL 端没有收到我想要的值。令人沮丧的是,当我运行我的 cURL 脚本时,我需要的值显示在生成的网页中,但我无法访问它。

有谁知道我如何存储响应????任何帮助深表感谢!!

标签: phpcurlgoogle-apps-script

解决方案


  1. 首先,当您对脚本进行更改时,需要将其保存为新版本并再次发布以使其生效。
  2. 您正在返回一个数字,但不是 json。尝试返回正确的 json。
  3. 对于这种情况,我使用 guzzle。
  4. 结果得到的 1 与从 gs 文件返回的变量无关。那 1 表示 curl 已经成功。

示例代码

在 gs 文件中

function doPost(e){
  //WHILE PRODUCTION
  //var postData = JSON.parse(e.postData.contents);
  //WHILE TESTING
  //var postData = e.postData.contents;
  return ContentService.createTextOutput(JSON.stringify({'status': 'success'})).
  setMimeType(ContentService.MimeType.JSON);
}

function test(){
  var payload = {
  "key1": "value1",
  "key2": "value2",
  }

  var e = {
    postData: {
    contents: payload
  }
 };
  var returned = doPost(e);
}

在 php 文件中

<?php
    session_start();
    require_once '../vendor/autoload.php';
    $client = new GuzzleHttp\Client(['verify'=>false]);
//  Webapp link
    $url = 'https://script.google.com/macros/s/yourwebapplink/exec';
    $payload = json_encode(array("key1" => "value1", "key2" => "value2"))
    $response = $client->request('POST', $url, ['json' => $payload]);
    $body = json_decode($response->getBody());
    print_r($body);
    return;
?>

如果您使用作曲家,安装 guzzle 很容易


推荐阅读