私が管理している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」フィールドに次の情報を入力してみました。
ちょうど私のドメインすなわちwww.my-domain.com
フルパスを呼び出すスクリプトすなわちwww.my-domain.com/calling-script.php
私のサーバー上の空白のページ、つまり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>";
}