SCORM Cloud + Angular 6 - PullRequest
       63

SCORM Cloud + Angular 6

0 голосов
/ 28 февраля 2019

Я устанавливаю связь между моим угловым приложением и облачным сервисом Scorm, предлагаемым программным обеспечением Rusti.Я следовал документации , пока получаю:

<rsp stat="fail">
    <err code="104" msg="The signature attached to the call does not match the signature generated on the server."/>
</rsp>

Вот пример URL: http://cloud.scorm.com/api?method=rustici.registration.launch&appid=79V4XI0MTG&regid=1551368365666&redirecturl=closer&ts=20190228153925&sig=d6edc93e854d8e8276156759a84cc344

Что очевидно связано сспособ генерации параметра подписи с использованием функции MD5, как указано в документации.

У меня есть подозрение, что эта проблема связана с тем, как я генерирую параметр времени (ts), я делаю это так

TS: string = moment().add(5, 'hours').format('YYYYMMDDHHmmss');

Если бы кто-то достиг этого, вы могли бы сэкономить мне время.

1 Ответ

0 голосов
/ 01 марта 2019

Мне удается сгенерировать правильные строки md5, которые соответствуют серверной стороне, сгенерированной md5, используя следующие функции.

Документация явно касается сортировки параметров, поэтому здесь это функция для этого.

    sortByKey(params) {
        let sortedObj = {}
        Object.keys(params).sort().forEach((key) => sortedObj[key] = params[key])
        return sortedObj;
    }

Позже вы должны объединить и добавить SECRET_KEY и, наконец, применить функцию md5, например так:

    getSig(params, secretKey) {
        let sortedParams = this.sortByKey(params);
        let concatenated = '';
        Object.keys(sortedParams).forEach((key) => {
            concatenated += (key + sortedParams[key]);
        });

        let sigString = secretKey + concatenated;
        return md5(sigString);
    }

Предполагая, что у вас есть следующие параметры, процесс идет следующим образом

// 1. For the given parameters, you have to sort them
method=rustici.registration.launch
regid=1551362579253
ts=20190228140259 
appid=79V4XI0MTG 
redirecturl=blank

// 2. The sorting results in
appid=79V4XI0MTG
method=rustici.registration.launch
redirecturl=blank
regid=1551362579253
ts=20190228140259

Обратите внимание, что ts param имеет формат (ГГГГММДДЧЧммсс).Пример: 20190228174550

// 3. Concatenate all sorted params
appid79V4XI0MTGmethodrustici.registration.launchredirecturlblankregid1551362579253ts20190228140259

// 4. Then prepend the secret_key to your concatenation
secret_key + appid79V4XI0MTGmethodrustici.registration.launchredirecturlblankregid1551362579253ts20190228140259

// 5. Finally apply md5 function
const sig = md5(secret_key + appid79V4XI0MTGmethodrustici.registration.launchredirecturlblankregid1551362579253ts20190228140259)

Создайте URL, чтобы сделать запрос, и вы должны быть в порядке.

...