#twitter #oauth #request #twitter-oauth #sign
#Twitter #oauth #запрос #twitter-oauth #подписать
Вопрос:
Я пытаюсь получить запрос, подписанный с помощью Twitter, чтобы я мог получить токен запроса, и застрял. Я использовал информацию, которую Twitter использует в своей документации, чтобы убедиться, что я правильно отформатировал t и т.д. У меня идентичные базовая строка и ключ, но все равно я не получаю одинаковую подпись. Я просмотрел несколько других примеров и, похоже, сделал то же самое.
Хотелось бы получить помощь, чтобы разобраться в этом!
Вот код:
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: POSTamp;https://api.twitter.com/oauth/request_tokenamp;oauth_callback=http://localhost:3005/the_dance/process_callback?service_provider_id=11&oauth_consumer_key=GDdmIQH6jhtmLUypg82g&oauth_nonce=QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1272323042&oauth_version=1.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: MCD8BKwGdgPHvAuvgvz4EQpqDAtx89grbuNMRd7Eh98amp;
//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, я все равно не смогу получить токен запроса…
Заранее благодарю!
Ответ №1:
Ваша базовая строка отличается от строки Twitter. Вот почему вы получаете разные подписи.
В Twitter:
POSTamp;https://api.twitter.com/oauth/request_tokenamp;oauth_callback=http%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11&oauth_consumer_key=GDdmIQH6jhtmLUypg82g&oauth_nonce=QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1272323042&oauth_version=1.0
Ваш:
POSTamp;https://api.twitter.com/oauth/request_tokenamp;oauth_callback=http://localhost:3005/the_dance/process_callback?service_provider_id=11&oauth_consumer_key=GDdmIQH6jhtmLUypg82g&oauth_nonce=QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1272323042&oauth_version=1.0
Разница заключается в oauth_callback
переменной.
В Twitter:
oauth_callback=http%3A%2F%2Flocalhost%3A3005%2Fthe_dance%2Fprocess_callback%3Fservice_provider_id%3D11&
Ваш:
oauth_callback=http://localhost:3005/the_dance/process_callback?service_provider_id=11&
Комментарии:
1. Большое спасибо. Я пропустил, что мне нужна двойная кодировка. Теперь он идентичен в, но подпись все еще не та : (
2. Добавьте новую $base_string, которая у вас есть, к исходному вопросу.
3. решил это. Это была еще одна проблема с «двойным кодированием». Большое спасибо за помощь — вы спасли мой день!!