最近先輩方がfacebook絡みの事やってるのをみて

ちょっとやってみたところ

はまりました。

参考にしたのは

「fasebook アプリ ウォール 投稿」でググって一番最初に出てきた

こちら

とりあえずここからSDK落としてきて参考サイトのコードをコピペして動かしてみると

getSessionという関数がないよってエラーがでる。

どうもSDKのバージョンが違うみたい。

とりあえずファンページは無視して自分のウォールに投稿してみるコードを書いてみた

 

PHP

require_once('facebook-php-sdk/src/facebook.php');

$fb = new Facebook(array(
    'appId'  => "アプリのID",
    'secret' => "アプリの秘密鍵(Facebookページではアプリの秘訣ってなってました)",
));

$uid = $fb->getUser();

$error="";

// ユーザが取得できた場合
if ($uid) {

    $btn_message = "ログアウト";
    $btn_url = $fb->getLogoutUrl();

    try {

        $me = $fb->api('/me');

        // メッセージがPOSTされた場合
        if (isset($_POST['message']) && $message = $_POST['message']) {
            $param = array(
                'message' => $message,
                'name'    => $me['name'] . " from achamaro api",
                'access_token' => $fb->getAccessToken()
            );
            $fb->api("/$uid/feed", 'POST', $param);
        }

    }
    catch (FacebookApiException $e) {
        $error = $e->getMessage();
    }
}
// ユーザが取得できなかった場合
else {
    $btn_message = "ログイン";
    $btn_url = $fb->getLoginUrl(array('req_perms'=>'status_update,publish_stream'));
}

HTML


<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>ウォールに投稿してみる
<body>

<?= $btn_message?>

<?php if ($uid):?>

    

<?=$error?>

<?php endif;?> </body> </html>

※注 hrefとsrcを都合上href、srcとしています

これでやってみたところ

#200 The user hasn't authorized the application to perform this action.

というエラーが返ってきました。。。

アプリの設定をいじってみたり、色々さわってみたりしてもさっぱり

エラー文言でググってもそれっぽいのが見つからない。。

そんな中たまたま、デベロッパーページのアプリの設定ページにある

「Graph API Explorer」を触っていると、どうも認証に行くときにどうやら

権限が「scope」というパラメータ名で渡されている事に気づく!

えーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

試しに、

$fb->getLoginUrl(array('scope'=>'status_update,publish_stream'));

と変更してみたところ、 認証画面で今まで出てなかった、「ウォールへの投稿」が出てきた。 認証後のページでメッセージPOSTしたら自分のウォールに投稿されました。 めでたしめでたし。

にしてもSDKのバージョンでAPIのパラメータ名変えるのって;;;;;

因みにSDKのバージョンはユーザーエージェントとして送られてるみたいです。

ログアウトしてもgetUserでIDとれる時あるみたいですが、そこはSDKについてきたexample.phpとロジックは同じなのでおいおい見ようと思います