gpt4 book ai didi

php - Soundcloud (Oauth2) API 获取访问 token 失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:42:44 25 4
gpt4 key购买 nike

我正在尝试根据 Soundcloud 登录授权我网站上的用户。

它使用 Oauth 身份验证。

用户必须点击我网站上的一个按钮,然后被重定向到 Soundcloud 网站,并在那里登录。

之后,用户被重定向回我的站点,我必须在其中获取 accessToken。

失败并显示消息:请求的 URL 以 HTTP 代码 0 响应。

如果你需要的话,我已经把 curl 的东西扔掉了:

 [data]; False
[info][url] : https://api.soundcloud.com/oauth2/token
[content_type] ; NULL
[http_code] : 0
[header_size] : 0
[request_size] : 0
[filetime] : -1
[ssl_verify_result] : 0
[redirect_count] : 0
[total_time] : 0.031
[namelookup_time] : 0
[connect_time] : 0.031
[pretransfer_time] : 0
[size_upload] : 0
[size_download] : 0
[speed_download] : 0
[speed_upload] : 0
[download_content_length]: -1
[upload_content_length] : -1
[starttransfer_time] : 0
[redirect_time] : 0
[certinfo] []

我执行的代码:

    $soundcloud = new SoundcloudModel('*****', '*****', '*****');

try {
$accessToken = $soundcloud->accessToken($this->request['code']);
} catch (Services_Soundcloud_Invalid_Http_Response_Code_Exception $e) {
exit($e->getMessage());
}

Soundcloud API 代码:

protected function _getAccessToken($postData, $curlOptions = array())
{
$options = array(CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData);
$options += $curlOptions;
$response = json_decode(
$this->_request($this->getAccessTokenUrl(), $options),
true
);

if (array_key_exists('access_token', $response)) {
$this->_accessToken = $response['access_token'];

return $response;
} else {
return false;
}
}

protected function _request($url, $curlOptions = array())
{
$ch = curl_init($url);
$options = $this->_curlOptions;
$options += $curlOptions;

if (array_key_exists(self::CURLOPT_OAUTH_TOKEN, $options)) {
$includeAccessToken = $options[self::CURLOPT_OAUTH_TOKEN];
unset($options[self::CURLOPT_OAUTH_TOKEN]);
} else {
$includeAccessToken = true;
}

if (array_key_exists(CURLOPT_HTTPHEADER, $options)) {
$options[CURLOPT_HTTPHEADER] = array_merge(
$this->_buildDefaultHeaders(),
$curlOptions[CURLOPT_HTTPHEADER]
);
} else {
$options[CURLOPT_HTTPHEADER] = $this->_buildDefaultHeaders(
$includeAccessToken
);
}

curl_setopt_array($ch, $options);

$data = curl_exec($ch);
$info = curl_getinfo($ch);

print_r(array('ch'=>$ch, 'data'=>$data, 'info'=>$info));

curl_close($ch);

$this->_lastHttpResponseHeaders = $this->_parseHttpHeaders(
substr($data, 0, $info['header_size'])
);
$this->_lastHttpResponseBody = substr($data, $info['header_size']);
$this->_lastHttpResponseCode = $info['http_code'];

if ($this->_validResponseCode($this->_lastHttpResponseCode)) {
return $this->_lastHttpResponseBody;
} else {
throw new Services_Soundcloud_Invalid_Http_Response_Code_Exception(
null,
0,
$this->_lastHttpResponseBody,
$this->_lastHttpResponseCode
);
}
}

抱歉发了这么长的帖子,希望大家能帮帮我!

最佳答案

明白了。

我发现 PHP 使用的 cURL 使用过时的证书包(至少在 Windows 上)。

我已经从以下位置下载了最新的证书包:http://curl.haxx.se/docs/caextract.html并添加了以下 cURL 选项:

curl_setopt($ch, CURLOPT_CAINFO, 'C:/absolute/path/to/cacert.pem');

关于php - Soundcloud (Oauth2) API 获取访问 token 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5533084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com