94 lines
2.9 KiB
PHP
94 lines
2.9 KiB
PHP
<?php
|
||
|
||
/**
|
||
* Copyright 1999-2021 iFLYTEK Corporation
|
||
|
||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*/
|
||
|
||
namespace IFlytek\Xfyun\Core\Traits;
|
||
|
||
/**
|
||
* 提供平台的签名方法
|
||
*
|
||
* @author guizheng@iflytek.com
|
||
*/
|
||
trait SignTrait
|
||
{
|
||
|
||
/**
|
||
* 根据secret对uri进行签名,返回签名后的uri
|
||
*
|
||
* @param string $uri 待签名的uri
|
||
* @param array $secret 秘钥信息
|
||
* @return string
|
||
*/
|
||
private static function signUriV1($uri, $secret)
|
||
{
|
||
$apiKey = $secret['apiKey'];
|
||
$apiSecret = $secret['apiSecret'];
|
||
$host = $secret['host'];
|
||
$request_line = $secret['requestLine'];
|
||
$date = empty($secret['date']) ? gmdate ('D, d M Y H:i:s \G\M\T', time()) : $secret['date'];
|
||
$signature_origin = "host: $host\ndate: $date\n$request_line";
|
||
$signature_sha = hash_hmac('sha256', $signature_origin, $apiSecret, true);
|
||
$signature = base64_encode($signature_sha);
|
||
|
||
$authrization = base64_encode("api_key=\"$apiKey\",algorithm=\"hmac-sha256\",headers=\"host date request-line\",signature=\"$signature\"");
|
||
$uri = $uri . '?' . http_build_query([
|
||
'host' => $host,
|
||
'date' => $date,
|
||
'authorization' => $authrization
|
||
]);
|
||
return $uri;
|
||
}
|
||
|
||
/**
|
||
* 根据所提供信息返回签名
|
||
*
|
||
* @param string $appId appid
|
||
* @param string $secretKey secretKey
|
||
* @param string $timestamp 时间戳,不传的话使用系统时间
|
||
* @return string
|
||
*/
|
||
public static function signV1($appId, $secretKey, $timestamp = null)
|
||
{
|
||
$timestamp = $timestamp ?: time();
|
||
$baseString = $appId . $timestamp;
|
||
$signa_origin = hash_hmac('sha1', md5($baseString), $secretKey, true);
|
||
return base64_encode($signa_origin);
|
||
}
|
||
|
||
/**
|
||
* https调用的鉴权参数构造
|
||
*
|
||
* @param string $appId appId
|
||
* @param string $apiKey apiKey
|
||
* @param string $curTime curTime
|
||
* @param string $param param
|
||
* @return array
|
||
*/
|
||
public static function signV2($appId, $apiKey, $param, $curTime = null)
|
||
{
|
||
if (empty($curTime)) {
|
||
$curTime = time();
|
||
}
|
||
return [
|
||
'X-Appid' => $appId,
|
||
'X-CurTime' => $curTime,
|
||
'X-Param' => base64_encode($param),
|
||
'X-CheckSum' => md5($apiKey . $curTime . base64_encode($param))
|
||
];
|
||
}
|
||
}
|