我希望我的应用程序发布照片,用户已使用publish_stream权限注册我的应用程序,目前已与Facebook断开连接。
文档https://developers.facebook.com/docs/publishing/说:
要发布您需要的“照片”对象
- 有效的访问令牌
- publish_stream权限
我尝试了一个HTTP POST请求:
https://graph.facebook.com/<USER_ID>/photos?access_token=<APPLICATION_ACCESS_TOKEN>
POST param : "url":"<link_to_some_picture>"
我得到一个例外:
content={"error":{"message":"A user access token is required to request this resource.","type":"OAuthException","code":102}}
要代表用户发布照片,我无法传递用户访问令牌...为什么我可以使用我的应用程序访问令牌发布链接而不是照片?
答案 0 :(得分:0)
您的标题声明您正在使用应用程序访问令牌 - 您将收到的错误清楚地说明了问题。您需要一个用户访问令牌。
您需要扩展用户访问令牌,以便在他们未连接到Facebook时代表他/她执行操作。
这是有关处理过期令牌以及如何刷新它们的信息的良好资源 -
https://developers.facebook.com/docs/authentication/access-token-expiration/
答案 1 :(得分:0)
当用户注册您的应用程序时,您可以在使用该访问令牌代表用户发布后存储用户的用户访问令牌。当用户下次可以更新该访问令牌时访问您的应用程序。 您可以使用以下函数来获取扩展访问令牌:
public function getExtendedAccessToken(){
try {
// need to circumvent json_decode by calling _oauthRequest
// directly, since response isn't JSON format.
$access_token_response =
$this->_oauthRequest(
$this->getUrl('graph', '/oauth/access_token'),
$params = array( 'client_id' => $this->getAppId(),
'client_secret' => $this->getApiSecret(),
'grant_type'=>'fb_exchange_token',
'fb_exchange_token'=>$this->getAccessToken(),
));
} catch (FacebookApiException $e) {
// most likely that user very recently revoked authorization.
// In any event, we don't have an access token, so say so.
return false;
}
if (empty($access_token_response)) {
return false;
}
$response_params = array();
parse_str($access_token_response, $response_params);
if (!isset($response_params['access_token'])) {
return false;
}
return $response_params['access_token'];
}
答案 2 :(得分:0)
$fid = $row[1];
echo "fid = $fid\n";
$message =$row[2];
echo "msg = $message\n";
$friends = $facebook->api("/$user/friends?fields=id");
$args= array(
'app_id' => $facebook->getAppId(),
'to' => $fid,
'link' => 'http://www.facebook.com',
'message'=>$message,
);
$post_id = $facebook->api('/fid /feed', 'POST', $args);
var_dump($post_id);