2012-03-05 19 views
0

私はFacebook Page Tabアプリを持っており、ページタブへの訪問者がどこから来ているのかを調べようとしています。私はhttp://developers.facebook.com/docs/authentication/signed_request/を読んだところ、署名されたリクエストのapp_dataからこれらを取得できますが、署名されたリクエストを取得しようとするたびにapp_dataはそこにありません。Referral Url's on Facebook Pageタブ

あなたsigned_requestはおそらくで署名されていなかった

を私が署名したリクエスト時にFacebook上でタブの内側を取得するためにFB.getLoginStatusを使用しますが、私はhttp://developers.facebook.com/tools/echoで署名リクエストをデバッグするとき は、私はエラー「悪い署名」を取得 { "アルゴリズム": "HMAC-SHA256"、 "コード": "XXXX"、 "issued_at":XXXX、 "USER_ID": "xxxx2" }ここでXXXXXの我々のAPP_IDはペイロードである

JavascriptでC#SDKを使用しています

答えて

1

あなたは、このトピックのコードを使用して署名要求をデコードすることができます Decode Signed Request Without Authentication

if (Request.Params["signed_request"] != null) 
{ 
    string payload = Request.Params["signed_request"].Split('.')[1]; 
    var encoding = new UTF8Encoding(); 
    var decodedJson = payload.Replace("=", string.Empty).Replace('-', '+').Replace('_', '/'); 
    var base64JsonArray = Convert.FromBase64String(decodedJson.PadRight(decodedJson.Length + (4 - decodedJson.Length % 4) % 4, '=')); 
    var json = encoding.GetString(base64JsonArray); 
    var o = JObject.Parse(json); 
    var lPid = Convert.ToString(o.SelectToken("page.id")).Replace("\"", ""); 
    var lLiked = Convert.ToString(o.SelectToken("page.liked")).Replace("\"", ""); 
    var lUserId= Convert.ToString(o.SelectToken("user_id")).Replace("\"", ""); 
} 

あなたのためにApp_Dataにしていると

var lAppData = Convert.ToString(o.SelectToken("app_data")).Replace("\"", ""); 

を追加することにより、App_Dataにを取得するために簡単なはずタブのアプリでは、アクセス権を取得するときにリダイレクトURLに追加する必要があります。

http://facebook.com/YOUR_PAGE?sk=app_YOUR_APP_ID&app_data=add,whatever,parameters,you,want,here

私はあなただけではなく、エコーのツールで使用されるもののアドレスバーに自分の署名要求を貼り付けたので、あなたは、このエラーを得た理由があると推測することができますのようなものがすべきは、URLをリダイレクトします。このエラーは、署名されたリクエストがapp_idによって署名されていて、別のapp_idを持つechoでそれを使用しようとしているためです。しかし、それはただの推測:)

私の主な言語はPHPであるのですが、私はOの値が{ 「アルゴリズム」である:)

+0

助けることができました願っています:「HMAC-SHA256」、 は「期限が切れる」とは: 1331035200、 "issued_at":1331029487、 "oauth_token": "XXXXX"、 "ページ":{ "ID": "XXXXX"、 は "気に入った":偽、 "admin" を:真 }、 "user":{ "国": "gb"、 "ロケール": "en_US"、 "年齢":{ "min":21 012あなたはまだ見ることができますが、app_data –

+0

はまだリダイレクトURLにapp_dataを追加していないことがわかりますか?アプリデータの全体のアイデアは、これらのリダイレクトでそれを持つことです。可能であれば、ログインURLを作成するコードを入力してください。 –

+0

私が理解しているように、app_dataは符号付きリクエストにエンコードされています。署名されたリクエストは、FB.getLoginStatus(function(response){ if(response.authResponse){ //ログインして接続しているユーザ、あなたが知っている誰か)を使用して取得されました window.location.href = "/?signed_request =" + window .response.authResponse。signedRequest; } else { //利用可能なユーザーセッションがありません。あなたが知りません。 } }); ホームコントローラが要求を処理します。 –