MSSDK

SDK 文档


外部网关API签名规则

<p>[TOC]</p> <h2>变更记录</h2> <table> <thead> <tr> <th>日期</th> <th>修订版本</th> <th>修改描述</th> <th>修改人</th> </tr> </thead> <tbody> <tr> <td>2019.10.16</td> <td>V1.0</td> <td>创建文档</td> <td>bruce.lan</td> </tr> </tbody> </table> <h2>支持http(s)</h2> <p>示例:</p> <ul> <li> <p>header: Header(“AppKey”,xxxxx); Header(“Nonce”,xxxxx); Header(“Signature”,xxxxx); Header(“Timestamp”,xxxxx);</p> </li> <li> <p>Get 请求: <a href="https://pub-gw.uu.cc/public-gateway/">https://pub-gw.uu.cc/public-gateway/</a>&lt;接口API&gt;?&lt;接口请求参数&gt; 接口请求参数= Key1=value1&amp; Key2=value2&amp; Key3=value3&amp;…</p> </li> <li>POST请求: <a href="https://pub-gw.uu.cc/public-gateway/">https://pub-gw.uu.cc/public-gateway/</a>&lt;接口API&gt; <pre><code class="language-json">{   内容 }</code></pre></li> </ul> <h2>公共请求头</h2> <table> <thead> <tr> <th>参数名</th> <th>描述</th> <th>类型</th> <th>是否必填</th> <th>参与签名</th> </tr> </thead> <tbody> <tr> <td>Content-Type</td> <td>固定为:application/json</td> <td>String</td> <td>必填</td> <td>否</td> </tr> <tr> <td>User-Agent</td> <td>见详情说明</td> <td>String</td> <td>必填</td> <td>否</td> </tr> <tr> <td>Accept-Language</td> <td>固定值为:zh_CN</td> <td>String</td> <td>必填</td> <td>否</td> </tr> <tr> <td>AppKey</td> <td>每个应用有唯一个key</td> <td>String</td> <td>必填</td> <td>是</td> </tr> <tr> <td>Nonce</td> <td>随机字符串UUID,与Timestamp 联合起来,用于防止重放攻击。10分钟内的请求Nonce不能有重复</td> <td>String</td> <td>必填</td> <td>是</td> </tr> <tr> <td>Timestamp</td> <td>发起API请求的时间(UNIX时间戳),精确到毫秒</td> <td>String</td> <td>必填</td> <td>是</td> </tr> <tr> <td>Authorization</td> <td>token(登录后必填,未登录前可以不填)</td> <td>String</td> <td>可选</td> <td>可选</td> </tr> <tr> <td>Signature</td> <td>请求签名,用来验证此次请求的合法性</td> <td>String</td> <td>必填</td> <td>否</td> </tr> </tbody> </table> <ul> <li> <p><strong>AppKey</strong> appkey,appSecrect是给乐逗给游戏分配的秘钥对。 微服务业务控制台地址:<a href="http://biz.cloud.idreamsky.com">http://biz.cloud.idreamsky.com</a> 创建应用就能得到相应的 appkey,appSecrect.</p> </li> <li> <p><strong>国际化多语言 Accept-Language</strong> 如:&quot;Accept-Language:zh_CN&quot; 默认为 zh_CN</p> </li> <li><strong>User-Agent</strong> 主要是用来标记客户端信息,包含信息字段说明如下:</li> </ul> <table> <thead> <tr> <th>参数名</th> <th>描述</th> <th>类型</th> <th>是否必填</th> </tr> </thead> <tbody> <tr> <td>platform</td> <td>系统平台及版本</td> <td>String</td> <td>是</td> </tr> <tr> <td>channel</td> <td>分配的渠道号</td> <td>String</td> <td>是</td> </tr> <tr> <td>appVersion</td> <td>游戏的版本号</td> <td>String</td> <td>是</td> </tr> <tr> <td>package</td> <td>游戏的包名</td> <td>String</td> <td>是</td> </tr> <tr> <td>sdkVersion</td> <td>sdk的版本号</td> <td>String</td> <td>是</td> </tr> <tr> <td>sdkName</td> <td>sdk指纹</td> <td>String</td> <td>是</td> </tr> <tr> <td>networkType</td> <td>网络类型,4G或者wifi</td> <td>String</td> <td>是</td> </tr> <tr> <td>deviceBrand</td> <td>手机型号+品牌</td> <td>String</td> <td>是</td> </tr> <tr> <td>deviceId</td> <td>设备唯一标识</td> <td>String</td> <td>是</td> </tr> <tr> <td>localTime</td> <td>当前的时间和时区</td> <td>String</td> <td>是</td> </tr> </tbody> </table> <p>示例如下:</p> <pre><code>platform:CP;channel:CP;appVersion:1.0.0;package:com.cp.sdk;sdkVersion:1.0.0;sdkName:MSSDK;networkType:WiFi;deviceBrand:common;deviceId:00000000;localTime:2019-01-01 00:00:00</code></pre> <p><strong>注意</strong>: 一定要按以上<strong>字段顺序拼接,参数&quot;;&quot;分割,并且参数的值不能包含 &quot;;&quot;</strong> </p> <ul> <li> <p><strong>认证令牌token  Authorization</strong> 玩家登录成功后,服务端会返回一个token,后续玩家请求都需要带上Authorization信息 如:</p> <pre><code>Authorization="bearer 239bde30-19e7-49e8-851a-ef4260aac1d0"</code></pre> </li> <li><strong>Content-Type</strong></li> </ul> <p>Content-Type 固定为 application/json</p> <p>如:</p> <pre><code>Content-Type=“application/json”</code></pre> <ul> <li><strong>Signature</strong></li> </ul> <p><strong>参与签名的包含字段有</strong>:</p> <pre><code>公共请求参数(参与签名字段) + ”Authorization”(可选) + 请求参数(get请求) + body(post请求)</code></pre> <p><strong>注意:</strong> Authorization: 登录成功后服务端返回的token值(可选,登录后必填,未登录前可以不填),该key存在则参与签名 get请求, 则没有请求body post请求,则没有请求参数</p> <p><strong> 签名规则说明</strong> 1、对所有参与签名的参数按参数名做字典序升序排列(所谓字典序升序排列,直观上就如同在字典中排列单词一样排序,按照字母表或数字表里递增顺序的排列次序,即先考虑第一个“字母”,在相同的情况下考虑第二个“字母”,依此类推),key排序后按照 “参数名称”=“参数值”的形式拼接字符串,得到<strong>签名字符串</strong>。</p> <pre><code>Key1=value1&amp; Key2=value2&amp; Key3=value3&amp;…………</code></pre> <p>2、将秘钥appSecrect拼接在<strong>签名字符串前后</strong></p> <pre><code>appSecrect&amp; Key1=value1&amp; Key2=value2&amp; Key3=value3&amp;………&amp; appSecrect</code></pre> <p>对于post请求,key固定为“requestBody”,“requestBody”参与参数名排序,value为请求的整个body。 例如</p> <pre><code>JSxPpoOzc9de9gC2wiSt&amp;Authorization=Bearer 239bde30-19e7-49e8-851a-ef4260aac1d0&amp;Nonce=1997&amp;Timestamp=201910101&amp;requestBody={ "appKey":"10001_LsP2XAYmBF6jHXTPOMZO", "loginType":"Hphone", "loginId":"13725530664", "password":"123456", "gameId":"10001", "deviceId":"abc99887yu", "channelId":"1002", "deviceBrand":"huawei" }&amp;JSxPpoOzc9de9gC2wiSt</code></pre> <p><code>JSxPpoOzc9de9gC2wiSt</code> 是秘钥appSecrect</p> <p>requestBody 是post上来的JSON串,当成一个整体,里面的内容不用排序。</p> <p>3、md5生成签名串, 并进行UrlEncode UTF-8编码:</p> <pre><code>Signature=UrlEncode(md5(appSecrect&amp; Key1=value1&amp; Key2=value2&amp; Key3=value3&amp;………&amp; appSecrect))</code></pre> <h2>签名代码示例</h2> <p>请参考 <a href="https://www.showdoc.cc/mssdk?page_id=2992099572666798">签名示例</a> 文档。</p>

页面列表

ITEM_HTML