You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Slack API users.info接口返回user_not_found错误求助

问题根因

核心问题是GET请求传参方式不符合Slack API规则,且cURL配置存在逻辑冲突:

  • Slack的users.info是GET类型接口,只会解析URL查询字符串中的参数,完全忽略请求体携带的内容
  • 你的代码虽然显式设置了请求方法为GET,但把user参数通过CURLOPT_POSTFIELDS传入,这部分参数会被放到请求体中,Slack侧根本读取不到,相当于调用接口时没有携带有效user参数。Slack API对于这类GET接口的参数缺失不会返回明确的missing_argument错误,反而会直接抛user_not_found,非常容易误导排查方向
  • 额外隐患:PHP cURL中如果给GET请求设置了CURLOPT_POSTFIELDS,部分版本会自动覆盖自定义的GET方法配置、实际发送POST请求,进一步加剧接口解析异常。
修复方案

1. 调整getUser方法的参数拼接逻辑

GET请求的参数直接拼接到接口URL末尾,不要通过POSTFIELDS传递:

/* Get User Profile */
public function getUser($userId) {
    $method = "GET";
    $endpoint = "https://slack.com/api/users.info";
    $token = ###;

    $data = array(
        "user" => $userId
    );
    // GET请求直接把参数拼到URL后
    $endpoint .= "?" . http_build_query($data);

    $response = $this->call_slack_api($token, $method, $endpoint);
    return $response;
}

2. 优化通用API调用方法的传参逻辑

区分不同请求方法的传参规则,GET请求不传递POSTFIELDS,避免逻辑冲突:

/* Call the Slack API */
private function call_slack_api($token, $method, $endpoint, $data = "") {
    $curl = curl_init();

    $headers = array(
        "Authorization: Bearer " . $token
    );
    // GET请求不需要手动设置表单类型头,cURL会自动处理
    if (strtoupper($method) !== "GET") {
        $headers[] = "Content-type: application/x-www-form-urlencoded";
    }

    $options = array(
        CURLOPT_CUSTOMREQUEST => strtoupper($method),
        CURLOPT_URL => $endpoint,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_SSL_VERIFYPEER => true,
        CURLOPT_TIMEOUT => 10
    );

    // 只有非GET请求才传POSTFIELDS
    if (strtoupper($method) !== "GET" && !empty($data)) {
        $options[CURLOPT_POSTFIELDS] = $data;
    }

    curl_setopt_array($curl, $options);
    $response = curl_exec($curl);
    $info = curl_getinfo($curl);
    $this->response_code = $info['http_code'];
    curl_close($curl);

    return $response;
}
额外排查点(修复后仍报错时核对)
  • 确认使用的xoxb-/xoxp-开头的token所属应用,已经安装到对应用户ID所在的工作区,跨工作区的token无法查询其他工作区的用户
  • 确认token已经申请了users:read权限,权限不足时部分场景也会返回模糊的user_not_found错误而非明确的权限报错
  • 如果传入的是企业级组织(Enterprise Grid)下的跨工作区用户ID,需要使用组织级别的token、调用admin.users.info接口查询,普通工作区token无法查询未加入当前工作区的组织用户

内容的提问来源于stack exchange,提问作者Virik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:51:08