PHP后端:
一、请求地址示例
1、请求地址
http://www.zhikev2.com/exam/seeTest?timeStamp=1525096310&apiSign=324owefldskfjsdk&userName=luowei
注:timeStamp为当前时间戳
2、参数说明
上述请求地址中附带了三个参数timeStamp、apiSign、userName
二、apiSign生成规则
1、汇总请求参数(json格式,可以是数组)
{
"timeStamp":1525096310,
"apiSign":"324owefldskfjs",
"userName":"luowe"
}
2、加入apiKey
apiKey的值:’3bdb25d93535b66fd13c16379d26f46fgzzzwh’,说明:apiKey的值为服务端开发人员提供
加入apiKey后的结果如下所示
{
"timeStamp":1525096310,
"apiSign":"324owefldskfjs",
"userName":"luowe",
"apiKey":"3bdb25d93535b66fd13c16379d26f46fgzzzwh"
}
3、请求参数排序
排序规则说明:对json中的参数按键名以英文字母表先后排序,排序结果如下
{
"apiKey":"3bdb25d93535b66fd13c16379d26f46fgzzzwh",
"apiSign":"324owefldskfjsdk",
"timeStamp":1525096310,
"userName":"luowei"
}
4、删除不参与生成apiSign的参数
(1)符合如下任何一个条件的参数,都要删除
(a)参数名称为【apiSign】的参数,删除
(2)以上面的示例来说,请求参数中存在名称为“apiSign”的参数,删除后如下所示
{
"apiKey":"3bdb25d93535b66fd13c16379d26f46fgzzzwh",
"timeStamp":1525096310,
"userName":"luowei"
}
5、拼接参数【按键名的顺序对参数列表的值进行拼接】
将第4步得到的参数列表的值拼接在一起,结果如下所示
3bdb25d93535b66fd13c16379d26f46fgzzzwh1525096310luowei
6、生成apiSign
将第5步得到的字符串使用md5方式加密,即可得到请求签名参数apiSign
apiSign = md5(“3bdb25d93535b66fd13c16379d26f46fgzzzwh1525096310luowei”)
7、
8、伪代码示例(PHP)
// 1、汇总全部请求参数
$this->params = $request->param();
// 2、加入私钥并排序参数
$this->params['apiKey'] = config('API')['APP_SECRET'];// 加入私钥
// 3、过滤不需要的参数并拼接需要的参数,将排序好的数组使用连接符.链接
例:
ksort($this->params); // 对数组的键(字母)进行降序排序
$str = '';
foreach ($this->params as $key => $val)
{
if ($key == 'apiSign')continue;// 符合以下条件的都不进行拼接
$str = $str . $val;// 拼接数组的值[数组的键(字母)进行降序排序]
}
// 4、生成签名
$sign = md5($str);
客户端说明生成apiSign参数:
一、请求地址示例【客户端一开始并没有apiSign该参数】
1、文档接口请求地址
http://www.zhikev2.com/exam/seeTest?timeStamp=1525096310&apiSign=271ebc2d9db07e5bdb3621d7bc6851b1&userName=luowei
请求地址参数说明:
apiSign:该参数客户端并没有,需生成
timeStamp:当前时间戳
userName :用户名
二、apiSign生成规则
1、汇总请求参数(json格式、或数组)
{
"timeStamp":1525096310,
"userName":"luowe"
}
2、加入apiKey
apiKey的值:’3bdb25d93535b66fd13c16379d26f46fgzzzwh’,说明:apiKey的值为服务端开发人员提供 ,
加入apiKey后的结果如下所示
{
"timeStamp":1525096310,
"userName":"luowe",
"apiKey":"3bdb25d93535b66fd13c16379d26f46fgzzzwh"
}
3、请求参数排序
排序规则说明:对json中的参数按键名以英文字母表先后排序,排序结果如下
{
"apiKey":"3bdb25d93535b66fd13c16379d26f46fgzzzwh",
"timeStamp":1525096310,
"userName":"luowei"
}
4、拼接参数【按键名的顺序对参数列表的值进行拼接】
将第3步得到的参数列表的值拼接在一起,结果如下所示
3bdb25d93535b66fd13c16379d26f46fgzzzwh1525096310luowei
5、生成apiSign
将第4步得到的字符串使用md5方式加密,即可得到请求签名参数apiSign
md5(“3bdb25d93535b66fd13c16379d26f46fgzzzwh1525096310luowei”)
apiSign = 271ebc2d9db07e5bdb3621d7bc6851b1
6、删除参数名为apiKey的值,因该参数无需 传给后端
7、拼接所有参数,生成接口地址:
http://www.zhikev2.com/exam/seeTest?apiSign=271ebc2d9db07e5bdb3621d7bc6851b1&timeStamp=1525096310&userName=luowei
参数有:apiSign、timeStamp、userName