Код ошибки QQ OAuth

#ruby-on-rails #oauth

#ruby-on-rails #oauth

Вопрос:

Я пытаюсь использовать QQ (огромная китайская социальная сеть, похожая на ICQ) API, который использует OAuth. Я достаточно хорошо знаком с OAuth, но могу читать по-китайски только через Google Translate.

Я использую Rails 3.0.7 и следую инструкциям в документации oauth gem.

Согласно документации QQ, их идентификатор приложения соответствует oauth_consumer_key, а КЛЮЧ их приложения является секретом пользователя oauth. Они также указывают, какой URL использовать. Итак, я делаю следующее в консоли:

 @consumer=OAuth::Consumer.new("APP ID", "APP SECRET",{:site =>
"http://openapi.qzone.qq.com", :request_token_path=>"/oauth/qzoneoauth_request_token", 
:authorize_path => "/oauth/qzoneoauth_authorize", :access_token_path => 
"/get_access_token.php"} )
  

Это возвращает:

 #<OAuth::Consumer:0x0000010283f6a0 @key="APP ID", @secret="APP SECRET", 
@options={:signature_method=>"HMAC-SHA1", 
:request_token_path=>"/oauth/qzoneoauth_request_token", 
:authorize_path=>"/oauth/qzoneoauth_authorize", 
:access_token_path=>"/get_access_token.php", :proxy=>nil, :scheme=>:header, 
:http_method=>:post, :oauth_version=>"1.0", :site=>"http://openapi.qzone.qq.com"}> 
  

Теперь пришло время получить токен запроса с сервера:

 @request_token=@consumer.get_request_token
  

К сожалению, это возвращает код ошибки: 12005 что означает недопустимый URL (спасибо @timon-vonk). Но что с этим не так и как мне это отладить? Вот еще несколько подробностей о запросе, полученном с помощью net-http-spy:

 @request_token=@consumer.get_request_token(
:oauth_callback => "http://ishiyou.com/qq")          
opening connection to openapi.qzone.qq.com...opened
<- "GET /oauth/qzoneoauth_request_token HTTP/1.1rnAccept: */*rnUser-Agent: 
OAuth gem v0.4.4rnAuthorization: OAuth 
oauth_callback="http://ishiyou.com/qq", 
oauth_consumer_key="******", 
oauth_nonce="gpv3iaYb7K3tExGxxnW5bjkyvU6ms3EuL9roLwgxs4", 
oauth_signature="3tgryVqRFjxoXSxnYTO/XuRNAU4=", 
oauth_signature_method="HMAC-SHA1", oauth_timestamp="1306933000", 
oauth_version="1.0"rnConnection: closernHost: openapi.qzone.qq.comrnrn"
-> "HTTP/1.1 200 OKrn"
-> "Connection: closern"
-> "Server: QZHTTP-2.13rn"
-> "Date: Wed, 01 Jun 2011 12:56:42 GMTrn"
-> "Content-Length: 17rn"
-> "Content-type: text/htmlrn"
-> "Cache-Control: no-cachern"
-> "rn"
reading 17 bytes...
-> "error_code=12005n"
read 17 bytes
Conn close
  

Ответ №1:

Ошибка 12005 обычно представляет собой недопустимый URL.

Недопустимый в том смысле, что сгенерированный URL-адрес недействителен, а не не существует. Проверьте, какой URL сгенерирован. Кроме того, возможно, что QQ просто неправильно анализирует запрос и по какой-то причине отправляет не 404, а 12005.

Комментарии:

1. Я использовал net-http-spy , чтобы получить лучшее представление о том, что это был за запрос. Смотрите выше.