Sign.php 1.6 KB
<?php
namespace Api;

/**
 * 签名相关的操作类
 * 
 * @name Sign
 * @package Library/Api
 * @copyright yoho.inc
 * @version 1.0 (2015-9-30 16:24:36)
 * @author fei.hong <fei.hong@yoho.cn>
 */
class Sign
{
    /**
     * 排序参数
     * 
     * @param array $package 需要签名的数据
     * @return array
     */
    public static function packageSort(array $package)
    {
        ksort($package);
        reset($package);
        return $package;
    }

    /**
     * 生成签名
     * 
     * @param array $package 需要签名的数据
     * @return string
     */
    public static function makeSign(array $package)
    {
        $packageList = array();
        foreach ($package as $key => $val)
        {
            $packageList[] = trim($key . '=' . $val);
        }
        return strtolower(md5(implode('&', $packageList)));
    }

    /**
     * 获取签名
     *
     * @param array $package 需要签名的数据
     * @return string
     */
    public static function getSign(array $package)
    {
        $package = array_filter($package, function($val){return !is_null($val);});
        $package = self::packageSort($package);
        return self::makeSign($package);
    }
    
    /**
     * 验证签名
     * 
     * @param array $package 需要签名的数据
     * @param string $sign 签名信息
     * @return bool (true:签名正确, false:签名错误)
     */
    public static function verifySign($package, $sign)
    {
        $mySign = self::getSign($package);
        if ($mySign === $sign) {
            return true;
        } else {
            return false;
        }
    }
    
}