sign.html 15 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <!DOCTYPE html>
  2. <html lang="en-US">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>签名 | 文档中心</title>
  7. <meta name="description" content="优巨引擎·文档中心">
  8. <link rel="stylesheet" href="/assets/style.b8a566d5.css">
  9. <link rel="modulepreload" href="/assets/app.2005ae41.js">
  10. <link rel="modulepreload" href="/assets/views_interfaceRules_sign.md.c9e83678.lean.js">
  11. <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
  12. <meta name="keywords" content="文档中心 猎豹 开放平台">
  13. <link rel="icon" href="/favicon.ico">
  14. <meta name="twitter:title" content="签名 | 文档中心">
  15. <meta property="og:title" content="签名 | 文档中心">
  16. </head>
  17. <body>
  18. <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" href="/" data-v-b8818f8c>首页 <!----></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" href="/" data-v-b8818f8c>首页 <!----></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&amp;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&amp;shopName=好又多超市&amp;timeStamp=1651215937000</p><p>字符串A的末尾拼接appSecret, 组装成字符串B: appId=100010&amp;shopName=好又多超市&amp;timeStamp=1651215937000&amp;appSecret=test001</p><p>字符串B进行MD5运算得到字符串C: MD5(appId=100010&amp;shopName=好又多超市&amp;timeStamp=1651215937000&amp;appSecret=test001)</p><p>字符串C转成全大写, 得到签名signValue: MD5(appId=100010&amp;shopName=好又多超市&amp;timeStamp=1651215937000&amp;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">&lt;</span><span class="token class-name">String</span><span class="token punctuation">,</span> <span class="token class-name">Object</span><span class="token punctuation">&gt;</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>
  19. <span class="token class-name">Set</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">String</span><span class="token punctuation">&gt;</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>
  20. <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>
  21. <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>
  22. <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>
  23. <span class="token keyword">try</span> <span class="token punctuation">{</span>
  24. <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>
  25. <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>
  26. <span class="token comment">// 排除值为null的情况</span>
  27. <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>
  28. 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">&quot;UTF-8&quot;</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">&quot;=&quot;</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">&quot;&amp;&quot;</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  29. <span class="token punctuation">}</span>
  30. <span class="token punctuation">}</span>
  31. param<span class="token punctuation">.</span><span class="token function">append</span><span class="token punctuation">(</span><span class="token string">&quot;appSecret&quot;</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">&quot;=&quot;</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">&quot;UTF-8&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  32. <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>
  33. 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>
  34. <span class="token punctuation">}</span>
  35. <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>
  36. <span class="token punctuation">}</span>
  37. </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>
  38. <script>__VP_HASH_MAP__ = JSON.parse("{\"index.md\":\"7b0bfa60\",\"views_apilist_orderinterface_ordercancel.md\":\"72344679\",\"views_apilist_orderinterface_ordercreate.md\":\"c1283b6d\",\"views_apilist_orderinterface_orderpush.md\":\"519e56a5\",\"views_apilist_orderinterface_orderstatusnotice.md\":\"d121316e\",\"views_apilist_orderinterface_ordervaluation.md\":\"955a5a5f\",\"views_apilist_orderinterface_riderlocation.md\":\"52a1df20\",\"views_apilist_shopinterface_deliverystatus.md\":\"3395e79e\",\"views_apilist_shopinterface_shopcreate.md\":\"ff32fc39\",\"views_apilist_shopinterface_shopdelivery.md\":\"4edf6f86\",\"views_apilist_shopinterface_shopupdate.md\":\"625b534e\",\"views_apilist_shopinterface_statussync.md\":\"cdd3099e\",\"views_apilist_tokenrefresh.md\":\"764c6253\",\"views_appendix_businesscategory.md\":\"d53c4fa6\",\"views_appendix_deliveryplatform.md\":\"e386ba0e\",\"views_appendix_errorcode.md\":\"dc389eed\",\"views_documentdescription_index.md\":\"8b7ad3df\",\"views_interfacerules_sign.md\":\"c9e83678\"}")</script>
  39. <script type="module" async src="/assets/app.2005ae41.js"></script>
  40. </body>
  41. </html>