1

アプリでリクエスト ダイアログを使用して、ユーザーが友達にリクエストを送信できるようにします。ユーザーがリクエストを送信したら、アプリをユーザーページに投稿するページにリダイレクトします。以下のコードを使用して access_token を取得します。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://graph.facebook.com/oauth/access_token?client_id='.APP_ID.'&client_secret='.APP_SECRET.'&redirect_uri=http://www.facebook.com/pages/Cosmetics/167231286678063?sk=app_233227910028874&grant_type=client_credentials');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);

$token = curl_exec($ch);

$me = $facebook->api('/me?'.$token);

しかし、壁に投稿しようとすると、次のエラーが表示されます。

致命的なエラー: OAuthException がキャッチされていません: OAuth アクセス トークンの署名が無効です。

4

4 に答える 4

2

認証しようとしている正確な方法についてはわかりません..そのようにリクエストしても問題ないかもしれませんが、私が使用する方法はここに記載されているものです: http://developers.facebook.com/docs/authentication/

つまり、最初にユーザーを Facebook ページにリダイレクトして、許可を受け入れるようにします。彼が受け入れると、彼はあなたが提供した URL にリダイレクトされますcode=###。必要な実際の access_token を取得するには、サーバー側の要求を実行する必要がある get 引数を使用します。

リダイレクト URL の例:

$my_url = 'http://www.example.com';
"http://www.facebook.com/dialog/oauth?client_id=". $app_id ."&redirect_uri=". urlencode($my_url);

次に、ユーザーが [Accept] をクリックすると、次のようにリダイレクトされます。

http://www.example.com?code=ABCDEF

次に、サーバー側で、次のような呼び出しを行う access_token を取得する必要があります。

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

次に、その呼び出しから返されたテキストを再確認し、取得してみてください

"https://graph.facebook.com/me?access_token=". $access_token;

(手で確認することもできます)

編集

また、ユーザーのストリームで公開するには、ユーザーからの追加のアクセス許可が必要になる可能性があります。scope=publish_streamそのため、最初の (ユーザー認証) URL に get を追加して許可を求めます。

于 2011-07-22T08:17:32.430 に答える
1

PHP SDK 3.0.1 を使用しないのはなぜですか?

facebook が提供する sdk を使用すると簡単です。php sdk 3.0.1 を使用した認証のサンプルは次のとおりです。

<?php

// Requires Facebook PHP SDK 3.0.1: https://github.com/facebook/php-sdk/
require ('facebook.php');

define('FACEBOOK_APP_ID',"YOUR-APP-ID-HERE");
define('FACEBOOK_SECRET',"YOUR-APP-API-SECRET-HERE");
define('REDIRECT_URI',"YOUR-REDIRECT-URL-HERE");
define('PERMISSIONS_REQUIRED', "publish_stream,user_photos");
$user = null;

$facebook = new Facebook(array(
    'appId' => FACEBOOK_APP_ID,
    'secret' => FACEBOOK_SECRET,
    'cookie' => true
));

$user = $facebook->getUser(); // Get the UID of the connected user, or 0 if the Facebook user is not connected.

if($user == 0) {
    // If the user is not connected to your application, redirect the user to authentication page
    /**
     * Get a Login URL for use with redirects. By default, full page redirect is
     * assumed. If you are using the generated URL with a window.open() call in
     * JavaScript, you can pass in display=popup as part of the $params.
     * 
     * The parameters:
     * - redirect_uri: the url to go to after a successful login
     * - scope: comma separated list of requested extended perms
     */

    $login_url = $facebook->getLoginUrl($params = array('redirect_uri' => REDIRECT_URI,'scope' => PERMISSIONS_REQUIRED));

    echo ("<script> top.location.href='".$login_url."'</script>");

} else {
    // if the user is already connected, then fetch access_token and user's information or show some content to logged in user.
    try
    {
        $access_token = $facebook->getAccessToken(); // Gives you current user's access_token

        $user = $facebook->api('/me'); // Gets User's information based on permissions the user has granted to your application.

    } catch(FacebookApiException $e){
        $results = $e->getResult();
        // Print results if you want to debug.
    }

}

?>
于 2011-07-22T21:23:11.753 に答える
1

&grant_type=client_credentials現在のユーザーではなく、アプリ全体のアクセス トークンを提供するものを使用しています。現在のユーザーのアクセス トークンを取得するには、それらを同じ URL に&grant_type=client_credentialsリダイレクトするredirect_uri必要があります。または、Javascript SDK を使用して、リダイレクトせずにポップアップ ウィンドウからアクセス トークンを取得することもできます。

JS SDK を使用してリダイレクトなしで認証する方法に関する別の質問へのリンクは次のとおりです: リダイレクトなしの Facebook 認証?

于 2011-07-22T08:14:22.680 に答える
0

そこで行っているのは、アプリケーション アクセス トークンの取得です。

アプリ ログインを使用すると、Insights データの取得やリクエストの承認など、アプリのさまざまな管理アクションを実行できます。アプリ アクセス トークンを必要とする Graph API 呼び出しは、API リファレンスに明確に示されています。

必要なのは、いくつかのアクセス許可を持つユーザー アクセス トークンです。あなたの場合は.publish_stream

于 2011-07-22T08:16:19.450 に答える