Перевод Adobe Creative SDK высокого разрешения с PHP на Ruby on Rails

Я пытаюсь внедрить Adobe Creative SDK в свое приложение Ruby on Rails.

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

У меня есть необходимый доступ к API высокого разрешения.

У них есть примеры для PHP и Node.js, и я пытаюсь написать версию Ruby on Rails на основе PHP. У меня все настроено, так как он правильно вызывает «URL-аутентификацию», но я получаю «Неверный ответ URL-адреса аутентификации. Пожалуйста, проверьте форматирование ответа».

Я новичок в программировании на этом уровне и в основном пытался понять это, ссылаясь на несколько вопросов по PHP и Ruby здесь, а также на такие сайты, как http://www.phptoruby.com/.

Вот 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);

?>

Вот что у меня есть на данный момент (с моими правильно введенными apikey и apisecret):

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

Я не уверен, что здесь правильно использовать print? Или, если моя проблема связана с синтаксисом... Или что-то совсем другое.


person mdh1    schedule 14.07.2016    source источник
comment
Ваша проблема решена? Я также получаю ту же ошибку, что и ответ Invalid authenticationURL. Пожалуйста, проверьте форматирование ответа. Я использую С#, и у меня также есть доступ к API высокого разрешения. Написал жалобу в Adobe, но никто не ответил. Объект аутентификации создается правильно на C#, и я сравнил json с URL-адресом проверки документации Creative Cloud для объекта аутентификации, но все еще не работает jsbin.com/xoxaqoropu   -  person adang    schedule 13.01.2017
comment
Хорошо, я решил проблему для себя. После отладки минимизированного авиария js я обнаружил, что моя функция getAuth возвращает правильный json (auth), но мне нужно добавить заголовок ответа, чтобы авиарий мог разобрать объект auth json в подпись, отметку времени. Поэтому я должен добавить ниже в метод getAuth, прежде чем возвращать json. Без этого aviary читал auth json как строку, а не как объект, и не мог его проанализировать. Ответ.Очистить(); Response.ContentType = приложение/json; кодировка=utf-8;   -  person adang    schedule 13.01.2017


Ответы (4)


Попробуйте изменить

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

to

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

С одинарными кавычками в качестве хешируемого значения принимается сама строка apiKey, а не ее значение.

Кроме того, необходимо изменить следующее, чтобы удалить одинарные кавычки:

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

 print 'authObj'.to_json

to

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

 print authObj.to_json
person Prakash Murthy    schedule 14.07.2016
comment
Потрясающий. Эта ошибка больше не появляется, но теперь я получаю NameError (undefined local variable or method 'sha1' for #<UploadsController:0x007fdca15aaef8>): app/controllers/uploads_controller.rb:28:in 'get_auth' - person mdh1; 14.07.2016
comment
Я изменил :encryptionMethod => sha1 на :encryptionMethod => 'sha1', и я больше не получаю NameError в журналах, и на самом деле в журналах все выглядит нормально - соль, временная метка, подпись и метод шифрования (как «sha1») все есть, но теперь я снова получить первоначальную ошибку javascript ответа Invalid authenticationURL. - person mdh1; 14.07.2016

добавьте это как действие контроллера:

  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
person Tom Lobato    schedule 02.12.2016

Отвечаю на старый пост для тех, кто все еще сталкивается с проблемой. Решение может сработать (по крайней мере, для asp.net). Я получал ту же ошибку, и она была устранена после того, как я установил тип содержимого ответа как «application/json; charset = utf-8». Без него вольер читал auth json как строку, а не как объект, и не мог разобрать его на метку времени, подпись и т. д.

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

Надеюсь, это поможет.

person adang    schedule 13.01.2017

Да, в php я установил заголовок, и все работает нормально.

header('Тип контента: application/json');

person BrayanW    schedule 02.04.2017