【问题标题】:Facebook - Publish Checkins using PHP SDK/JavaScript SDKFacebook - 使用 PHP SDK/JavaScript SDK 发布签到
【发布时间】:2012-06-19 20:06:06
【问题描述】:

我正在尝试使用 Facebook Graph API 发布签到。我已经通过Facebook API documentation (checkins) 并且还拥有publish_checkins 权限。但是,我的签到没有发布。我可以知道有什么问题还是我错过了什么?谢谢你的时间:)

fbmain.php

$user = $facebook->getUser();
$access_token = $facebook->getAccessToken();

// Session based API call
if ($user) {
    try {
            $me = $facebook->api('/me');
            if($me)
            {
                $_SESSION['fbID'] = $me['id'];
                $uid = $me['id'];
            }
        } catch (FacebookApiException $e) {
          error_log($e);   
        }
}
else {
   echo "<script type='text/javascript'>top.location.href='$loginUrl';</script>";
   exit;
}

$loginUrl = $facebook->getLoginUrl(
        array(
            'redirect_uri' => $redirect_url,
            'scope' => status_update, publish_stream, publish_checkins, 
                user_checkins, user_location, user_status'
            )
);

ma​​in.php - 使用 PHP SDK(本例中使用了错误的 SDK,应该使用 JavaScript SDK)

<?php
    include_once "fbmain.php";

    if (!isset($_POST['latitude']) && !isset($_POST['longitude']))
    {
?>
<html>
    <head>
        //ajax POST of latitude and longitude
    </head>

    <body>
        <input type="button" value="Check In!" onclick="checkin();"/></span>
    </body>
</html>
<?php
}
else
{
?>
<script type="text/javascript">
    function checkin()
    {
        try
        {
            $tryCatch = $facebook->api('/'.$uid.'/checkins', 'POST', array(
                'access_token' => $facebook->getAccessToken(),
                'place' => '165122993538708',
                'message' =>'MESSAGE_HERE',
                'coordinates' => json_encode(array(
                    'latitude'  => '1.3019399200902',
                    'longitude' => '103.84067653695'
                ))
            ));
        }
        catch(FacebookApiException $e)
        {
            $tryCatch=$e->getMessage();
        }
        return $tryCatch;
    }
</script>
<?php
}
?>

问题已解决 - 发布签入时的注意事项

  • 确保已授予publish_checkins 权限。
  • 必须使用json_encode() 对PHP SDK 的coordinates 参数进行编码。
  • place 和 coordinates 参数是强制性的。
  • 如果您刚刚将publish_checkins 权限添加到现有的允许权限列表中,则需要重新进行身份验证。

【问题讨论】:

  • 您遇到什么错误?回帖ID了吗?如果有,是否会出现在用户的活动日志中?
  • @Igy 不幸的是,我没有从 php_error.log 中得到任何错误。我在函数中添加了 try catch,但我也没有遇到任何异常。然而,当我执行“alert($facebook->getAccessToken()?>);”时,一些奇怪的事情引起了我的注意它提示“未定义”。我可以知道如何检查帖子 ID 以及用户的活动日志是什么?一个月前我刚刚开始开发 Facebook 应用程序,如果您能指导我,我将不胜感激。谢谢你:)
  • 当您进行 API 调用时,应该有一个带有错误或您创建的新帖子的帖子 ID 的回调
  • 你是否全球化了 $uid 和 $facebook 以便在 checkin() 函数中使用?
  • @Igy 我提到了facebook-api-callback-function 并在 try 和 catch 子句的末尾都做了一个 alert () 但没有从他们那里得到任何提示。此外,当我进行 API 调用时,函数中的任何 alert() 都将不起作用。

标签: facebook facebook-javascript-sdk facebook-php-sdk checkin


【解决方案1】:

显然,我在问题中发布的配置和PHP签入功能是正确的。但是,正如 Nehal 所指出的,对于我的情况,我应该使用 JavaScript SDK 而不是 PHP SDK。供以后参考...

使用 JavaScript SDK

function checkin()
{
    FB.api('/me/checkins', 'post', 
    { message: 'MESSAGE_HERE',
       place: 165122993538708,
       coordinates: {
           'latitude': 1.3019399200902,
           'longitude': 103.84067653695
       }
    },
        function (response) {
            alert("Checked in!");
        }
    );
}

【讨论】:

  • 请注意,根据最近的Facebook docs“不赞成发布 Checkin 对象,而赞成创建附加位置的 Post。”
【解决方案2】:

您还需要学习 PHP 和变量作用域。

$facebook = new Facebook(array(
          'appId'  => FB_API_KEY,
          'secret' => FB_SECRET_KEY,
          'cookie' => true,
        ));
$loginUrl = $facebook->getLoginUrl(
        array('scope' => 'status_update,publish_stream,publish_checkins,user_checkins,user_location,user_status,user_checkins')
);

// Session based API call
if ($user) {
    try {
            $me = $facebook->api('/me');
            if($me)
            {
                $_SESSION['fbID'] = $me['id'];                
            }
        } catch (FacebookApiException $e) {
          error_log($e);   
        }
}
else {
   echo "<script type='text/javascript'>top.location.href='$loginUrl';</script>";
   exit;
}

function checkin($fb)
{
    try
    {
        $tryCatch = $fb->api('/'.$_SESSION['fbID'].'/checkins', 'POST', array(
            'access_token' => $fb->getAccessToken(), //corrected
            'place' => '165122993538708',
            'message' =>'I went to placename today',
            'coordinates' => json_encode(array(
                'latitude'  => '1.3019399200902',
                'longitude' => '103.84067653695'
            ))
        ));
    }
    catch(FacebookApiException $e)
    {
        $tryCatch=$e->getMessage();
    }
    return $tryCatch;
}

checkin($facebook); //calling the function and passing facebook object to function

【讨论】:

  • 我跟着做了一个 '' 而是调用该函数,它返回了一个异常“Facebook 类无法转换为字符串”。
  • 这是一个PHP函数,不能在javascript调用中使用。要将 facebook API 用于 javascript,请尝试 Facebook Javascript SDK
猜你喜欢
  • 2011-11-04
  • 2020-03-05
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多