2011-05-26 274 views
0

我试图获取与Twitter签名的请求,以便我可以获取请求令牌并被卡住。我已经使用了twitter在他们的文档中使用的信息,以确保我已经正确地创建了t等等。我有相同的Basestring和Key,但是我仍然没有得到相同的签名。我看了其他几个例子,我似乎也做了同样的事情。Twitter - 登录请求失败

想了解一些这方面的帮助!

下面是代码:

private function sign_request($http_method, $url, $params, $oath) 
    { 
     // SET BASE STRING 
     $sign_params = $this->set_sign_params($params, $oath); 
     $sign_url  = $this->set_sign_url($url); 
     $base_string = $this->set_sign_basestring($http_method, $sign_params, $sign_url); 

     print $base_string; // Output the same as the twitter example: POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttp%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11%26oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3DQP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272323042%26oauth_version%3D1.0 


     // GET HMAC-SHA1 SIGNATURE 
     if($this->signature_method == 'HMAC-SHA1') 
     {    
      // SET KEY 
      $key = $this->set_sign_key(); 

      print $key; // Output the same as the twitter example: MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98& 

      //SIGN 
      $signature = base64_encode(hash_hmac('sha1', $base_string, $key, true)); 

      print $signature; // DO NOT output the same as the twitter example. Twitteroutput: 8wUi7m5HFQy76nowoCThusfgB+Q= and my outout: Ewqbgi+AMRZGMcqwQTjhE5/ZD80= 
     } 

     return $signature; 
    } 

有什么我错过了?任何人有任何想法?

也是一个“有趣”的事情是,如果我在twitter上例如设置signture到一个我仍然无法获得请求令牌......在先进

谢谢!

回答

0

您的基本字符串与Twitter的不一样。这就是为什么你得到不同的签名。

Twitter的:

POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttp%253A%252F%252Flocalhost%253A3005%252Fthe_dance%252Fprocess_callback%253Fservice_provider_id%253D11%26oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3DQP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272323042%26oauth_version%3D1.0

你的:

POST&https%3A%2F%2Fapi.twitter.com%2Foauth%2Frequest_token&oauth_callback%3Dhttp%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11%26oauth_consumer_key%3DGDdmIQH6jhtmLUypg82g%26oauth_nonce%3DQP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1272323042%26oauth_version%3D1.0

所不同的是在oauth_callback变量。

Twitter的:

oauth_callback%3Dhttp%253A%252F%252Flocalhost%253A3005%252Fthe_dance%252Fprocess_callback%253Fservice_provider_id%253D11%26

你的:

oauth_callback%3Dhttp%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11%26

+0

非常感谢。我错过了我需要一个双重编码。现在它是一样的,但签名仍然不一样:( – 2011-05-26 14:40:38

+0

添加新的$ base_string你有原始问题。 – abraham 2011-05-26 15:06:54

+0

解决了它。这是另一个“双重编码”的问题。非常感谢你的帮助 - 你保存了我的一天!! – 2011-05-26 15:13:38

相关问题