0

彼のpage_idから Facebook ページに関する情報 ( namepage_url )を取得する Facebook アプリケーションを作成します。だから私はFacebook Wikiに行き、一見良さそうなこのAPIメソッドを見つけました:

http://wiki.developers.facebook.com/index.php/Pages.getInfo

Facebook ユーザーにアプリケーションのインストールを強制したくないので、session_key パラメーターを渡さないことが唯一の望みでした。(「アプリケーションを許可する」ページまたはポップアップを知っています)。

しかし、説明には次のように書かれています:

「session_key パラメーターはオプションです。session_key パラメーターが渡されない場合、アプリケーションを追加したページの情報のみを取得できます。」

だから問題ありません、まさに私が探しているものです!

しかし、試してみると、次のエラーが発生します。

「102 セッション キーが不適切に送信されたか、タイムアウトに達しました。別のキーを取得するには、ユーザーに再度ログインするように指示してください。」

session_key パラメーターを渡さないため、正常です。

Rails + Facebooker プラグインを使用しています。だから私は成功せずに私のコンソールでこのメソッドを試してみてください:

>>Facebooker::Session.create.pages(:fields => ["name", "page_url"], :page_ids => "123456")
=> []


>> Facebooker::Session.create.fql_query("SELECT name, page_url FROM page WHERE page_id=123456")
=> []

(もちろん、page_id="123456" のページに私のアプリケーションがインストールされています)

誰かがページに関する情報を取得する方法を知っていますが、session_key パラメータを渡す必要はありませんか?

Facebookアプリケーションがユーザーにアプリケーションのインストールを要求せずにページに関する情報を取得するのをすでに見たので、それが可能であることはわかっています。

4

3 に答える 3

1
private string ToUrlBase64String(byte[] Input)
{
    return Convert.ToBase64String(Input).Replace("=", String.Empty)
                                        .Replace('+', '-')
                                        .Replace('/', '_');
}

private byte[] SignWithHmac(byte[] dataToSign, byte[] keyBody)
{
    using (var hmacAlgorithm = new HMACSHA256(keyBody))
    {
        hmacAlgorithm.ComputeHash(dataToSign);
        return hmacAlgorithm.Hash;
    }
}

#region["Parse Signed_Request Method"]
/// <summary>
/// Parse Signed_Request Method
/// </summary>
/// <param name="signedRequestValue"></param>
/// <returns></returns>
private string ParseSignedRequest(string signedRequestValue)
{
    string PageID = string.Empty;
    string applicationSecret = "7f7e426af4d835a2fd54abea04520283";
    string[] signedRequest = signedRequestValue.ToString().Split('.');
    string expectedSignature = signedRequest[0];
    string payload = signedRequest[1];
    // Attempt to get same hash
    var Hmac = SignWithHmac(UTF8Encoding.UTF8.GetBytes(payload), UTF8Encoding.UTF8.GetBytes(applicationSecret));
    var HmacBase64 = ToUrlBase64String(Hmac);

    if (HmacBase64 != expectedSignature)
        return null;
    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, '='));
    string myvalue = Convert.ToString(JsonConvert.DeserializeObject(encoding.GetString(base64JsonArray)));        
    string ss = myvalue.Replace("{", "").Replace("}", "").Replace("\"", "");
    string[] s = ss.Split(',');
    for (int i = 0; i < s.Length; i++)
    {
        string[] s1 = s[i].Split(':');
        if (s1[0].ToString().Trim().ToLower() == "profile_id")
        {
            string[] myapp = s[i].Split(':');
            PageID = myapp[1].ToString().Trim();
        }
    }
    return PageID;

}

#endregion


#region["Page_Load Event"]
/// <summary>
/// Page_Load Event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{

    string SignedRequest = Request.Form["signed_request"].ToString();
    string myvalue = Convert.ToString(ParseSignedRequest(SignedRequest));
    //now myvalue contain the page id      
}
#endregion
于 2011-03-02T06:12:10.597 に答える
0

developers.facebook.com のこのスレッドが役に立ちます http://forum.developers.facebook.com/viewtopic.php?pid=147246#p147246

于 2009-11-14T05:11:26.347 に答える