You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.3 KiB
Plaintext
96 lines
3.3 KiB
Plaintext
<#escape x as x?html>
|
|
<section>
|
|
<h1 class="blue" data-id="intro">
|
|
<i class="ace-icon fa fa-leaf green"></i>
|
|
签名算法
|
|
</h1>
|
|
|
|
<div class="help-content">
|
|
<h2 class="header lighter blue"><i class="ace-icon fa fa-compass orange"></i> 该签名算法描述如下</h2>
|
|
<ul class="list-unstyled spaced2">
|
|
<li> <i class="ace-icon fa fa-hand-o-right"></i> 所有请求参数按参数名升序排序; </li>
|
|
<li> <i class="ace-icon fa fa-hand-o-right"></i> 按请求参数名及参数值相互连接组成一个字符串; </li>
|
|
<li> <i class="ace-icon fa fa-hand-o-right"></i> 将应用密钥(appSecret)分别添加到以上请求参数串的头部和尾部;</li>
|
|
<li> <i class="ace-icon fa fa-hand-o-right"></i> 对该字符串进行 SHA1 运算,得到一个二进制数组;</li>
|
|
<li> <i class="ace-icon fa fa-hand-o-right"></i> 将该二进制数组转换为十六进制的字符串,该字符串即是这些请求参数对应的签名;</li>
|
|
<li> <i class="ace-icon fa fa-hand-o-right"></i> 该签名值使用sign系统级参数一起和其它请求参数一起发送给服务开放平台;</li>
|
|
</ul>
|
|
<h2 class="header blue lighter"><i class="ace-icon fa fa-coffee green"></i> 应用示例</h2>
|
|
<table class="table table-bordered table-hover">
|
|
<thead>
|
|
<tr>
|
|
<th>系统参数名称</th>
|
|
<th>参数值</th>
|
|
<th>业务参数名称</th>
|
|
<th>参数值</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>appKey</td>
|
|
<td>00001</td>
|
|
<td>client</td>
|
|
<td>iphone</td>
|
|
</tr>
|
|
<tr>
|
|
<td>sessionId</td>
|
|
<td>6E75C7EFB7214115A1D8C119D23206F1</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>method</td>
|
|
<td>member.get.type</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>v</td>
|
|
<td>1.0</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>timestamp</td>
|
|
<td>1422278372079</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>format</td>
|
|
<td>json</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr>
|
|
<td>locale</td>
|
|
<td>zh_CN</td>
|
|
<td></td>
|
|
<td></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p>根据签名算法,首先按字母顺序将所有参数名和参数值拼装成一个字符串:</p>
|
|
<div class="well">
|
|
appKey00001clientandroidformatjsonlocalezh_CNmethodmember.get.typesessionId6E75C7EFB7214115A1D8C119
|
|
D23206F1timestamp1422278372079v1.0
|
|
</div>
|
|
<p>假设,appKey 为 00001 的appSecret是”abcdeabcdeabcdeabcdeabcde”,则将”abcdeabcdeabcdeabcdeabcde”分别添加到以上请求参数串的头部和尾部,得到:</p>
|
|
<div class="well">
|
|
abcdeabcdeabcdeabcdeabcdeappKey00001clientandroidformatjsonlocalezh_CNmethodmember.get.typesessionId
|
|
6E75C7EFB7214115A1D8C119D23206F1timestamp1422278372079v1.0abcdeabcdeabcdeabcdeabcde
|
|
</div>
|
|
<p>对以上字符串进行SHA1签名运算,将签名值转换为十六进制的编码串,得到:</p>
|
|
<div class="well">
|
|
597F35A0819B806F7CAED2D0EEC11563675148A
|
|
</div>
|
|
<p>最后,客户端即可使用如下的URL请求串对member.get.type服务方法发起请求:</p>
|
|
<div class="well">
|
|
http://serverURL/servletUri?
|
|
client=android&locale=zh_CN&format=json&sign=597F35A0819B806F7CAED2D0EEC11563675148A0×tamp=1422278
|
|
372079&v=1.0&sessionId=6E75C7EFB7214115A1D8C119D23206F1&method=member.get.type&appKey=00001
|
|
</div>
|
|
<div>
|
|
</section>
|
|
</#escape> |