0

我正在我的 Angular 应用程序和 rustici 软件提供的 scorm 云服务之间建立通信。我已经遵循文档,到目前为止我得到:

<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®id=1551368365666&redirecturl=closer&ts=20190228153925&sig=d6edc93e854d8e8276156759a84cc344

如文档中所述,这显然与我使用 MD5 函数生成签名参数的方式有关。

我有预感这个问题与我生成时间参数(ts)的方式有关,我是这样做的

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

如果有人做到了这一点,你能不能给我一些时间。

4

1 回答 1

0

我设法使用以下函数生成与服务器端生成的 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 参数的格式为 (YYYYMMDDHHmmss)。例如: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 以发出请求,您应该一切顺利。

于 2019-02-28T23:46:44.613 回答