1

メッセージ (ステータス更新、リンク、写真、ビデオ) を複数のページに投稿できるようにする単純な Facebook ページ タブ アプリを作成しています。

ページのタイムラインにさまざまなものを投稿しようとしている Facebook API (PHP SDK を使用) に問題があります。

ステータスの更新を投稿すると、ページの名前で正常に投稿されます。

    $pages = $this->facebook->api('me/accounts', 'GET');
    $pages = json_decode(json_encode($pages), FALSE);

    foreach ($pages->data as $page) {
        if (in_array($page->id, $_POST['pages'])) {

            $data = array(
                'access_token' => $page->access_token,
                'message' => Arr::get('status', $_POST)
            );

            $queryString = http_build_query($data);

            $this->facebook->api("$page->id/feed?".$queryString, 'POST');
        }
    }

パラメータを追加すると (つまり、リンクを投稿しようとすると)、私の管理者アカウントで投稿が行われます (つまり、Chris Hayes が「ページ X」へのリンクを投稿しました)。

    $pages = $this->facebook->api('me/accounts', 'GET');
    $pages = json_decode(json_encode($pages), FALSE);

    foreach ($pages->data as $page) {
        if (in_array($page->id, $_POST['pages'])) {

            $data = array(
                'access_token' => $page->access_token,
                'link' => Arr::get('link', $_POST),
                'message' => Arr::get('status', $_POST)
            );

            $queryString = http_build_query($data);

            $this->facebook->api("$page->id/feed?".$queryString, 'POST');
        }
    }

ここで何が起こっているのかわかりません。文字通り変更されたのは、'link' パラメータを追加したことだけです。誰かが私を助けることができれば、私はそれを大いに感謝します!

編集私が取得した権限は次のとおりです。email、user_about_me、user_likes、user_birthday、manage_pages、publish_stream

よろしく、クリス

4

1 に答える 1

0

別の投稿で答えを見つけました。

    $pages = $this->facebook->api('me/accounts', 'GET');
    $pages = json_decode(json_encode($pages), FALSE);

    foreach ($pages->data as $page) {
        if (in_array($page->id, $_POST['pages'])) {

            $this->facebook->setAccessToken($page->access_token);

            $data = array(
                'access_token' => $page->access_token,
                'name' => 'Facebook API: Posting As A Page',
                'link' => 'https://www.webniraj.com/2012/08/09/facebook-api-posting-as-a-page/',
                'caption' => 'The Facebook API lets you post to Pages you own automatically - either as real-time updates or in the case that you want to schedule posts.',
                'message' => 'Check out my new blog post!'
            );

            $queryString = http_build_query($data);

            $this->facebook->api("$page->id/feed?".$queryString, 'POST');
        }
    }

重要なのは、Facebook SDK を介してページ アクセス トークンを設定することでした。これは、ライブラリを別の場所で使用して、アクセス トークンをユーザーのものとして設定しているためである可能性があります。ライブラリは、パラメーターとして送信されたトークンをオーバーライドする必要があると思います。

$this->facebook->setAccessToken($page->access_token);

参考: フェイスブックページにページ(個人ではなく)として投稿する


編集:私が発見したもう 1 つの問題は、次のように、クエリ文字列を自分で作成し、それを API エンドポイントに追加していたことです。

$this->facebook->api("$page->id/feed?".$queryString, 'POST');

あなたがすべきことは、API 呼び出しの 3 番目のパラメーターとして $data 配列を送信することです。

$this->facebook->api("$page->id/feed", 'POST', $data);

PHP SDK は $data で「access_token」パラメーターを探しますが、その配列を送信していなかったため、それが見つかりませんでした (したがって、以前に設定したユーザー アクセス トークンを使用するようにデフォルト設定されました)。

API 呼び出しの 3 番目のパラメーターとしてデータを送信した後、次の行を削除できました。

$this->facebook->setAccessToken($page->access_token);
于 2013-03-07T18:32:29.720 に答える