12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- <!DOCTYPE html>
- <html lang="en-US">
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <title>签名 | 文档中心</title>
- <meta name="description" content="优巨引擎·文档中心">
- <link rel="stylesheet" href="/assets/style.b8a566d5.css">
- <link rel="modulepreload" href="/assets/app.372b136f.js">
- <link rel="modulepreload" href="/assets/views_interfaceRules_sign.md.9eabbe72.lean.js">
-
- <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
- <meta name="keywords" content="文档中心 猎豹 开放平台">
- <link rel="icon" href="/favicon.ico">
- <meta name="twitter:title" content="签名 | 文档中心">
- <meta property="og:title" content="签名 | 文档中心">
- </head>
- <body>
- <div id="app"><!--[--><div class="theme"><header class="nav-bar" data-v-675d8756><div class="sidebar-button" data-v-675d8756><svg class="icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z" class></path></svg></div><a class="nav-bar-title" href="/" aria-label="文档中心, back to home" data-v-675d8756 data-v-cc01ef16><!----> 文档中心</a><div class="flex-grow" data-v-675d8756></div><div class="nav" data-v-675d8756><nav class="nav-links" data-v-675d8756 data-v-eab3edfe><!--[--><div class="item" data-v-eab3edfe><div class="nav-link" data-v-eab3edfe data-v-b8818f8c><a class="item isExternal" href="http://opentest.liebaoai.cn:88/" target="_blank" rel="noopener noreferrer" data-v-b8818f8c>首页 <svg class="icon outbound" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15" data-v-b8818f8c><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div></div><!--]--><!----><!----></nav></div><!--[--><!--]--></header><aside class="sidebar" data-v-83e92a68><nav class="nav-links nav" data-v-83e92a68 data-v-eab3edfe><!--[--><div class="item" data-v-eab3edfe><div class="nav-link" data-v-eab3edfe data-v-b8818f8c><a class="item isExternal" href="http://opentest.liebaoai.cn:88/" target="_blank" rel="noopener noreferrer" data-v-b8818f8c>首页 <svg class="icon outbound" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15" data-v-b8818f8c><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></div></div><!--]--><!----><!----></nav><!--[--><!--]--><ul class="sidebar-links" data-v-83e92a68><!--[--><li class="sidebar-link"><a class="sidebar-link-item" href="/../index">文档说明</a><!----></li><li class="sidebar-link"><p class="sidebar-link-item">接口规则</p><ul class="sidebar-links"><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/interfaceRules/sign">签名</a><!----></li></ul></li><li class="sidebar-link"><p class="sidebar-link-item">API列表</p><ul class="sidebar-links"><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/tokenRefresh">token刷新</a><!----></li><li class="sidebar-link"><p class="sidebar-link-item">门店相关</p><ul class="sidebar-links"><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/shopInterface/shopCreate">创建门店</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/shopInterface/shopUpdate">更新门店</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/shopInterface/shopDelivery">门店运力查询</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/shopInterface/deliveryStatus">门店运力禁用</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/shopInterface/statusSync">门店运力状态同步</a><!----></li></ul></li><li class="sidebar-link"><p class="sidebar-link-item">订单相关</p><ul class="sidebar-links"><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/orderInterface/orderValuation">订单计费</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/orderInterface/orderCreate">创建订单</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/orderInterface/orderCancel">取消订单</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/orderInterface/orderPush">推送订单</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/orderInterface/riderLocation">骑手位置</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/apiList/orderInterface/orderStatusNotice">订单状态通知</a><!----></li></ul></li></ul></li><li class="sidebar-link"><p class="sidebar-link-item">附录</p><ul class="sidebar-links"><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/appendix/businessCategory">经营品类</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/appendix/deliveryPlatform">运力平台</a><!----></li><li class="sidebar-link"><a class="sidebar-link-item" href="/../views/appendix/errorCode">错误编码</a><!----></li></ul></li><!--]--></ul><!--[--><!--]--></aside><div class="sidebar-mask"></div><main class="page" data-v-7eddb2c4><div class="container" data-v-7eddb2c4><!--[--><!--]--><div style="position:relative;" class="content" data-v-7eddb2c4><div><h2 id="签名" tabindex="-1">签名 <a class="header-anchor" href="#签名" aria-hidden="true">#</a></h2><h5 id="目的" tabindex="-1"><strong>目的</strong> <a class="header-anchor" href="#目的" aria-hidden="true">#</a></h5><p>为了防止API调用过程中数据被恶意篡改,调用任何一个API都需要按照规则进行签名,开放平台服务端会根据同一规则对签名进行验证,签名不合法的请求将会被拒绝。</p><h5 id="规则" tabindex="-1"><strong>规则</strong> <a class="header-anchor" href="#规则" aria-hidden="true">#</a></h5><ol><li>将参数(sign除外)按照参数名的字典顺序排序</li><li>将参数使用键值对的格式(即key1=value1&key2=value2...)拼接成字符串A</li><li>在字符串A最后拼接上appSecret得到最终的待签名字符串B</li><li>对待签名字符串B进行MD5运算,得到字符串C</li><li>最后将字符串C转换为大写, 即得到签名值, signValue</li></ol><h5 id="示例" tabindex="-1"><strong>示例</strong> <a class="header-anchor" href="#示例" aria-hidden="true">#</a></h5><p>appSecret=test001 系统参数: appId=100010 timeStamp=1651215937000 业务参数: shopName=好又多超市 empty=</p><p>参数拼接成字符串A: appId=100010&shopName=好又多超市&timeStamp=1651215937000</p><p>字符串A的末尾拼接appSecret, 组装成字符串B: appId=100010&shopName=好又多超市&timeStamp=1651215937000&appSecret=test001</p><p>字符串B进行MD5运算得到字符串C: MD5(appId=100010&shopName=好又多超市&timeStamp=1651215937000&appSecret=test001)</p><p>字符串C转成全大写, 得到签名signValue: MD5(appId=100010&shopName=好又多超市&timeStamp=1651215937000&appSecret=test001).toUpperCase()</p><p><strong>签名算法如下(Java代码示例)</strong></p><div class="language-java"><pre><code><span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token class-name">String</span> <span class="token function">getSignValue</span><span class="token punctuation">(</span><span class="token class-name">Map</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">Object</span><span class="token punctuation">></span></span> paramMap<span class="token punctuation">,</span> <span class="token class-name">String</span> appSecret<span class="token punctuation">)</span> <span class="token punctuation">{</span>
- <span class="token class-name">Set</span><span class="token generics"><span class="token punctuation"><</span><span class="token class-name">String</span><span class="token punctuation">></span></span> keySet <span class="token operator">=</span> paramMap<span class="token punctuation">.</span><span class="token function">keySet</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token class-name">StringBuilder</span> param <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">StringBuilder</span><span class="token punctuation">(</span><span class="token number">20</span> <span class="token operator">*</span> keySet<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token class-name">String</span><span class="token punctuation">[</span><span class="token punctuation">]</span> keys <span class="token operator">=</span> keySet<span class="token punctuation">.</span><span class="token function">toArray</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">[</span>keySet<span class="token punctuation">.</span><span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token class-name">Arrays</span><span class="token punctuation">.</span><span class="token function">sort</span><span class="token punctuation">(</span>keys<span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token keyword">try</span> <span class="token punctuation">{</span>
- <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token class-name">String</span> key <span class="token operator">:</span> keys<span class="token punctuation">)</span> <span class="token punctuation">{</span>
- <span class="token class-name">Object</span> value <span class="token operator">=</span> paramMap<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token comment">// 排除值为null的情况</span>
- <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">!=</span> <span class="token keyword">null</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
- param<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token class-name">URLEncoder</span><span class="token punctuation">.</span><span class="token function">encode</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> <span class="token string">"UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token string">"="</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span>value<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token string">"&"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token punctuation">}</span>
- <span class="token punctuation">}</span>
- param<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token string">"appSecret"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token string">"="</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token class-name">URLEncoder</span><span class="token punctuation">.</span><span class="token function">encode</span><span class="token punctuation">(</span>appSecret<span class="token punctuation">,</span> <span class="token string">"UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">UnsupportedEncodingException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span>
- e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token punctuation">}</span>
- <span class="token keyword">return</span> <span class="token class-name">Md5Util</span><span class="token punctuation">.</span><span class="token function">md5</span><span class="token punctuation">(</span>param<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toUpperCase</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
- <span class="token punctuation">}</span>
- </code></pre></div></div></div><footer class="page-footer" data-v-7eddb2c4 data-v-07c132fc><div class="edit" data-v-07c132fc><div class="edit-link" data-v-07c132fc data-v-1ed99556><!----></div></div><div class="updated" data-v-07c132fc><!----></div></footer><!----><!--[--><!--]--></div></main></div><!----><!--]--></div>
- <script>__VP_HASH_MAP__ = JSON.parse("{\"index.md\":\"42b3e30f\",\"views_apilist_orderinterface_ordercancel.md\":\"cf9a1b82\",\"views_apilist_orderinterface_ordercreate.md\":\"e043ee90\",\"views_apilist_orderinterface_orderpush.md\":\"b0de33c6\",\"views_apilist_orderinterface_orderstatusnotice.md\":\"0af267b5\",\"views_apilist_orderinterface_ordervaluation.md\":\"082a60e9\",\"views_apilist_orderinterface_riderlocation.md\":\"c58a533a\",\"views_apilist_shopinterface_deliverystatus.md\":\"dd6959f0\",\"views_apilist_shopinterface_shopcreate.md\":\"92979045\",\"views_apilist_shopinterface_shopdelivery.md\":\"b7bce01c\",\"views_apilist_shopinterface_shopupdate.md\":\"01f87faf\",\"views_apilist_shopinterface_statussync.md\":\"a7b979e6\",\"views_apilist_tokenrefresh.md\":\"a9722831\",\"views_appendix_businesscategory.md\":\"b67f9fc2\",\"views_appendix_deliveryplatform.md\":\"be9e860e\",\"views_appendix_errorcode.md\":\"3b39f39a\",\"views_documentdescription_index.md\":\"0eb503ca\",\"views_interfacerules_sign.md\":\"9eabbe72\"}")</script>
- <script type="module" async src="/assets/app.372b136f.js"></script>
-
- </body>
- </html>
|