2016-09-27 13 views
1

私が管理しているFacebookページにメッセージを投稿しようと私のウェブサイトで以下のコードを使用しています。私はFacebook PHP SDK v5を使用しています。私がコードを実行するたびに、エラーウィンドウ「Facebook PHP SDK v5ページとしてページに投稿するときのOAuthログインエラー

「URLがブロックされました:リダイレクトURIがアプリケーションのクライアントOAuth設定でホワイトリストに登録されていないため、このリダイレクトに失敗しました。すべてのアプリドメインを有効なOAuthリダイレクトURIとして追加してください

ただし、グラフAPIエクスプローラにアクセスしてユーザーアクセストークンを要求してから、アクセストークンをスクリプトにハードコードしても問題ありません。私はFacebookのログインを自分のアプリ設定の[プロダクト]タブに追加しました。これは、これが「有効なOAuthリダイレクトURI」に追加できる唯一の場所だからです。私は問題が設定領域の "Valid OAuth redirect URIs"フィールドから来ていると確信しています。私はその分野に何を入れるべきか、それがまったく問題であれば分かりません。現在、「有効なOAuthリダイレクトURI」フィールドに次の情報を入力してみました。

  1. ちょうど私のドメインすなわちwww.my-domain.com

  2. フルパスを呼び出すスクリプトすなわちwww.my-domain.com/calling-script.php

  3. 私のサーバー上の空白のページ、つまりwww.my-domain.com/blank.htmlへのフルパス。

ありません。これは、Facebook PHP SDKを使用しようとしたときの私の最初の行為なので、私はそれをすべて間違っていると確信しています...誰かが私にこれに関するいくつかのガイダンスを与えることができますか?

更新日: 下記の修正内容を掲載した回答を参照してください。私の元の投稿は私の意図についてはっきりしていなかった。私の目標は、個々のユーザーではなく、ページとしてFacebookページにメッセージを正常に投稿することでした。この道が誰かを助けることを願っています。ここで

は私のアプリの設定です:私はあなたのスクリプトを確認

session_start(); 
$path = "path-to-Facebook-autoloader-on-my-server"; 
include_once $path; 

$fb = new Facebook\Facebook([ 
    'app_id' => 'app-id-from-app-settings', 
    'app_secret' => 'app-secret-number-from-app-settings', 
    'default_graph_version' => 'v2.7', 
]); 
///////////////////////////////////////////////////////////////////////// 
// If I uncomment the below line the script works fine, but the token expires often 
// and I do not want to have to keep updating it 
// $_SESSION['facebook_access_token'] = "access-token-obtained-from-Graph-API-Explorer"; 
///////////////////////////////////////////////////////////////////////// 
$helper = $fb->getCanvasHelper(); 
$permissions = ['email', 'publish_actions']; // optional 
try { 
    if(isset($_SESSION['facebook_access_token'])){ 
     $accessToken = $_SESSION['facebook_access_token']; 
    }else{ 
     $accessToken = $helper->getAccessToken(); 
    } 
}catch(Facebook\Exceptions\FacebookResponseException $e){ 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    exit; 
}catch(Facebook\Exceptions\FacebookSDKException $e){ 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    exit; 
} 
if(isset($accessToken)){ 
    if(isset($_SESSION['facebook_access_token'])){ 
     $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); 
    }else{ 
     $_SESSION['facebook_access_token'] = (string)$accessToken; 
     // OAuth 2.0 client handler 
     $oAuth2Client = $fb->getOAuth2Client(); 
     // Exchanges a short-lived access token for a long-lived one 
     $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']); 
     $_SESSION['facebook_access_token'] = (string)$longLivedAccessToken; 
     $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); 
    } 

    // validating the access token 
    try{ 
     $request = $fb->get('/me'); 
    }catch(Facebook\Exceptions\FacebookResponseException $e){ 
     // When Graph returns an error 
     if($e->getCode() == 190){ 
      unset($_SESSION['facebook_access_token']); 
      $helper = $fb->getRedirectLoginHelper(); 
      $loginUrl = $helper->getLoginUrl('https://apps.facebook.com/austintestingapp/', $permissions); 
      echo "<script>window.top.location.href='".$loginUrl."'</script>"; 
      exit; 
     } 
    }catch(Facebook\Exceptions\FacebookSDKException $e){ 
     // When validation fails or other local issues 
     echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
     exit; 
    } 

    try{ 
     // message must come from the user-end 
     $data = ['message' => 'test message...']; 
     $request = $fb->post('/me/feed', $data); 
     $response = $request->getGraphNode(); 
    }catch(Facebook\Exceptions\FacebookResponseException $e){ 
     // When Graph returns an error 
     echo 'Graph returned an error: ' . $e->getMessage(); 
     exit; 
    }catch(Facebook\Exceptions\FacebookSDKException $e){ 
     // When validation fails or other local issues 
     echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
     exit; 
    } 

    echo $response['id']; 

}else{ 
    $helper = $fb->getRedirectLoginHelper(); 
    $loginUrl = $helper->getLoginUrl('https://apps.facebook.com/austintestingapp/', $permissions); 
    echo "<script>window.top.location.href='".$loginUrl."'</script>"; 
} 

