<commit_before><!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="chrome=1">
    <title>开发者文档</title>

    <link rel="stylesheet" href="stylesheets/styles.css">
    <link rel="stylesheet" href="stylesheets/github-light.css">
    <script src="javascripts/scale.fix.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="wrapper">
      <header>
        <h1 class="header">JSSDK 签名算法</h1>

      </header>
      <section>
JS-SDK使用权限签名算法

JsapiToken

生成签名之前必须先了解一下JsapiToken，JsapiToken是开放平台用于调用APP JS接口的临时票据。正常情况下，JsapiToken的有效期为7200秒，通过accessToken来获取。由于获取JsapiToken的api调用次数非常有限，频繁刷新JsapiToken会导致api调用受限，影响自身业务，开发者必须在自己的服务全局缓存JsapiToken 。

用accessToken 采用http GET方式请求获得JsapiToken（有效期7200秒，开发者必须在自己的服务全局缓存accessToken）：https://api.open.imasheng.com/openapi/token/getJsapiToken?accessToken=***
成功返回如下JSON：

{
"jsapiToken":"<KEY>",
"expiresIn":7200
}
获得JsapiToken之后，就可以生成JS-SDK权限验证的签名了。


签名算法

签名生成规则如下：参与签名的字段包括noncestr（随机字符串）, 有效的JsapiToken, timestamp（时间戳）, url（当前网页的URL，不包含#及其后面部分） 。对所有待签名参数按照字段名的ASCII 码从小到大排序（字典序）后，使用URL键值对的格式（即key1=value1&key2=value2…）拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密，字段名和字段值都采用原始值，不进行URL 转义。


即signature=sha1(string1)。 示例：

noncestr=Wm3WZYTPz0wzccnW
jsapiToken=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=1414587457
url=http://www.baidu.com?params=value

步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序（字典序）后，使用URL键值对的格式（即key1=value1&key2=value2…）拼接成字符串string1：

jsapiToken=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://www.baidu.com?params=value

步骤2. 对string1进行sha1签名，得到signature：

0f9de62fce790f9a083d5c99e95740ceb90c27ed
注意事项

签名用的noncestr和timestamp必须与配置data中的nonceStr和timestamp相同。
签名用的url必须是调用JS接口页面的完整URL。
出于安全考虑，开发者必须在服务器端实现签名的逻辑。
      </section>
    </div>
    <!--[if !IE]><script>fixScale(document);</script><![endif]-->
		
  </body>
</html><commit_msg>bugfix<commit_after><!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="chrome=1">
    <title>开发者文档</title>

    <link rel="stylesheet" href="stylesheets/styles.css">
    <link rel="stylesheet" href="stylesheets/github-light.css">
    <script src="javascripts/scale.fix.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
    <!--[if lt IE 9]>
    <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
  </head>
  <body>
    <div class="wrapper">
      <header>
        <h1 class="header">JSSDK 签名算法</h1>

      </header>
      <section>

<h1>JS-SDK使用权限签名算法</h1>
<ul>
<li>JsapiToken</li>
<li>生成签名之前必须先了解一下JsapiToken，JsapiToken是开放平台用于调用APP JS接口的临时票据。正常情况下，JsapiToken的有效期为7200秒，通过accessToken来获取。由于获取JsapiToken的api调用次数非常有限，频繁刷新JsapiToken会导致api调用受限，影响自身业务，开发者必须在自己的服务全局缓存JsapiToken 。</li>

<li>用accessToken 采用http GET方式请求获得JsapiToken（有效期7200秒，开发者必须在自己的服务全局缓存accessToken）：https://api.open.imasheng.com/openapi/token/getJsapiToken?accessToken=***
成功返回如下JSON：
{
"jsapiToken":"<KEY>",
"expiresIn":7200
}</li>
<li>获得JsapiToken之后，就可以生成JS-SDK权限验证的签名了。</li>
<li>签名算法</li>
<li>签名生成规则如下：参与签名的字段包括noncestr（随机字符串）, 有效的JsapiToken, timestamp（时间戳）, url（当前网页的URL，不包含#及其后面部分） 。对所有待签名参数按照字段名的ASCII 码从小到大排序（字典序）后，使用URL键值对的格式（即key1=value1&key2=value2…）拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密，字段名和字段值都采用原始值，不进行URL 转义。</li>
<li>即signature=sha1(string1)。 示例：</li>
<li>noncestr=Wm3WZYTPz0wzccnW
jsapiToken=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=1414587457
url=http://www.baidu.com?params=value</li>
<li>
步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序（字典序）后，使用URL键值对的格式（即key1=value1&key2=value2…）拼接成字符串string1：

jsapiToken=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://www.baidu.com?params=value
</li>
<li>
步骤2. 对string1进行sha1签名，得到signature：

0f9de62fce790f9a083d5c99e95740ceb90c27ed
</li>
</ul>

<h2>
注意事项

签名用的noncestr和timestamp必须与配置data中的nonceStr和timestamp相同。
签名用的url必须是调用JS接口页面的完整URL。
出于安全考虑，开发者必须在服务器端实现签名的逻辑。
</h2>
      </section>
    </div>
    <!--[if !IE]><script>fixScale(document);</script><![endif]-->
		
  </body>
</html>
{'fraction_non_alphanumeric': 0.1458472500556669, 'fraction_numerical': 0.05299487864618125, 'mean_word_length': 7.364990689013036, 'pattern_counts': {'":': 4, '<': 95, '<?xml version=': 0, '>': 95, 'https://': 2, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3547425', 'n_tokens_mistral': 2597, 'n_tokens_neox': 2714, 'n_words': 174}