我正在建立我的角度应用程序与Rustica软件提供的scorm cloud服务之间的通信。我遵循documentation,到目前为止,我得到了:
<rsp stat="fail">
<err code="104" msg="The signature attached to the call does not match the signature generated on the server."/>
</rsp>
与文档中所述的使用MD5函数生成签名参数的方式明显相关。
我很直觉这个问题与我生成时间参数(ts)的方式有关,我这样做
TS: string = moment().add(5, 'hours').format('YYYYMMDDHHmmss');
如果有人做到了这一点,您可以为我节省一些时间。
答案 0 :(得分: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进行请求,您应该会很好。