签名生成方法
- 所有请求参数(不包括signature), 加入平台密钥secret=xxx(从兔展开放平台获取), 根据参数名称进行字典递增排序(按照第一个字符的键值ASCII码递增排序, 如果遇到相同字符则按照第二个字符的键值ASCII码递增排序, 以此类推)
- 将排序后的参数与其对应值, 组合成"参数=参数值"的形式, 然后用'&'字符连接起来, 作为待签名字符串
将待签名字符串使用SHA1算法处理, 结果作为signature(签名)的值
注意事项
secret只在待签名字符串中使用,请求接口时,请勿带上secret参数
代码参考
<script> const iframe = document.querySelector('#test-iframe'); function getUnionLoginParams() { const nonce = 'fb4706'; const opfid = '57213854015641423875'; const uid = '18576626619'; const secret = '92cba47febae4a529d02a143a0c22ee7'; const timestamp = Date.now().toString(); const params = { opfid, secret, uid, nonce, timestamp }; const query = Object.keys(params) .sort( (key1, key2) => key1.charCodeAt(0) - key2.charCodeAt(0) ) .reduce((str, key) => (str += `${key}=${params[key]}&`), '') .slice(0, -1); const signature = CryptoJS.SHA1(query).toString(CryptoJS.enc.Hex); return { nonce, opfid, uid, timestamp, signature }; } const params = getUnionLoginParams(); let loginUrl = 'https://open.rabbitpre.com/union-login.html'; loginUrl += `?nonce=${params.nonce}`; loginUrl += `&opfid=${params.opfid}`; loginUrl += `&uid=${params.uid}`; loginUrl += `×tamp=${params.timestamp}`; loginUrl += `&signature=${params.signature}`; loginUrl += `&redirecturl=${encodeURIComponent('https://www.rabbitpre.com/template/multipage.html')}`; iframe.setAttribute('src', loginUrl); </script>