2009-11-24 92 views
0

我试图将下面的代码转换为PHP版本,如果任何人都可以帮助谢谢。从ASP到PHP的Facebook验证脚本

private bool IsValidFacebookSignature() 
    { 
     //keys must remain in alphabetical order 
     string[] keyArray = { "expires", "session_key", "ss", "user" }; 
     string signature = ""; 

     foreach (string key in keyArray) 
      signature += string.Format("{0}={1}", key, GetFacebookCookie(key)); 

     signature += SecretKey; //your secret key issued by FB 

     MD5 md5 = MD5.Create(); 
     byte[] hash = md5.ComputeHash(Encoding.UTF8.GetBytes(signature.Trim())); 

     StringBuilder sb = new StringBuilder(); 
     foreach (byte hashByte in hash) 
      sb.Append(hashByte.ToString("x2", CultureInfo.InvariantCulture)); 

     return (GetFacebookCookie("") == sb.ToString()); 
    } 

    private string GetFacebookCookie(string cookieName) 
    { 
     //APIKey issued by FB 
     string fullCookie = string.IsNullOrEmpty(cookieName) ? ApiKey : ApiKey + "_" + cookieName; 

     return Request.Cookies[fullCookie].Value; 
    } 

回答

0

这是未经测试,但试试这个:

function IsValidFacebookSignature() { 
    $keyArray = array('expires', 'session_key', 'ss', 'user'); 
    $signature = ''; 

    foreach($key in $keyArray) { 
     $signature .= "$key=".GetFacebookCookie($key); 
    } 

    $signature .= $SecretKey; 
    $hash = md5(trim($signature)); 

    return GetFacebookCookie('') == $hash; 
} 

function GetFacebookCookie($cookieName) { 
    $fullCookie = empty($cookie) ? $APIKey : $APIKey . '_' . $cookieName; 
    return $_COOKIES[$fullCookie]; 
} 

我不知道,你要申报$SecretKey$APIKey,但是这是基本的想法。

+0

很酷,谢谢。不幸的是它不工作 - 我放弃了这种方法,并采用完全不同的东西,但感谢努力。 – 2009-11-25 06:33:54