## 签名规范
以【**订单查询接口**】为例,时间单位是【秒】开发者的key是`BF1BDE5A649724056F904A9335B1C1C9`,请求的参数如下:
~~~
appid:13105356515
order_no: dkcxLfuFP7uTsKkO1sYxh7XMsYX9fU1F
timestamp: 1558098980667
sign:""
~~~
第一步:将请求参数中除sign外的多个键值对,根据键按照字典序排序【参考下方案例】,并按照"key1=value1&key2=value2..."的格式拼成一个字符串:
~~~
appid=13105356515&order_no=dkcxLfuFP7uTsKkO1sYxh7XMsYX9fU1F×tamp=1558098980667
~~~
第二步:将key拼接在第一步中排序后的字符串后面得到待签名字符串
~~~
appid=13105356515&order_no=dkcxLfuFP7uTsKkO1sYxh7XMsYX9fU1F×tamp=1558098980667&key=BF1BDE5A649724056F904A9335B1C1C9
~~~
第三步:使用md5算法加密待加密字符串并转为大写即为sign
~~~
612E717625A1EF4FB873BCA525F7F375
~~~
第四步:将sign添加到请求参数中
~~~
https://域名/order/get?appid=13105356515&order_no=dkcxLfuFP7uTsKkO1sYxh7XMsYX9fU1F×tamp=1558098980667&sign=6BCD2154C3578E09CD8FA699C77EB8EC
~~~
案例加密代码
```
//sign
function sign($keyParams = [],$appsecret)
{
//字典排序
ksort($keyParams);
//字符串拼接
$keyStr = '';
foreach ($keyParams as $k => $value){
$keyStr .= $k.'='.$value.'&';
}
$keyStr = $keyStr.'key='.$appsecret;
//返回大写
return strtoupper(md5($keyStr));
}
```
需要注意以下重要规则:
◆ 请求参数中有中文时,中文需要经过url编码,但计算签名时不需要;
◆ 请求参数的值为空则不进行传递;
◆ 参数名区分大小写;
◆ sign参数不参与签名;
