签名生成方法

  • 所有请求参数(不包括signature), 加入平台密钥secret=xxx(从兔展开放平台获取), 根据参数名称进行字典递增排序(按照第一个字符的键值ASCII码递增排序, 如果遇到相同字符则按照第二个字符的键值ASCII码递增排序, 以此类推)
  • 将排序后的参数与其对应值, 组合成"参数=参数值"的形式, 然后用'&'字符连接起来, 作为待签名字符串
  • 将待签名字符串使用SHA1算法处理, 结果作为signature(签名)的值

注意事项

  • secret只在待签名字符串中使用,请求接口时,请勿带上secret参数


代码参考

以JavaScript代码为例

<script src="https://cdn.bootcss.com/crypto-js/3.1.9-1/crypto-js.min.js"></script>  
<script>
      const iframe = document.querySelector('#test-iframe');
      function getUnionLoginParams() {
        const nonce = 'fb4706';
        const opfid = '572115641423875';//开发者中心获取
        const uid = '18576626619';
        const secret = '92cba47a143a0c22ee7';//开发者中心获取
        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 += `&timestamp=${params.timestamp}`;
      loginUrl += `&signature=${params.signature}`;
      loginUrl += `&redirecturl=${encodeURIComponent('https://www.rabbitpre.com/template/multipage.html')}`;
      iframe.setAttribute('src', loginUrl);
      
    </script>

Java代码参考示例

SortedMap<String, String> map = new TreeMap<String, String>();
map.put("opfid", opfid);
map.put("nonce", nonce);
map.put("timestamp", timestamp);
map.put("secret", secret);
map.put("uid", uid);

String signature = SHA1Util.createSHA1Sign(map);
System.err.println("--signature-->>" + signature);
companyId=1&nonce=123456&opfid=65499870709224111111&secret=2222222222222222&timestamp=1625194549051&uid=1000010001
--signature→>c1e0401e25926f3d42de2f03fc989eec4f15b01d


后续技术对接,首先执行联合登录接口。开发平台目前只支持HTML联合登录的方式(即浏览器访问如下示例) 

https://testopen.rabbitpre.com/union-login.html?nonce=123456&opfid=65499870709224111111&uid=uidjj&timestamp=1625194549051&signature=c1e0401e25926f3d42de2f03fc989eec4f15b01d&redirecturl=https%3A%2F%2Fhome.rabbitpre.com%2F


  • 无标签