2

私は数日間、クライアントの Web サイトからクライアントの Facebook ページ ウォールに正常に投稿しようと試みてきました。ユーザーがログインせずにこれを実行できるようにする必要があります。これは、ドキュメントで提供されている URL にアクセスして生成された拡張アクセス トークンで実現できました。

私がやろうとしているのは、この質問のように PHP SDK を使用して拡張トークンをフェッチすることです - Facebook PHP SDK: gets "long-lived" access token now that "offline_access" is deprecated ですが、次のエラーが表示されます: (#200) The user hasn't authorized the application to perform this action

Graph API エクスプローラーによって生成された認証トークンのデバッグは、ユーザーとして自分自身を示し、必要なスコープを含みmanage_pagesますstatus_update。ただし、を実行するme/accountsと、perms配列は問題のページのデータの下にこれらをリストしません。これが関連しているかどうかはわかりません。

使用しようとしたコードは次のとおりです。

$facebook = new Facebook(array('appId' => 'xxxxxxx', 'secret' => 'xxxxxx'));
    $pageID = 'xxxxxxxx';
    $facebook->setExtendedAccessToken();
    $accessToken = $facebook->getAccessToken();
    try {
        $page_info = $facebook->api("/$pageID?fields=access_token");
        print_r ($page_info);
    } catch (FacebookApiException $e) {
            echo $e->getMessage();
    }
    if( !empty($accessToken) ) {
        $args = array(
            'access_token'  => $accessToken,
            'message'       => "Catch phrase!"
        );
        $facebook->api("/$pageID/feed","post",$args);
    } else {
        // Handle error
    }

更新結果 の出力をエコーし​​た場合getAccessToken()、アプリIDとシークレットがで区切られていることがわかりました|-これは私が受け取るべきものですか? 私が見た他のすべてのトークンはランダムで、はるかに長いので、私には奇妙に思えます。

これまでのところ、私はこれに多くの時間を無駄にしてきました。それは他の誰にとってもうまくいくようです。

更新 2 こんにちはウォーレン! あなたはこれらの部分に慣れていないようです。ようこそ! これについて調査していただきありがとうございます。これらのトークンを DB テーブルに保存し、投稿するたびに有効期限が切れているかどうかを確認する必要がありますか? 私はページとしてページに投稿するだけです。明らかに、これにaccess_tokenは USER であると想定しているものではなく、ページが必要ですaccess_token。また、Graph API Explorer ページを更新するか、新しいユーザー トークンを要求すると変更されますが、ページ アクセス トークンは期限切れにならないこともどこかで読んだと思います。access_token非常に不可解です..このアプリで新しいトークンを取得する必要があるのか​​ 、それとも機能しているように見えるページを使用するだけなのかわかりませんか?

4

4 に答える 4

0

私はいくつかのテストを行いましたが、ユーザーにログインさせると、そこにアクセストークンを取得できることがわかりました。このトークンを setAccessToken に渡す場合は、setExtendedToken を実行します。getAccessToken を実行してトークンを保存すると、後でユーザーがログアウトしたときにこのトークンを使用できます。

$facebook->setAccessToken($facebook->getAccessToken());
$facebook->setExtendedAccessToken();

$access_token = $facebook->getAccessToken(); // save this for later use

ユーザーにログインして、そこのアカウントにアクセスする許可を求める必要があります。Facebook ページにアクセスする必要がある場合は、そのユーザーが管理者であることを確認し、manage_page パーミッションを要求してください。

お役に立てれば

于 2013-08-22T16:48:51.963 に答える
0

私がこれまでに見つけたものから、ユーザーがログインしたときに返される拡張トークンは、UNIX タイムスタンプを取得しないため有効期限が切れないため、いつ有効期限が切れるかを知る方法がありません。

これは私がアプリケーションで行ったことです。

ユーザーに facebook へのログインを要求し、アクセス許可を除きます。getAccessToken を使用して、現在のアクセス トークンを取得します。これを getExtendedAccessToken に渡し、再度 getAccessToken を実行して、後で使用するためにデータベースに保存する拡張アクセス トークンを最終的に取得します。

于 2013-10-17T15:17:53.323 に答える
0
$facebook = new Facebook(array(
                    'appId'  => 'YOURAPPID',
                    'secret' => 'YOURSECRET',
            ));
$params = array(
                        'scope'=>'publish_stream,manage_pages'

                );
$loginUrl = $facebook->getLoginUrl($params); // Use this to request them to login in then when they are do the following you will need them to return to your app

$facebook = new Facebook(array(
                    'appId'  => 'YOURAPPID',
                    'secret' => 'YOURSECRET',
            ));
$facebook->setAccessToken($facebook->getAccessToken());
$facebook->setExtendedAccessToken();
$access_token = $facebook->getAccessToken(); // store $access_token for later use
于 2013-10-17T15:26:56.390 に答える