<?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]; } }