params = $params; } /** * encode * * @time 2020年09月25日 * @param $str * @return string|string[]|null */ protected function percentEncode(string $str) { return preg_replace(['/\+/', '/\*/', '/%7E/'], ['%20', '%2A', '~'], urlencode($str)); } /** * 签名 * * @time 2020年09月25日 * @param $method * @return string */ public function signature(string $method) { ksort($this->params); $queryString = ''; foreach ($this->params as $key => $param) { $queryString .= '&' . $this->percentEncode($key) . '=' . $this->percentEncode($param); } $signString = $method . '&' . $this->percentEncode('/') . '&' . $this->percentEncode(substr($queryString, 1)); return base64_encode(hash_hmac('sha1', $signString, config('catch.domains.aliyun.access_secret'). '&', true)); } }