答えて

0

私はそれを理解してしまった。私は最初に投稿したスクリプトで遊んで、ついにそれを動作させました。どのようにスクリプトを実行しても、通知として管理するページに常にメッセージが送信されていました。彼らは壁に現れませんでした。私が探していた最終目標は、自分自身ではなくページとして管理するページに投稿することでした。ちょうど誰かがこのコードを見ていると、以下のコードが完璧に機能します。また、Facebookでの承認のための特権を提出する必要はありません。

"Valid OAuth redirect URIs"フィールドに関する私の元の質問に対する答え。私はそのフィールドに呼び出しスクリプトへのパスを入れ終わったし、うまくいきました。

session_start(); 
$path = "server-path-to-Facebook-autoloader.php"; 
$permissions = ['manage_pages', 'publish_pages']; 
$callback = "full-path-to-the-calling-script(this-script).php"; 
include_once $path; 

$fb = new Facebook\Facebook([ 
    'app_id' => 'app-id-number-here', 
    'app_secret' => 'app-secret-here', 
    'default_graph_version' => 'v2.7', 
]); 

$helper = $fb->getRedirectLoginHelper(); 

try { 
    if (isset($_SESSION['facebook_access_token'])) { 
     $accessToken = $_SESSION['facebook_access_token']; 
    } else { 
     $accessToken = $helper->getAccessToken(); 
    } 
} catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    $res['myresponse'] = 'Error: Graph returned a session error: ' . $e->getMessage(); 
    echo $res['myresponse']; 
    exit; 
} catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    $res['myresponse'] = 'Error: Facebook SDK returned a session error: ' . $e->getMessage(); 
    echo $res['myresponse']; 
    exit; 
} 

if (isset($accessToken)) { 
    if (isset($_SESSION['facebook_access_token'])) { 
     $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); 
    } else { 
     // getting short-lived access token 
     $_SESSION['facebook_access_token'] = (string) $accessToken; 

     // OAuth 2.0 client handler 
     $oAuth2Client = $fb->getOAuth2Client(); 

     // Exchanges a short-lived access token for a long-lived one 
     $longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']); 

     $_SESSION['facebook_access_token'] = (string) $longLivedAccessToken; 

     // setting default access token to be used in script 
     $fb->setDefaultAccessToken($_SESSION['facebook_access_token']); 
    } 

    // getting basic info about user 
    try { 
     $profile_request = $fb->get('/me'); 
     $profile = $profile_request->getGraphNode(); 
    } catch(Facebook\Exceptions\FacebookResponseException $e) { 
     // When Graph returns an error 
     $res['myresponse'] = 'Error: Graph returned a profile request error: ' . $e->getMessage(); 
     echo $res['myresponse']; 
     session_destroy(); 
     // redirecting user back to app login page 
     header("Location: ./"); 
     exit; 
    } catch(Facebook\Exceptions\FacebookSDKException $e) { 
     // When validation fails or other local issues 
     $res['myresponse'] = 'Error: Facebook SDK returned a profile request error: ' . $e->getMessage(); 
     echo $res['myresponse']; 
     exit; 
    } 

    // post on behalf of page 
    $pages = $fb->get('/me/accounts'); 
    $pages = $pages->getGraphEdge()->asArray(); 

    foreach ($pages as $key) { 
     if ($key['name'] == 'name-of-page-to-post-to') { 
      $post = $fb->post('/' . $key['id'] . '/feed', array('message' => 'this is an automated test message from Affordable HomeCare...'), $key['access_token']); 
      $post = $post->getGraphNode()->asArray(); 
      if($post['id'] <> ''){ 
       $res['myresponse'] = "Successfully Posted to Facebook"; 
      }else{ 
       $res['myresponse'] = "Error: Unable to verify post ID"; 
      } 
      echo $res['myresponse']; 
     } 
    } 
} else { 
    $loginUrl = $helper->getLoginUrl($callback, $permissions); 
    echo "<script>window.top.location.href='".$loginUrl."'</script>"; 
} 
0

Main App Settings

ここ

Facebook Login Settings

は、私が使用していますPHPスクリプトです。 1つのことを除いて、すべて見える。 uが

$helper = $fb->getRedirectLoginHelper(); 

$helper = $fb->getCanvasHelper(); 

を変更した後、試してみて、もしあれば、それはスローどのようなエラーを見ることができますか? また、共有の要点を参照できます。あなたのエラーを教えてください。 https://gist.github.com/gunnrryy/c2c828fc2a77124cc1bed57af5e216df

関連する問題