OAuth响应作为URL工作,但可以';t让cURL在PHP中工作


OAuth response works as URL but can't get cURL to work in PHP

我正试图获得OAuth响应来使用Slack,但没有任何乐趣。

我得到了一个从Slack返回的"代码"var值,我需要将其包含在我的响应中。

我可以使用返回的值手动构建一个URL,并将其作为响应发送,以完成OAuth并安装我的应用程序——每次都可以。它看起来像这样:

https://slack.com/api/oauth.access?client_id=12345&code=123.456.789&client_secret=12345678&

"代码"var是可变位,其他东西都是静态的。

我知道PHP得到了我需要的"代码"的值,因为我可以回显它

以下是不起作用的PHP:

    <?php 
    $authCode = $_GET['code'];
    echo $authCode; //succeeds
    $client_id = '12345';
    $client_secret = '12345678';

    $data = array(
                'client_id' => $client_id,
                'client_secret' => $client_secret,
                'code' => $authCode
                    );
            $data_string = json_encode($data);

    $ch = curl_init('https://slack.com/api/oauth.access');
                curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
                curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                    'Content-Type: application/json',
                    'Content-Length: ' . strlen($data_string))
                );
            //Execute CURL
            $result = curl_exec($ch);
            return $result; 

     ?>

我希望在发送响应后加载一个新页面,但首先要做的是。

这是我第一次尝试这样的东西,所以我怀疑我错过了一个重要的部分,我希望有人能帮我分类

欢迎任何能够取得成功的替代办法。谢谢

这里有两件事不太正确:

  1. 您以JSON格式提供输入参数,但根据OAuth 2.0规范,Slack API要求将参数提供为GET或POST参数,如下所示:https://api.slack.com/web#basics.因此,应该使用http_build_query($data)而不是json_encode($data),并省略自己设置任何HTTP头。

  2. 请求中缺少redirect_uri参数