从应用程序发布到页面(到用户墙)

时间:2012-04-19 07:39:47

标签: facebook facebook-graph-api facebook-authentication server-side

我想做什么:

每次将新内容添加到网站时,都会在Facebook页面上发布帖子,无论我是否登录到Facebook。

现在有效:

在我自己的墙上发布帖子。

我为实现这一目标所做的工作:

  1. 我创建了一个App
  2. 我已经为应用程序提供了所需的权限 关注http://www.facebook.com/login.php?api_key=[my appId]& next = http://www.facebook.com/connect/login_success.html& req_perms = read_stream,publish_stream,manage_pages,publish_actions
  3. 接下来,我创建了一个发布内容的脚本,基本上就是这样:

    $appId='12822*****98');
    $secret='17c*****************320f');
    
    // on récupére l'instance de classe Facebook
    $facebook=new Facebook(array(
       'appId'  => $appId,
       'secret' => $secret
    ));
    
    // acquisition du token
    $url='https://graph.facebook.com/oauth/access_token?'.
        'client_id='.$appId.
        '&client_secret='.$secret.
        '&grant_type=client_credentials'.           '&scope=read_stream,publish_stream,publish_actions,manage_pages,offline_access'.
      '&state=dfgdfgdtgdgfdfg';
    $reponse = file_get_contents($url); 
    $tabReponse=explode('=',$reponse);
    $accessToken=$tabReponse[1];
    $facebook->setAccessToken($accessToken);
    
    $params = array(
        'message' => 'the message',
        'link' => 'http://www.myAppUrl.com'),
        'name'    => 'the name',
        'description' => 'some description',
    );
    
    try {                           
    // la cible
    $targetID='1471*********81';
    
    // publication
    $publishStream = $facebook->api("/$targetID/feed/", 'POST',     $params);           
    
    } catch (FacebookApiException $e) {
        $result = $e->getResult();
        print("Attention, la publication FB a échoué, veuillez vérifier les paramètres!");
    }
    
  4. 如果我打印了第一步提供的访问令牌,我会得到类似{appId}|***************************(27个字符)的内容,我在this old post上读到的内容是某些操作的有效令牌但不是全部。
    有了这个,我可以在我的个人墙上发布,但不能在我管理的页面上发布,在最后一种情况下,我得到#200 error(关于未授权应用程序执行此操作的用户)。

    如果我使用Graph API Explorer为我的应用程序生成访问令牌,我会得到一个代表访问令牌的长字符串,如果我在setAccessToken调用中使用它,我就可以在页。因为我得到#100 error(关于必须引用Canvas URL的链接,即使“应用程序设置”中的“Stream post URL security:”设置为Off)

    有人知道如何实现我的目标吗?

    我不希望任何USER连接,服务器必须请求凭据通过应用程序发布,而不是用户。

0 个答案:

没有答案