【问题标题】:Facebook Graph API, extended permissionsFacebook Graph API,扩展权限
【发布时间】:2011-03-07 23:10:07
【问题描述】:

我正在尝试使用 facebook Graph API 来更新用户状态消息。

我在使用时遇到以下错误,我认为新的图形 sdk 没有被正确引用?

Notice: Undefined property: Facebook::$api_client in /users/home/aafhe7vh/web/public/update.php  on line 9

Fatal error: Call to a member function users_hasAppPermission() on a non-object in /users/home/aafhe7vh/web/public/update.php on line 9

这是我正在使用的文件http://github.com/facebook/php-sdk/blob/master/src/facebook.php

以下是我的update.php的内容:


# <?php  

  include_once ('facebook.php');
  $api_key = '@@@@@@@@@@@@@@@@@@@2';
  $secret  = '$$$$$$$$$$$$$$$$$$$$44';
  global $facebook;
  $facebook = new Facebook($api_key, $secret);

# include_once("config.php");  
# if (!$facebook->api_client->users_hasAppPermission("status_update")){  
# echo '<fb:prompt-permission perms="status_update" next_fbjs="greet()">Let us update your status </fb:prompt-permission>';  
# $visibility = "none";  
# }  
# else  
# $visibility = "block";  
#   
# if(isset($_POST['hello']))  
# {  
#     $facebook->api_client->users_setStatus($_POST['hello']);  
#     echo "<p>Your status has been updated</p>";  
# }  
# ?>  
# <div id="statusdiv" style="display:<?=$visibility;?>;">  
#     <form method="POST">  
#         Please update your status:<br/>  
#         <input type="text" name="status" /> <br/>  
#         <input type="submit" value="change status" />  
#     </form>  
# </div>  
#   
# <script>  
# 
function greet()  
# {  
#     var session = "<?=$facebook->api_client->session_key;?>";  
#     document.getElementById("statusdiv").setStyle("display","block");  
#     new Dialog().showMessage("Info","Thank you for granting us this permission! ");  
# }  
</script>

我从这里使用了上面的代码,http://fbcookbook.ofhas.in/tag/extended-permission/

我不确定 config.php 应该包含什么,所以我在我的代码中删除了该行。

谢谢。

【问题讨论】:

    标签: facebook facebook-graph-api permissions


    【解决方案1】:

    使用 Graph API,当用户允许您的应用程序时,您必须说“我需要 status_update”。

    【讨论】:

    • 抱歉,没听懂。您是指我的代码中的“让我们更新您的状态”语句吗?我只是将其作为示例进行尝试,因此尚未为用户提供适当的消息。
    • 如“当我授权此应用程序时,我想要 status_update 权限”
    【解决方案2】:

    您包含最新的 PHP SDK,但您的代码是为旧的 SDK 编写的。所以,要么降级到以前版本的 SDK,要么改变你的实现。

    // Old SDK
    $facebook->api_client->users_setStatus($_POST['hello']);  
    
    // New SDK
    $facebook->api ( array(
        'method' => 'users.setStatus'
      , 'status' => $_POST['hello']
      , 'uid'    => /* user's facebook id */
    ) );
    

    有关参数的更多详细信息,请参阅corresponding documentation

    编辑

    回答您的问题

    1] 使用新 SDK 时,一切都不同了。你必须像这样创建对象

    $facebook   = new Facebook(array(
        'appId'  => 'FB_APP_ID'
      , 'secret' => 'FB_APP_SECRET'
      , 'cookie' => true
    ));
    

    2] 修复了我上面的代码

    3]http://developers.facebook.com/docs/reference/api/

    【讨论】:

    • 感谢彼得,我决定使用新的 SDK 以节省将来的麻烦。 1]当我使用你提供的代码时,我得到“101提交的API密钥与任何已知的应用程序没有关联”那是因为我的应用程序还没有发布!!。所以我没有办法测试它吗? 2] 另外,有没有一种方法可以在上述 API 中提供用户 ID 或其他内容来指示我要更新哪个用户的状态。 3] 在哪里可以找到新 API 的方法签名?
    • 感谢 Peter 的更新,我认为新的 API 文档确实令人沮丧。我在该页面上的任何地方都看不到 API 签名。现在我收到“102:需要参数 uid 或会话密钥”错误,并且 $facebook = $facebook->require_login() 将不再起作用。我使用这里提到的身份验证developers.facebook.com/docs/api#authorization。事实上,即使他没有登录,我也想发布到用户的状态,基本上这就是扩展权限的意义。彼得有什么建议吗?我应该通过旧 API 做得好,我仍然可以在那里使用扩展权限吗?
    • 最后我转向旧的 API 并让它工作。我用 $uid = $facebook->require_login($required_permissions = 'email,status_update,offline_access');然后 $facebook->api_client->users_setStatus("hello",$uid); ;这对我来说很好!
    • 但是,现在这只有在我通过获取 uid $facebook->require_login 发布后才有效。但是,如果我硬编码 uid 的值,然后使用 $facebook->api_client->users_setStatus("hello",$uid);我得到:致命错误:未捕获的异常 'FacebookRestClientException' 并在 /PATH/facebookapi_php5_restlib.php(1813) 中出现消息“发生未知错误”:FacebookRestClient->call_method('facebook.users....', Array) #1 / PATH/file.php(9): FacebookRestClient->users_setStatus('hello', '1000247983459873') #2 {main} 在 /PATH/facebookapi_php5_restlib.php 第 3065 行抛出
    • 以下是与第 3065 行相对应的行: if (is_array($result) && isset($result['error_code'])) { 3065 throw new FacebookRestClientException($result['error_msg'],第3066章第3067章
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多