送件侠开放平台

闪时送开放平台


安全规范

<h3>签名算法</h3> <p>为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,开放平台服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。</p> <p>1)将所有系统参数及业务参数(其中sign参数除外)按照参数名的字典顺序排序</p> <p>2)将参数以参数1值1参数2值2...的顺序拼接,例如a=&amp;c=3&amp;b=1,变为b1c3,参数使用utf-8编码</p> <p>3)按照secret + 排序后的参数的顺序进行连接,得到加密前的字符串</p> <p>4)对加密前的字符串进行sha1加密并转为小写字符串,得到签名</p> <p>5)将得到的签名赋给sign作为请求的参数</p> <p>假设请求参数如下</p> <p>secret: test</p> <p>系统参数:</p> <p>appkey=test</p> <p>timestamp=1477395862</p> <p>version=1.0</p> <p>应用参数:</p> <p>number=123</p> <p>string=测试</p> <p>double=123.123</p> <p>boolean=true</p> <p>empty=</p> <p>加密前的字符串为</p> <p>testappkeytestbooleantruedouble123.123number123string测试timestamp1477395862version1.0</p> <p>sha1计算所得sign为</p> <p>8943ba698f4b009f80dc2fd69ff9b313381263bd</p> <p><strong>以java举例,签名算法代码如下</strong></p> <pre><code>// 所有参数按参数名排序 Set&amp;lt;String&amp;gt; keySet = paramMap.keySet(); List&amp;lt;String&amp;gt; keyList = new ArrayList&amp;lt;&amp;gt;(keySet); Collections.sort(keyList); // 加密前字符串拼接 StringBuilder signStr = new StringBuilder(); for (String key : keyList) { if (key.equals( &amp;quot;sign&amp;quot; )) { continue ; } Object value = paramMap.get(key); if (value == null || (value.getClass().isArray() &amp;amp;&amp;amp; byte . class .isAssignableFrom(value.getClass().getComponentType()))) { continue ; } String valueString = value.toString(); if (StringUtils.isEmpty(valueString)) { continue ; } signStr.append(key).append(value); } // 计算SHA1签名 String sign = SHA1Util.Sha1( &amp;quot;test&amp;quot; + signStr.toString()).toLowerCase(); </code></pre> <p><strong>以PHP举例,签名算法代码如下</strong></p> <pre><code> function makeSign($param) { $appkey = &amp;quot;test_appkey_val&amp;quot;; $appSecret = &amp;quot;test_app_secret_val&amp;quot;; $version = &amp;quot;1.0&amp;quot;; $timestamp = time(); $tmpArr = array( &amp;quot;appkey&amp;quot; =&amp;gt; $appkey, &amp;quot;timestamp&amp;quot; =&amp;gt; $timestamp, &amp;quot;version&amp;quot; =&amp;gt; $version, ); foreach ($param as $k =&amp;gt; $v) { $tmpArr[$k] = $v; } ksort($tmpArr); $str = $appSecret; foreach ($tmpArr as $k =&amp;gt; $v) { if ($v === false) $v = 'false'; if ($v === true) $v = 'true'; if (empty($v) &amp;amp;&amp;amp; $v != 0) continue; $str .= $k . $v; } return strtolower(sha1($str)); } </code></pre>

页面列表

ITEM_HTML