0

我在 facebook 上有一个活动,我想回复一下。我想通过链接进行 rsvp,我为 rsvping 找到的所有示例都是用表单完成的。我有 rsvp_event 权限和一个活动的 access_token。我面临的实际问题是在成功发布 http 帖子后重定向。

<?php
     $redirect_uri = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
     $access_token = "ACCESS_TOKEN";
     $eid = "EVENT_ID";

     $rsvp_to_event = "https://graph.facebook.com/$eid/attending?method=post&access_token=$access_token&redirect_uri=$redirect_uri";
?>

<a href="<?php echo $rsvp_to_event; ?>">Join</a>

单击“加入”链接将回复活动,但让我留在显示真实的页面上。在成功 rsvp 后让页面重定向的任何想法?

谢谢你。

4

2 回答 2

2

您必须使用 cURL 或查询该 URL file_get_contents(),这是我的教程中的一个示例:

<?php
$app_id = "APP_ID";
$app_secret = "APP_SECRET";
$my_url = "REDIRECT_URI";
$event_id = "EVENT_ID";
$rsvp_status = "";

$code = $_REQUEST["code"];

if(empty($code)) {
    $auth_url = "http://www.facebook.com/dialog/oauth?client_id="
    . $app_id . "&redirect_uri=" . urlencode($my_url)
    . "&scope=rsvp_event";
    echo("<script>top.location.href='" . $auth_url . "'</script>");
}

$token_url = "https://graph.facebook.com/oauth/access_token?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret
. "&code=" . $code;
$access_token = file_get_contents($token_url);

if( isset($_POST['rsvp']) ) {
    // Form submitted, call the Graph API to RSVP to the event
    $event_rsvp = "https://graph.facebook.com/$event_id/{$_POST['rsvp']}?method=post&" . $access_token;
    $rsvped = json_decode(file_get_contents($event_rsvp));
    if($rsvped) {
        $msg = "Your RSVP status is now <strong>{$_POST['rsvp']}</strong>";
        $rsvp_status = $_POST['rsvp'];
    }
}
if( !$rsvp_status ) {
    $query = "SELECT rsvp_status FROM event_member WHERE eid=$event_id AND uid=me()";
    $fql_url = "https://api.facebook.com/method/fql.query?"
        . "query=" . urlencode($query)
        . "&format=json"
        . "&" . $access_token;
    $fql_resp = json_decode(file_get_contents($fql_url));
    $rsvp_status = $fql_resp[0]->rsvp_status;
}
?>
<!doctype html>
<html>
<head>
<title>Create An Event</title>
<style>
label {float: left; width: 100px;}
input[type=text],textarea {width: 210px;}
#msg {border: 1px solid #000; padding: 5px; color: red;}
</style>
</head>
<body>
<?php if( isset($msg) ) { ?>
<p id="msg"><?php echo $msg; ?></p>
<?php } ?>
<form action="" method="post">
    <p>
        <label for="privacy_type">RSVP:</label>
        <input type="radio" name="rsvp" value="attending" <?php if($rsvp_status==="attending") echo "checked='checked'"; ?>/>Attending&nbsp;&nbsp;&nbsp;
        <input type="radio" name="rsvp" value="maybe" <?php if($rsvp_status==="maybe" || $rsvp_status==="unsure") echo "checked='checked'"; ?>/>Maybe&nbsp;&nbsp;&nbsp;
        <input type="radio" name="rsvp" value="declined" <?php if($rsvp_status==="declined") echo "checked='checked'"; ?>/>Not Attending&nbsp;&nbsp;&nbsp;
    </p>
    <p><input type="submit" value="RSVP to this event" /></p>
</form>
</body>
</html>

你应该看看:

if( isset($_POST['rsvp']) ) {
    // Form submitted, call the Graph API to RSVP to the event
    $event_rsvp = "https://graph.facebook.com/$event_id/{$_POST['rsvp']}?method=post&" . $access_token;
    $rsvped = json_decode(file_get_contents($event_rsvp));
    if($rsvped) {
        $msg = "Your RSVP status is now <strong>{$_POST['rsvp']}</strong>";
        $rsvp_status = $_POST['rsvp'];
    }
}

上面的教程由 HTML 表单组成,用户可以在其中选择他的状态。

于 2012-10-27T18:23:51.310 回答
0

大多数图形 api 端点并非设计为直接使用您的用户浏览器调用,而是从您的后端代码调用它们(与身份验证相关的可能是例外)。

尝试使用官方 php sdk从您的 php 页面发送这些请求,或者仅使用curl 扩展名file_get_contents在您的 php 脚本中的这些端点上并自己重定向用户。

于 2012-10-27T18:17:10.867 回答