我有一个网络应用程序,允许用户将Facebook帐户与我们网站上的帐户连接.当用户决定与Facebook连接时,应用程序请求publish_stream和offline_access权限,然后存储Facebook uid和session_key每个用户.这一切现在都很好.
我的问题是迁移到Facebook的新OAuth 2.0系统.我想将我拥有的会话密钥转换为访问令牌.我遵循这些指示,一切似乎都很好; Facebook返回了一堆访问令牌.但是,它们都不起作用.当我尝试访问https://graph.facebook.com/me?access_token=TOKEN-HERE等URL时,出现"验证客户端错误"的错误.
我究竟做错了什么?
此外,我的印象是访问令牌就像会话密钥一样,只要我有一个,我可以永远使用它(因为我请求offline_access权限).那是对的吗?
下面是我将会话密钥转换为访问令牌的确切步骤,以及我得到的输出.希望这有助于解决我的问题.
码:
$session_key = '87ebbedf29cc2000a28603e8-100000652996522';
$app = sfConfig::get('app_facebook_prod_api'); // I happen to use Symfony. This gets an array with my Facebook app ID and secret.
$post = array(
'type' => 'client_cred',
'client_id' => $app['app_id'],
'client_secret' => $app['secret'],
'sessions' => $session_key
);
$options = array(
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_URL => 'https://graph.facebook.com/oauth/exchange_sessions',
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POSTFIELDS => http_build_query($post)
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
var_export(json_decode($result));
Run Code Online (Sandbox Code Playgroud)
输出:
array (
0 =>
stdClass::__set_state(array(
'access_token' => '251128963105|87ebbedf29cc2000a28603e8-100000652996522|Dy8CcJzEX8lYRrJE9Xk1EoW-BW0.',
)),
)
Run Code Online (Sandbox Code Playgroud)
码:
$access_token = '251128963105|87ebbedf29cc2000a28603e8-100000652996522|Dy8CcJzEX8lYRrJE9Xk1EoW-BW0.';
$options = array(
CURLOPT_HEADER => 0,
CURLOPT_URL => 'https://graph.facebook.com/me?access_token=' . $access_token,
CURLOPT_FRESH_CONNECT => 1,
CURLOPT_RETURNTRANSFER => 1,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$result = curl_exec($ch);
curl_close($ch);
var_export(json_decode($result));
Run Code Online (Sandbox Code Playgroud)
输出:
stdClass::__set_state(array(
'error' =>
stdClass::__set_state(array(
'type' => 'OAuthException',
'message' => 'Error validating client.',
)),
))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3663 次 |
| 最近记录: |