api签名方案

发布于:2019-05-30 19:35:22

## api签名方案1:
```
举例:
1.参数: key1=value1
            key11=value11
            key100=value100
            key8=value8
            key2=value2
2.分配的应用信息:
         appid=10000
        secret=abc123$%^cjs789xyz
签名算法:
第一步:参数处理
    1.参数名按ASCII码从小到大排序(字典序)
    2.如果参数的值为空则该参数不参与签名,sign参数也不参与签名
    3.如果参数值是数组或对象也不参与签名
    4.如果是没有参考可签名的时候是“&key=密钥进行签名”
    5.参数名区分大小写
    stringA=key1=value1&key100=value100&key11=value11&key2=value2&key8=value8

第二步:拼接API密钥
    在stringA最后拼接上secret及值得到stringSignTemp字符串,stringSignTemp=stringA+"&key=abc123$%^cjs789xyz"
    stringSignTemp=key1=value1&key100=value100&key11=value11&key2=value2&key8=value8&key=abc123$%^cjs789xyz
    备注:如果是没有参考可签名的时候stringSignTemp=&key=abc123$%^cjs789xyz
第三步:支持的根据签名方式进行签名,2种签名方式:1.MD5, 2.HMAC-SHA256
    MD5方式: $string = md5($stringSignTemp);
    HMAC-SHA256方式:$string = hash_hmac("sha256", $stringSignTemp , $secret);

第四步:把签名结果转为大写
    $sign = strtoupper($string);

另外对emoji等特殊字符要测试验证一下如何处理
```