我如何从 CodeIgniter return JSON 数据到 Google Apps 脚本?

How do I return JSON data from CodeIgniter to Google Apps Script?

所以我们一直在 Google Apps 脚本中制作聊天机器人,其功能之一是显示来自数据库(在线托管)的信息。该脚本向我们的 CodeIgniter 程序中的控制器函数发送 POST 请求:

function do_post(name, status, duration) {
// Make a POST request with a JSON payload.
var data = {
    'name': name,
    'status': status,
    'key' : api_key,
    'duration' : duration
};
var options = {
    'method' : 'post',
    'contentType': 'application/json',
    'muteHttpExceptions' : true,
    // Convert the JavaScript object to a JSON string.
    'payload' : JSON.stringify(data)
};
var response = UrlFetchApp.fetch('https://www.domainname.com/bot/index.php/bot/process/', options);
Logger.log(response);
return response;
}

上面的函数使用 CI 中的 process() 控制器成功地将记录插入数据库,但问题出在我们的响应变量中。它是 HttpResponse 类型,我们不知道如何从我们的控制器 return 该类型。我们希望我们的控制器对我们的聊天机器人 return 类似 {"Response": "success"} 的东西,但我们不知道如何做。我们已经尝试 returning 一个 JSON 编码的数组:

public function process()
{
    $_POST = array_replace($_POST, json_decode(file_get_contents('php://input'), true) ?? []);
    $name = $_POST["name"];
    $status = $_POST["status"];
    $api = $_POST["key"];
    $duration = $_POST["duration"];
    if ($api == api_key){
        $result = $this->bot_model->add_log();
    }
    $res_array =  array("response" => $result);
    // encode array to json
    $json = json_encode($res_array);
    return ($json);
    }
}

我们尝试使用 response.getContentText() 在我们的应用程序脚本中访问 var 响应,但我们得到类似“string(39)”的内容,然后是 api_key 的值。我们如何从响应中访问 json 数据?

您需要设置页面的 mime 类型,以便可以使用输出 class 中的 set_content_type() 方法提供 JSON 数据。

检查代码

    public function process()
{
    $_POST = array_replace($_POST, json_decode(file_get_contents('php://input'), true) ?? []);
    $name = $_POST["name"];
    $status = $_POST["status"];
    $api = $_POST["key"];
    $duration = $_POST["duration"];
    if ($api == api_key){
        $result = $this->bot_model->add_log();
    }
    
    // JSON OUTPUT
    $this->output
        ->set_content_type('application/json')
        ->set_output(json_encode( array("response" => $result)));
  
}

我注意到当通过 post 调用 CodeIgniter 中的函数时,该函数的 return 是函数以任何方式打印出来的任何内容,无论是 echo,print_r,或 var_dump。所以要 return 你的 JSON 文件到 App Script 只需做 echo $json;.