数か月前、私はクライアントのブログ ページから文字列を解析し、それをクライアントの Facebook ウォールにコメントとして投稿する小さなアプリを作成しました。
クライアントは私のアプリを一度だけ認証する必要があり、その後、現在は廃止された「offline_access」権限を介して、クライアントに代わってウォールに投稿できました.
古い SDK を使用しても最新の SDK を使用しても、コードが機能しなくなりました。コード (以下) を SDK の最新バージョンと認証を処理するための最新のプロトコルに移行しようとしましたが、役に立ちませんでした。また、クライアントに「manage_pages」スコープ(初日から設定していた)を使用してアプリを再認証させましたが、違いはありませんでした。
私が得るエラーはFatal error: Uncaught OAuthException: Bad signature
私は Facebook のドキュメンテーションと Stack Overflow の賢明な賢者との間でぐるぐる回っていますが、もう限界です。私の問題は、「長期間有効な」アクセストークンを生成できないことにあると思いますが、クライアントが毎回 Facebook にログインする必要なく (または、まったく) これを行うことができなければなりません。 . では、ユーザーの Twitter ステータスを Facebook にミラーリングするような他のアプリは、その後のユーザー ログイン/認証なしでオフライン投稿をどのように処理するのでしょうか?
Facebook の Graph API Explorer を使用すると、コードが機能することに気付きました。しかし、それには対話を見る必要があり、これは私のクライアントの場合にはうまくいきません。(ログイン/再認証は、数か月前はまったく必要ありませんでした。)
私はこの 1 週間、答えを見つけようと頭を悩ませてきました。
https://developers.facebook.com/blog/post/2011/05/13/how-to--handle-expired-access-tokens
https://developers.facebook.com/roadmap/offline-access-removal
Facebook API: ログインせずに自分のアプリケーション ウォールに投稿する方法
...いくつか挙げてみます。浴槽に閉じ込められたクモのように感じます。
誰かが私の特定のケースに合った実用的なコード例を共有できれば、それは非常にありがたいです、ありがとう. これは、最新の Facebook PHP SDK とプロトコルに適応させようとした、機能していたコードです。
<?php
require_once 'facebook.php';
$facebook_access_token_url = "https://graph.facebook.com/oauth/access_token?grant_type=client_credentials&client_id=" . FACEBOOK_APP_ID . "&client_secret=" . FACEBOOK_APP_SECRET;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $facebook_access_token_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$facebook_access_token = curl_exec($ch);
curl_close($ch);
$config['appId'] = FACEBOOK_APP_ID;
$config['secret'] = FACEBOOK_APP_SECRET;
$config['fileUpload'] = false; // optional
$facebook = new Facebook($config);
$facebook->setAccessToken($facebook_access_token);
$page_id = FACEBOOK_APP_PAGE_ID;
$facebook_access_token = "";
$result = $facebook->api('/' . FACEBOOK_ACCOUNT_ADMIN_ID . '/accounts');
foreach($result['data'] as $page){
if($page['id'] == $page_id) {
$facebook_access_token = $page['access_token'];
break;
}
}
$facebook->setAccessToken($facebook_access_token);
$attachment = array(
'access_token' => $facebook_access_token,
'message' => 'Test message',
'scope' => 'manage_pages,publish_stream,publish_actions'
);
$result = $facebook->api('/' . $_GET['post_id'] . '/comments', 'post', $attachment);
?>