Facebook アプリリクエストの作成
-
28-10-2019 - |
質問
特定のイベントが発生したときにアプリからユーザーにメッセージを送信しようとしています。今、私はこのコードを持っています
$param = array(
'message' => 'XYZ shared a file with you',
'data' => 'additiona_string_data',
'access_token' => $facebook->getAccessToken(),
);
$tmp = $facebook->api("/$uid/apprequests", "POST", $param);
しかし、私はいつも得ます Uncaught OAuthException: (#2) Failed to create any app request thrown
どこに問題があるのか分かりません。
解決
リクエストのドキュメントを読む必要があります。
には、2 つの異なるタイプのリクエストについての説明があります。
- ユーザーが開始 ( リクエストダイアログ )
- アプリが生成されました( グラフAPI)
必要なのは、 アプリが生成したリクエスト, つまり、ユーザーではなくアプリのアクセス トークンが必要になります。
コードサンプルに Facebook オブジェクトの開始が含まれておらず、おそらくすでにユーザーを検証しているため、ユーザーアクセストークンを使用していると思います。 getAccessToken()
この呼び出しは、アプリケーションのアクセス トークンではなく、ユーザーのアクセス トークンを返します。
他のヒント
「特定のイベントが発生したときにアプリからユーザーにメッセージを送信しようとしています。」については少し混乱しています。今、私はこのコードを持っています」という意味です。
誰かがウォールに投稿したときにユーザーにメールを送信する
イベント招待状をユーザーに送信する
アプリの招待をユーザーに送信する
「XYZ があなたとファイルを共有しました」などの何かが起こったときにユーザーのウォールに書き込みます。
答える
必要です
email
そしてread_stream
ユーザーの権限。リアルタイム更新を使用して彼の壁を監視し、サーバーの SMTP を使用して電子メールを送信します。見る http://developers.facebook.com/docs/reference/api/event/#invited イベント招待状の作成方法について
@Lixが指摘したように、を参照してください。 https://developers.facebook.com/docs/channels/#requests
これは、新しい Open Graph オブジェクト/アクションを使用して実行する必要があります。この例を参照してください。 https://developers.facebook.com/docs/beta/opengraph/tutorial/
Facebook アプリのアクセス トークンは、次の方法で受け取ることができます。
https://graph.facebook.com/oauth/access_token?client_id=FB_APP_ID&client_secret=FB_APP_SECRET&grant_type=client_credentials
Facebook PHP SDK を使用してアプリからユーザーへのリクエストを投稿するための動作するコード サンプル (必要に応じてエラー処理を追加):
$facebook = new Facebook(array(
'appId' => FB_APP_ID,
'secret' => FB_APP_SECRET,
));
$token_url = "https://graph.facebook.com/oauth/access_token?" ."client_id=" .
FB_APP_ID ."&client_secret=" . FB_APP_SECRET ."&grant_type=client_credentials";
$result = file_get_contents($token_url);
$splt = explode('=', $result);
$app_access_token =$splt[1];
$facebook->setAccessToken($app_access_token);
$args = array(
'message' => 'MESSAGE_TEXT',
);
$result = $facebook->api('/USER_ID/apprequests','POST', $args);