2016-02-25 59 views
0

我很難獲得對quickblox API的訪問。根據他們的文檔此代碼應工作:Quickblox Rails簽名

require 'base64' 
    require 'cgi' 
    require 'openssl' 
    require 'hmac-sha1' 

    # Application credentials 
    aPPLICATION_ID = 12345 
    aUTH_KEY = 'hidden' 
    aUTH_SECRET = 'hidden' 


    # Generate signature 
    timestamp = Time.now.in_time_zone('UTC').to_i 
    nonce = timestamp-425346 
    signature_string = "application_id=#{aPPLICATION_ID}&auth_key=#{aUTH_KEY}&nonce=#{nonce}&timestamp=#{timestamp}" 
    signature =Base64.encode64("#{ OpenSSL::HMAC.digest('sha1', signature_string, aUTH_SECRET) }") 

    # Post 
    http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true 
    http.verify_mode = OpenSSL::SSL::VERIFY_PEER 
    request = Net::HTTP::Post.new("/session.json") 
    request.add_field('QuickBlox-REST-API-Version', '0.1.1') 
    request.add_field('Content-Type', 'application/json') 
    request.add_field('Accept', '*/*') 
    request.body = {"application_id" => aPPLICATION_ID, "auth_key" => aUTH_KEY, "nonce" => nonce, "timestamp" => timestamp, "signature" => signature }.to_json 

    response = http.request(request) 

不過,我不斷收到錯誤:{「錯誤」:{「基地」:「意外的簽名」]}}

即使在使用他們的投訴時, :http://hurl.quickblox.com/我得到完全相同的錯誤。非常令人沮喪。我究竟做錯了什麼?

+0

嘗試以下方法: signature_string = 「APPLICATION_ID =#{APPLICATION_ID}&AUTH_KEY =#{AUTH_KEY}&隨機數=#{隨機數}&時間戳=#{時間戳}」 簽名= HMAC :: SHA1.hexdigest(aUTH_SECRET,signature_string) – Darya

回答

0

事實證明,它看起來像QuickBlox不接受紅寶石出於某種原因產生的簽名。 QuickBlox甚至刪除了自己的紅寶石寶石(其中也產生了相同的錯誤)。

現在,解決方案是先通過php腳本獲取令牌,然後在ruby中進行通話。

0

檢查my stackoverflow answer on this issue在這裏。

這主要歸結爲以下兩行:

signature_string = "application_id=#{aPPLICATION_ID}&auth_key=#{aUTH_KEY}&nonce=#{nonce}&timestamp=#{timestamp}" 

signature =Base64.encode64("#{ OpenSSL::HMAC.digest('sha1', signature_string, aUTH_SECRET) }") 

您可以檢查此quickblox_api gem了。它對我很有幫助。