签名规范
<p><strong>签名计算方式:</strong></p>
<ol>
<li>
<p><code>sign生成规则: sha1(time+data+apikey)</code></p>
</li>
<li><code>为了防止请求被伪造、篡改,每一次接口请求都需传入根据本次请求的</code></li>
<li><code>13位时间戳(毫秒)+body参数(json格式)+apikey(密钥)</code></li>
<li><code>计算获得的sign(签名)</code></li>
</ol>
<p><strong>签名示例(php):</strong></p>
<ol>
<li><code>public function sign($post = [], $key ='',$userid = '')</code></li>
<li><code>{</code></li>
<li><code>if ($post) {</code></li>
<li><code>ksort($post); //排序post参数</code></li>
<li><code>$post = json_encode($post , JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);</code></li>
<li><code>} else {</code></li>
<li><code>$post = &quot;{}&quot;;</code></li>
<li><code>}</code></li>
<li><code>$time = time() . rand(100, 999);</code></li>
<li><code>$header[] = &quot;Content-Type: application/json; charset=utf-8&quot;;</code></li>
<li><code>//用户密钥</code></li>
<li><code>$header[] = &quot;Sign: &quot; . sha1($time . $post . $key);</code></li>
<li><code>$header[] = &quot;Timestamp: &quot; . $time;</code></li>
<li><code>//用户ID</code></li>
<li><code>$header[] = &quot;UserId: &quot; . $userid;</code></li>
<li><code>return [$post, $header];</code></li>
<li><code>}</code></li>
</ol>
<p><strong>接口约定(每次请求需传入以下Header参数:):</strong></p>
<table>
<thead>
<tr>
<th>Header 参数</th>
<th>类型</th>
<th>是否必填</th>
<th>描述</th>
<th>示例值</th>
</tr>
</thead>
<tbody>
<tr>
<td>Sign</td>
<td>string</td>
<td>是</td>
<td>签名</td>
<td>20d6ed7224f6ecedda74548aff9cb1a54e5c0033</td>
</tr>
<tr>
<td>Timestamp</td>
<td>string</td>
<td>是</td>
<td>13位时间戳(毫秒)</td>
<td>1696645385740</td>
</tr>
<tr>
<td>UserId</td>
<td>string</td>
<td>是</td>
<td>您的用户编号(后台接口为管理员登录账号)</td>
<td>10000</td>
</tr>
</tbody>
</table>
<p><strong>接口示例:</strong></p>
<p>以订单查询接口为例,开发者的UserId是10000,apikey是 e3yw37fe2zhb4wb6p2zzmxerpr835pjy,请求的参数如下:</p>
<p>> Header参数</p>
<ol>
<li><code>Sign: 待下方计算</code></li>
<li><code>Timestamp: 1696645385740</code></li>
<li><code>UserId: 10000</code></li>
</ol>
<p>> Body参数</p>
<ol>
<li><code>{</code></li>
<li><code>&quot;day&quot;: 10,</code></li>
<li><code>&quot;external_orderno&quot;: &quot;&quot;,</code></li>
<li><code>&quot;ordersn&quot;: &quot;D100759082558859640832&quot;</code></li>
<li><code>}</code></li>
</ol>
<p>第一步:将请求Body参数中多个键值对,参数按照参数名的字典升序排列(a-z)。</p>
<p><code>{&quot;day&quot;:10,&quot;external_orderno&quot;:&quot;&quot;,&quot;ordersn&quot;:&quot;D100759082558859640832&quot;}</code></p>
<p>第二步:将 13位时间戳+第一步中排序后的字符串+apikey 拼接得到待签名字符串</p>
<p><code>1696645385740{&quot;day&quot;:10,&quot;external_orderno&quot;:&quot;&quot;,&quot;ordersn&quot;:&quot;D100759082558859640832&quot;}e3yw37fe2zhb4wb6p2zzmxerpr835pjy</code></p>
<p>第三步:使用sha1算法加密待加密字符串即为sign</p>
<p><code>20d6ed7224f6ecedda74548aff9cb1a54e5c0033</code></p>
<p>第四步:将sign添加到Header参数中</p>
<ol>
<li><code>Sign: 20d6ed7224f6ecedda74548aff9cb1a54e5c0033</code></li>
<li><code>Timestamp: 1696645385740</code></li>
<li><code>UserId: 10000</code></li>
</ol>
<p>需要注意以下重要规则:</p>
<p>◆ 请求参数中有中文时,中文需要经过url编码,但计算签名时不需要;<br />
◆ 请求Body参数为空时data使用{}参与签名;<br />
◆ 参数名区分大小写;</p>