我一直在为此奋斗超过两天,我可以帮助你。这是问题所在:
每当向Facebook REST服务器发出请求时,我们都必须发送一个名为“sig”的附加参数。此签名使用以下算法生成:
<?php
$secret = 'Secret Key'; // where 'Secret Key' is your application secret key
$args = array(
'argument1' => $argument1,
'argument2' => $argument2); // insert the actual arguments for your request in place of these example args
$request_str = '';
foreach ($args as $key => $value) {
$request_str .= $key . '=' . $value; // Note that there is no separator.
}
$sig = $request_str . $secret;
$sig = md5($sig);
?>
有关此内容的更多信息:http://wiki.developers.facebook.com/index.php/How_Facebook_Authenticates_Your_Application
我一直在尝试用Python重现这段代码,这是我的尝试:
def get_signature(facebook_parameter):
sig = ""
for key, value in facebook_parameter.parameters:
sig += key + "=" + value
sig += facebook_parameter.application_secret
return hashlib.md5(sig).hexdigest()
facebook_paremeter.parameters是一个如下所示的列表:
[('api_key', '...'), ('v', '1.0'), ('format', 'JSON'), ('method', '...')]
和facebook_paremeter.application_secret是一个有效的应用秘密。
此代码在Google App Engine开发平台上运行(如果这有任何区别)。 Python 2.6.4。
有人可以帮我找出我的代码出错的地方吗?
谢谢, 斯
答案 0 :(得分:1)
必须对列表进行排序。