2015-03-06 2 views
0

Я должен попробовать Подписаться на уведомления Withings использовать этот документ http://oauth.withings.com/api/doc#api-Notification-notify_subscribe я использую рельсыWithings Создать уведомление Всегда ответ 342

Я называю OauthUtil от контроллера

oauth = OauthUtil.new 
oauth.consumer_key = WITHINGS_API_KEY 
oauth.consumer_secret = WITHINGS_API_SECRET 
oauth.token = profile.oauth_token # Token from step 3 
oauth.token_secret = profile.token_secret # Token secret from step 3 
oauth.userid = profile.uid 

В OauthUtil.rb я создать функцию звонить URL

def register_webhook 
    parsed_url = URI.parse(WITHINGS_URL + '/notify') 

    Net::HTTP.start(parsed_url.host) { | http | 
     req = Net::HTTP::Get.new "#{ parsed_url.path }?#{ self.hook_url(parsed_url).query_string }" 
     response = http.request(req) 
     response.read_body 
    } 
    end 

Добавить функцию hook_url организовать параметры и построить подпись

def hook_url(parsed_url) 

    @params = { 
     'action' => 'subscribe', 
     'callbackurl' => @callback_url, 
     'comment' => @comment, 
     'oauth_consumer_key' => @consumer_key, 
     'oauth_nonce' => nonce, 
     'oauth_signature_method' => @sig_method, 
     'oauth_timestamp' => Time.now.to_i.to_s, 
     'oauth_token' => @token, 
     'oauth_version' => @oauth_version, 
     'userid' => @userid 
    } 

    # if url has query, merge key/values into params obj overwriting defaults 
    if parsed_url.query 
     @params.merge! CGI.parse(parsed_url.query) 
    end 

    # @ref http://oauth.net/core/1.0/#rfc.section.9.1.2 
    @req_url = parsed_url.scheme + '://' + parsed_url.host + parsed_url.path 

    # create base str. make it an object attr for ez debugging 
    # ref http://oauth.net/core/1.0/#anchor14 
    @base_str = [ 
     @req_method, 
     percent_encode(req_url), 

     # normalization is just x-www-form-urlencoded 
     percent_encode(query_string) 

    ].join('&') 

    # add signature 
    @params[ 'oauth_signature' ] = signature 
    return self 
    end 

Тогда функция подписи, чтобы создать OAuth подпись

def signature 
    key = percent_encode(@consumer_secret) + '&' + percent_encode(@token_secret) 

    # ref: http://blog.nathanielbibler.com/post/63031273/openssl-hmac-vs-ruby-hmac-benchmarks 
    digest = OpenSSL::Digest.new('sha1') 
    hmac = OpenSSL::HMAC.digest(digest, key, @base_str) 

    # ref http://groups.google.com/group/oauth-ruby/browse_thread/thread/9110ed8c8f3cae81 
    Base64.encode64(hmac).chomp.gsub(/\n/, '') 
    end 

Но всегда ответ 342: подпись (с использованием Oauth) недействителен ссылка https://gist.github.com/erikeldridge/383159 я думаю, что вопрос о hook_url функции или функции подписи. Thank в

Update я изменение Params в base_string к

@params = { 
     'action' => 'subscribe', 
     'oauth_consumer_key' => @consumer_key, 
     'oauth_nonce' => nonce, 
     'oauth_timestamp' => Time.now.to_i.to_s, 
     'oauth_token' => @token, 
     'oauth_signature_method' => @sig_method, 
     'oauth_version' => @oauth_version, 
     'userid' => @userid 
    } 

Update пример базовой строки

GET&https%3A%2F%2Fwbsapi.withings.net%2Fnotify&action%3Dsubscribe%26callbackurl%3Dhttp%253A%252F%252Fstaging.medic-trust.com%252Fwearables%252Fwebhooks%252Fwithings%26comment%3DMedicTrust%26oauth_consumer_key%3D40b7c20955f4193d4ce51248f5c0921281f99483fdd5c6857b0d2974cd2340%26oauth_nonce%3Dc2e7423a12%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1426142430%26oauth_token%3Df9c32509ef7b690e88b2f17e1ddcfb0ed957e420ee02be2328f6f252329d%26oauth_version%3D1.0%26userid%3D6689931 

Но до сих пор ответа 342

ответ

0

Попробуйте использовать другой Params как Withings документации

+0

Я попробую другие параметры, но все же 342 – user2486312

Смежные вопросы