0

私はかなりの時間を費やして、Web サーバーからこの目的のために作成された Facebook ページにデータをプッシュする方法とベスト プラクティスを確立しようとしました。

アクセス トークンを使用するプロセスを読み、理解しました。自分用のアクセス トークンを生成しました。これを使用して、自分としてページに投稿できます。これは、ページとして投稿するページのアクセストークンを生成するために使用する必要があることを理解していますが、これは少し難しいです。ただし、このプロセスには、ログインしてアクセストークンを生成することが含まれますが、これは自動化されたプロセスにとって本質的に悪い/不便に思えます。

このため、ガイドに従ってアプリを作成しました。私は(私が考えている)アプリをページにリンクしているので、appid とシークレットを介して、php コードからページにデータをプッシュしようとします。これを行うと、このエラーが表示されます

{"error":{"message":"(#210) Subject must be a page.","type":"OAuthException","code":210}}

私のテストコードはこれです:

$data['picture'] = "http://www.example.com/image.jpg";
$data['link'] = "http://www.example.com/";
$data['message'] = "Your message";
$data['caption'] = "Caption";
$data['description'] = "Description";
$data['access_token'] = $app_token2;
$post_url = 'https://graph.facebook.com/'.$app_id.'/feed';
$url1 = "https://graph.facebook.com/endpoint?key=value&access_token=".$app_id."|". $app_secret ;
echo "<br>$post_url";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $post_url);
//curl_setopt($ch, CURLOPT_URL, $url1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$return = curl_exec($ch);
curl_close($ch);
echo "$return";

パーマネント ( ) シークレットを使用してサーバーが開始する投稿にアプリを使用することishは正しい方法ですが、このプロセスがどのように達成されるかについてのドキュメントはほとんど見つかりませんでした。したがって、この質問です。

4

3 に答える 3

0

$post_url は $app_id 変数を指しています。メッセージは、ページを指す必要があることを示しています。グラフの /me/accounts エンドポイントからページの ID を取得して、代わりにそこに入れてみてください。ページに投稿するには、ページ access_token (これも /me/accounts エンドポイントから) を使用する必要があると思いますが、

于 2013-11-01T09:47:05.523 に答える
0

そうです、私はかなり長い間これに取り組み、コードにいくつかのエラーを見つけましたが、質問に完全には答えていません. まず、上記のように appid に投稿しないでください。それは間違っています。appid + secret から生成されたアクセス トークンを使用すると、userid/feed に投稿するためのコードが機能します。

$url2 = "https://graph.facebook.com/oauth/access_token?client_id=".$app_id."&client_secret=". $app_secret."&grant_type=client_credentials";

このアプリ アクセス トークンは、アプリ シークレットが有効である限り有効です。また、Graph Explorer を介して ME の一時アクセス コードを生成する場合は、me/accounts を手動で解析し、ページ トークンを使用します。

$post_url = 'https://graph.facebook.com/'.$page_id.'/feed';

ページとして正しく投稿されます。

第二に、すべてのサーバー側の呼び出しには、から生成される appsecret_spoof が含まれている必要があります。

$appsecret_proof= hash_hmac('sha256', $app_token2, $app_secret);

Facebookのドキュメントによると、私のユーザーID/アカウントへのhttp get呼び出しは、ユーザーが管理するすべてのページ(およびおそらくアプリ)のページアクセストークンを生成する必要があります。これは、を使用して直接呼び出すこともできます

$url3 = "https://graph.facebook.com/".$page_id."?fields=access_token";

したがって、このアドレス (アプリ アクセス トークンと appsecret_spoof を含む) に対して get が行われると、取得されるのはすべて「True」になります ?? 同様に、正しい呼び出しが

$rob1 = "https://graph.facebook.com/".$user_id."/accounts";

エラーが表示される

{"error":{"message":"(#10) Application does not have permission for this action","type":"OAuthException","code":10}}

OK パーミッションを発行します。ドキュメントには、page_id/accounts からページ トークンを取得するには manage_pages のみが必要であると書かれているため、多くのページをトロールして、この URL を呼び出すことでこれを実行できることがわかりました。

https://www.facebook.com/dialog/oauth?client_id=YOUR_APP_ID&redirect_uri=https://www.facebook.com/connect/login_success.html&response_type=token&scope=read_stream

これは、facebook guiを介して各スコープの受け入れ/拒否ページをスローします(最終的にmanage_pages、publish_stream、およびread_streamをアプリに追加しました)どれも問題を解決していないようです!

于 2013-11-07T14:59:52.060 に答える