0

ユーザーのウォールに投稿できるようにしたい (彼が編集したメッセージ)。しかし、ユーザーが自分に代わって投稿を許可しなかった場合、次のエラーが発生します。

(#1) share|OAuthException の作成中にエラーが発生しました

次に、ログインURLに再度送信することで再度許可を求めることができることを読みましたが、そこで許可した後でも同じエラーが送信されます。

コード:

try{...
     $ret_obj = $facebook -> api('/' . $user_id . '/feed', 'POST', array('name' => $title, 'link' => $redirect_url, 'caption' => $ptnr_fb_caption, 'icon' => 'http://...logo-small.png', 'picture' => $ptnr_fb_img, 'message' => $desc, 'privacy' => $arrPriv));

} catch(FacebookApiException $e) {

        echo '<div id="text">Error :</div><br /><p style="width: 365px;margin: 0 auto;">Problem authenticating via Facebook, please allow us to share on your behalf.</p>';
        echo '<center><a href="https://www.facebook.com/dialog/oauth?client_id=<my_id>&redirect_uri=http://<mysite>/getFacebookData.php&display=popup&scope=email,publish_stream&type=web_server">Allow here</a><center>';

        //Send email to admin
        $subject = "ERROR Facebook";
        $body = "user email:" . $user_email . '| error:' . $e -> getMessage().'|'.$e->getType();
}

編集:( エラーメッセージを取得した後にリンクを介して)許可を再度許可すると、「全員」/パブリックのみがエラーを生成し、私と友人のみが生成しないことがわかりました。

更新 (@Axel Amthor):

$facebook = new Facebook( array('appId' => 'app_id', 'secret' => 'removed', ));

//We got after the authentication request
$access_token = $_POST['access_token'];

$facebook -> setAccessToken($access_token);
try {
    $user_info = $facebook -> api('/me');
    $user_id = $user_info['id'];
} catch (FacebookApiException $e) {
    //return 0;
}

更新 2: スコープ関連のコード:

$red_url = 'https://www.facebook.com/dialog/oauth?client_id=my_id&redirect_uri=http://mysite/facebook/getFacebookData.php&display=popup&scope=email,publish_stream&type=web_server';

getFacebookData.php にリダイレクトします。

$access_token = '';

    $token_url = "https://graph.facebook.com/oauth/access_token?client_id=my_id&redirect_uri=http://mysite/facebook/getFacebookData.php&client_secret=secret&code=" . $_GET['code'];
    $access_token = file_get_contents($token_url);
    $access_token = substr($access_token, 13, strlen($access_token) - (13 + 16));

そのアクセス トークンを 3 番目のページに送信します (コードの更新: "Update (@Axel Amthor):")。

4

2 に答える 2

0

(私のコードから)のようなスコープパラメータがありません:

$OAuth_request = _formatOAuthReq($OAuth, "read_insights,ads_management,publish_actions,manage_pages,publish_stream,read_stream,offline_access", $state);

....

function _formatOAuthReq($OAuthParams, $scope, $state)
{
    $uri = $OAuthParams['oauth_uri'];
    $uri .= "?client_id=" . $OAuthParams['client_id'];
    $uri .= "&redirect_uri=" . $OAuthParams['redirect_uri'];
    $uri .= "&scope=" . $scope;
    $uri .= "&response_type=code";
    $uri .= "&approval_prompt=force&access_type=offline";

ユーザー プロファイルで何かを公開するには、次の権限を考慮してください。

  1. create_event
  2. create_note
  3. 写真アップロード
  4. パブリッシュ_ストリーム
  5. read_stream
  6. ステータスアップデート
  7. video_upload
  8. Eメール
  9. パブリッシュ_アクション

[ acctid /[acctid]/feed] で識別されるユーザー ウォールに「メモ」を公開します。実際には、これは OAuth ダイアログで指定されたアクセス トークンで "ログイン" したユーザーです。ここのコードに突っ込んだところです。

/me/feed

これは魅力のように機能しています。実際、「外国のユーザー」に投稿しているのはあなたではなく、ユーザー自身であり、アプリに自分の代わりに投稿する許可を与えることで、アプリを自分のウォールに投稿します。かなり複雑です、私は知っています。

于 2013-05-29T23:09:07.857 に答える
0

(エラーメッセージを受け取った後にリンクを介して)許可を再度許可すると、「全員」/パブリックのみがエラーを生成し、私と友人のみが生成しないことがわかりました。

ユーザーに公開投稿を強制したいですか?あなたはそれをすべきではありません - ユーザーに決めさせてください!

アプリの設定でデフォルト アクションのプライバシーとして「公開」を設定することもできます。ユーザーは、必要に応じて、ログイン ダイアログから直接、または後でプロファイル アプリの設定で、より制限的な値に変更できます。

そしてprivacy、ユーザーが選択した値が自動的に適用されるように、API 呼び出しでパラメーターをまったく指定しないでください。

于 2013-05-30T11:04:55.060 に答える