OpenSignature.class.php 1.87 KB
<?php
/**
 * OpenSignature.class.php
 * 参数 sha1 + 票据签名相关操作
 * @author Deepseath
 * @version $Id$
 */
namespace Com;

/**
 * 对参数进行 sha1 + 票据签名类
 * 主要用于对外开放接口相关的签名操作,也可用于同算法的签名生成(比如:Jssdk)
 * @author Deepseath
 */
class OpenSignature
{

    /**
     * 生成参数 ticket 的 sha1 签名
     * 与 jssdk 的算法一致
     * @param array $params 传入的参数 key-value 数组
     * @param string $ticket 通讯票据
     * @return string
     */
    public static function paramsTicketSignature(array $params, $ticket)
    {
        // 剔除签名参数
        unset($params['signature']);
        // 当前请求者的通讯票据
        $params['ticket'] = $ticket;
        // 字典排序
        ksort($params);
        // 参数数组
        $arr = [];
        foreach ($params as $_key => $_value) {
            $arr[] = rstrtolower($_key) . '=' . $_value;
        }
        $string = implode('&', $arr);

        return sha1($string);
    }

    /**
     * 根据请求者标识符获取开放接口相关配置
     * @param string $requester 请求者标识符
     * @return false | array
     */
    public static function getOpenConfig($requester)
    {
        // 接口配置文件
        $configFile = THINK_PATH . 'Conf/open.php';

        // 判断对外接口配置文件是否存在
        if (!is_file($configFile)) {
            return false;
        }

        // 载入对外接口配置信息
        $openConfigs = include ($configFile);
        if (!is_array($openConfigs)) {
            return false;
        }

        // 验证请求者标识符是否存在
        if (!is_scalar($requester) || !isset($openConfigs[$requester])) {
            return false;
        }

        // 设置当前请求者的配置信息
        return $openConfigs[$requester];
    }
}