PHP的API接口的apiSign生成规则【请求签名参数生成规则】

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

猜你喜欢

转载自blog.csdn.net/a898712940/article/details/89639457