javascript — Перевод 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. У меня все настроено, в нем правильно вызывается «authenticationURL», но я получаю «Неверный ответ аутентификацииURL. Пожалуйста, проверьте форматирование ответа».

Я новичок в программировании на этом уровне и в основном пытался выяснить это, ссылаясь на несколько вопросов по PHP & Руби здесь также сайты, как 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 здесь правильно? Или если моя проблема связана с синтаксисом … Или с чем-то другим.

1

Решение

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

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

в

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

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

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

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

print 'authObj'.to_json

в

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

print authObj.to_json
1

Другие решения

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

  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

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

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

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

0

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

заголовок (‘Content-Type: application / json’);

0
По вопросам рекламы [email protected]