質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

Q&A

1回答

2845閲覧

FacebookログインでappIDのvalidationでエラーになる

Makitani

総合スコア19

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Facebook

Facebookは、実名登録制のSNS(ソーシャル・ネットワーキング・サービス)です。開発者用のデベロッパーサイトが存在し、一般ユーザーによるFacebook向けアプリケーション開発が可能です。

0グッド

0クリップ

投稿2016/03/24 14:37

編集2022/01/12 10:55

独習でWebサービス作りをしようと取り組み始めた者です。
使用言語はPHP、XAMPP環境でPHPのバージョンは5.6.8です。
facebook for Developers サイトにある例を基本的にはそのまま使用しているのですが、login.phpから画面遷移し、その後Access Token及びMetadataは表示される画面でその下に下記エラーが出ます。

Fatal error: Uncaught exception 'Facebook\Exceptions\FacebookSDKException' with message 'Access token metadata contains unexpected app ID.' in C:\xampp\htdocs\drink\test\facebook-php-sdk-v4-master\src\Facebook\Authentication\AccessTokenMetadata.php:329 Stack trace: #0 C:\xampp\htdocs\drink\test\fb-callback.php(58): Facebook\Authentication\AccessTokenMetadata->validateAppId(4xxxxxxxxxxx) #1 {main} thrown in C:\xampp\htdocs\drink\test\facebook-php-sdk-v4-master\src\Facebook\Authentication\AccessTokenMetadata.php on line 329

AccessTokenMetadata.phpのappID判定でエラーになっているようですが、原因が分かりません。
必要な箇所は全て利用できるappIDに変更していると考えています。

login.php

php

1 2<?php 3 session_start(); 4 require_once __DIR__ . '/facebook-php-sdk-v4-master/src/Facebook/autoload.php'; 5 6 $fb = new Facebook\Facebook([ 7 'app_id' => '4xxxxxxxxxxx', // Replace {app-id} with your app id 8 'app_secret' => 'exxxxxxxxxxxxxxxxxxxxxxxxxx', 9 'default_graph_version' => 'v2.2', 10 ]); 11 12 $helper = $fb->getRedirectLoginHelper(); 13 14 15 $permissions = ['email']; // Optional permissions 16 $loginUrl = $helper->getLoginUrl('http://localhost/test/fb-callback.php', $permissions); 17 18 echo '<a href="' . htmlspecialchars($loginUrl) . '">Log in with Facebook!</a>'; 19?>

fb-callback.php

php

1<?php 2 3session_start(); 4error_reporting(E_ALL); 5ini_set("display_errors", 1); 6 7 8 require_once __DIR__ . '/facebook-php-sdk-v4-master/src/Facebook/autoload.php'; 9 10 $fb = new Facebook\Facebook([ 11 'app_id' => '4xxxxxxxxxxx', // Replace {app-id} with your app id 12 'app_secret' => 'exxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 13 'default_graph_version' => 'v2.2', 14 ]); 15 16 $helper = $fb->getRedirectLoginHelper(); 17 18 try { 19 $accessToken = $helper->getAccessToken(); 20 } catch(Facebook\Exceptions\FacebookResponseException $e) { 21 // When Graph returns an error 22 echo 'Graph returned an error: ' . $e->getMessage(); 23 exit; 24 } catch(Facebook\Exceptions\FacebookSDKException $e) { 25 // When validation fails or other local issues 26 //var_dump($e); 27 echo 'Facebook SDK returned an error: ' . $e->getMessage(); 28 exit; 29 } 30 31 if (! isset($accessToken)) { 32 if ($helper->getError()) { 33 header('HTTP/1.0 401 Unauthorized'); 34 echo "Error: " . $helper->getError() . "\n"; 35 echo "Error Code: " . $helper->getErrorCode() . "\n"; 36 echo "Error Reason: " . $helper->getErrorReason() . "\n"; 37 echo "Error Description: " . $helper->getErrorDescription() . "\n"; 38 } else { 39 header('HTTP/1.0 400 Bad Request'); 40 echo 'Bad request'; 41 } 42 exit; 43 } 44 45 // Logged in 46 echo '<h3>Access Token</h3>'; 47 var_dump($accessToken->getValue()); 48 49 // The OAuth 2.0 client handler helps us manage access tokens 50 $oAuth2Client = $fb->getOAuth2Client(); 51 52 // Get the access token metadata from /debug_token 53 $tokenMetadata = $oAuth2Client->debugToken($accessToken); 54 echo '<h3>Metadata</h3>'; 55 var_dump($tokenMetadata); 56 57 // Validation (these will throw FacebookSDKException's when they fail) 58 $tokenMetadata->validateAppId(4xxxxxxxxxxx); // Replace {app-id} with your app id 59 // If you know the user ID this access token belongs to, you can validate it here 60 //$tokenMetadata->validateUserId('123'); 61 $tokenMetadata->validateExpiration(); 62 63 if (! $accessToken->isLongLived()) { 64 // Exchanges a short-lived access token for a long-lived one 65 try { 66 $accessToken = $oAuth2Client->getLongLivedAccessToken($accessToken); 67 } catch (Facebook\Exceptions\FacebookSDKException $e) { 68 echo "<p>Error getting long-lived access token: " . $helper->getMessage() . "</p>\n\n"; 69 exit; 70 } 71 72 echo '<h3>Long-lived</h3>'; 73 var_dump($accessToken->getValue()); 74 } 75 76 $_SESSION['fb_access_token'] = (string) $accessToken; 77 78 // User is logged in with a long-lived access token. 79 // You can redirect them to a members-only page. 80 //header('Location: https://example.com/members.php'); 81 82?>

上記2ファイルにおいてFacebookのサイトにあるものからの変更点は(1)session_start();を両方のファイルに追加、(2)エラー表示のためerror_reporting(E_ALL); ini_set("display_errors", 1);をfb-callback.phpに追加、(3)それぞれのapp_id及びapp_secretを変更(login.phpではそれぞれ1箇所、fb-callback.phpではapp_id2箇所、app_secret1箇所)になります。

基本的な質問ですみませんがご教示よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

PHP

1 $fb = new Facebook\Facebook([ 2 'app_id' => '4xxxxxxxxxxx', // Replace {app-id} with your app id 3 'app_secret' => 'exxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 4 'default_graph_version' => 'v2.2', 5 ]);

上記ソースを下記ソースに変更したところエラーがおさまりました。

PHP

1 $config = array( 2 'app_id' => '4xxxxxxxxxxx', // Replace {app-id} with your app id 3 'app_secret' => 'exxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 4 'default_graph_version' => 'v2.4', 5 ); 6 7 $fb = new Facebook\Facebook($config); 8

投稿2016/03/29 13:20

Makitani

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問