<?php
namespace app\api\service;

class ApiSignService
{
    //创建sign
    public static function makeSign($data,$appKey): string
    {
        ksort($data);
        $string = self::toUrlParams($data);
        $string = $string . "&key=" . $appKey;
        $string = md5($string);
        return strtolower($string);
    }

    //检验sign是否正确
    public static function verifySign($data,$appKey): array
    {
        // 验证请求, 2分钟失效
        if (time() - intval($data['timestamp'] / 1000) > 120) {
            return ['code' => 0, 'msg' => '签名已失效'];
        }
        //比对签名
        $clientSign = $data['sign'];
        $serverSign = self::makeSign($data,$appKey);
        if ($clientSign == $serverSign) {
            return ['code' => 1, 'msg' => '验证通过'];
        } else {
            return ['code' => 0, 'msg' => '签名校验失败'];
        }
    }

    //生成url字符串
    private static function toUrlParams($values): string
    {
        $buff = "";
        foreach ($values as $k => $v) {
            if ($k != "sign" && !is_array($v)) {
                $buff .= $k . "=" . $v . "&";
            }
        }
        return trim($buff, "&");
    }
}