2016-07-14 16 views
1

Ich versuche, das Creative SDK von Adobe in meine Ruby on Rails App zu implementieren.Hochauflösendes Adobe Creative SDK von PHP in Ruby on Rails übersetzen

https://creativesdk.adobe.com/docs/web/#/articles/highresolution/index.html

Ich habe den erforderlichen Zugriff auf den hallo-res-API.

Die Beispiele, die sie haben, sind für PHP und Node.js, und ich versuche, eine Ruby on Rails-Version basierend auf dem PHP zu schreiben. Ich habe alles eingerichtet, in dem es die "authenticationURL" richtig aufruft, aber ich bekomme eine "Ungültige authenticationURL Antwort. Bitte überprüfen Sie die Formatierung der Antwort."

Ich bin neu Programmierung auf dieser Ebene und versuchte im Grunde, dies herauszufinden, indem Sie ein paar Fragen auf PHP & Ruby hier ebenso Websites wie http://www.phptoruby.com/. Hier

ist die PHP:

<!-- /getAuth --> 

<?php 
$apiKey = "apikey"; 
$apiSecret = "apisecret"; 
$salt = rand(0,1000); 
$time = time(); 
$sig = sha1($apiKey . $apiSecret . $time . $salt); 

$authObj = array(
    "apiKey" => $apiKey, 
    "salt" => $salt, 
    "timestamp" => $time, 
    "encryptionMethod" => 'sha1', 
    "signature" => $sig 
); 

echo json_encode($authObj); 

?> 

Hier ist, was ich im Moment haben (mit meinem apikey und apisecret korrekt eingegeben):

require 'time' 
require 'json' 
require 'digest/sha1' 

def get_auth 
apiKey = 'apikey' 
apiSecret = 'apisecret' 
salt = "#{0 + rand(1000)}" 
time = "#{Time.now.to_i}" 
sig = Digest::SHA1.hexdigest('apiKey' + 'apiSecret' + 'time' + 'salt') 


authObj = { :apiKey => 'apiKey', 
       :salt => 'salt', 
       :timestamp => 'time', 
       :encryptionMethod => 'sha1', 
       :signature => 'sig' } 

print 'authObj'.to_json 
render :fxb 
end 

Ich bin nicht sicher, ob print verwendet, ist richtig hier? Oder wenn mein Problem ein Syntaxproblem ist ... Oder etwas ganz anderes.

+0

Ist Ihr Problem gelöst? Ich bekomme auch den gleichen Fehler wie "Ungültige Authentifizierung URL Antwort. Bitte überprüfen Sie die Formatierung der Antwort.". Ich benutze C# und ich habe Zugang zu high res API auch. Erhob eine Beschwerde an Adobe, aber niemand reagierte.Auth Objekt ist gettin richtig in C# erstellt und ich habe die json mit kreativer Cloud Dokumentation Testen URL für Auth Objekt im Vergleich aber immer noch nicht funktioniere http://jsbin.com/xoxaqoropu/ – adang

+0

Ok, ich habe für mich gelöst Problem. Nach dem Debuggen der minimierten Voliere js fand ich, dass meine getAuth Funktion eine korrekte json (auth) zurückgab, aber ich muss den Antwortheader hinzufügen, so dass die Voliere das auth json Objekt in Signatur, Zeitstempel analysieren kann. SO muss ich unten in der Methode getAuth hinzufügen, bevor ich json zurückgebe. Ohne es zu lesen, hat die Aviare den Auth JSON als String und nicht als Objekt gelesen und es konnte sie nicht analysieren. Antwort.Clear(); Response.ContentType = "application/json; charset = utf-8"; – adang

Antwort

1

Try Ändern

sig = Digest::SHA1.hexdigest('apiKey' + 'apiSecret' + 'time' + 'salt') 

zu

sig = Digest::SHA1.hexdigest(apiKey + apiSecret + time + salt) 

Mit den einfachen Anführungszeichen, es apiKey String selbst als Wert werden gehasht nimmt, und nicht seinen Wert.

Auch die folgenden Anforderungen auch geändert werden, um die einfachen Anführungszeichen zu entfernen:

authObj = { :apiKey => 'apiKey', 
       :salt => 'salt', 
       :timestamp => 'time', 
       :encryptionMethod => 'sha1', 
       :signature => 'sig' } 

print 'authObj'.to_json 

zu

authObj = { :apiKey => apiKey, 
       :salt => salt, 
       :timestamp => time, 
       :encryptionMethod => sha1, 
       :signature => sig } 

print authObj.to_json 
+0

Ehrfürchtig. Nicht mehr, dass Fehler bekommen, aber jetzt bin ich 'Nameerror bekommen (undefined lokale Variable oder Methode 'SHA1' für # ): app/controllers/uploads_controller.rb: 28: in‚ – mdh1

+0

get_auth'' I geändert ': encryptionMethod => sha1' zu': encryptionMethod => 'sha1'' und ich bekomme nicht mehr den 'NameError' in den Protokollen, und eigentlich scheint alles in Ordnung in den Protokollen - salt, timestamp, signature und encryptionMethod (als 'sha1') sind alle da, aber jetzt bekomme ich den ursprünglichen "Invalid authenticationURL response" Javascript Fehler erneut. – mdh1

0

fügen Sie diese als eine Controller-Aktion:

def auth_aviary 
    timestamp = Time.now.to_i.to_s 
    salt = rand(1000).to_s 
    sig = Digest::SHA1.hexdigest(
      Conf.aviary_api_key + 
      Conf.aviary_api_secret + 
      timestamp + 
      salt 
     ) 
    render json: { 
     "apiKey" => Conf.aviary_api_key, 
     "salt" => salt, 
     "timestamp" => timestamp, 
     "encryptionMethod" => 'sha1', 
     "signature" => sig 
    } 
    end 
0

Reaktion zu einem alten Post für diejenigen, die immer noch mit dem Problem konfrontiert sind. Die Lösung könnte funktionieren (zumindest für asp.net). Ich bekam den gleichen Fehler und es wurde behoben, nachdem ich den Inhaltstyp der Antwort auf "application/json; charset = utf-8" gesetzt hatte. Ohne sie Voliere liest den Auth json als String und nicht widersprechen und es versagt es in Zeitstempel zu analysieren, Unterschrift usw.

Response.ContentType = "application/json; charset=utf-8"; 

es Hoffnung helfen.

0

Ja in PHP ich Header gesetzt und alle funktionieren gut.

Kopfzeile ('Content-Type: application/json');