PHP 哈希 sha256 在服务器上无法正常工作

PHP hash sha256 not working fine on server

我正在处理 Web 服务,API 需要一个名为 $signature 的变量,它等于:

// Signature is generated by SHA256 (Api-Key + Shared Secret + Timestamp (in seconds))

$signature = hash("sha256", $apiKey.$sharedSecret.time());

其余代码如下,使用PECL 2.5.3:

$client = new http\Client;
$request = new http\Client\Request;

$request->setRequestUrl('https://api.test.hotelbeds.com/hotel-api/1.0/status');
$request->setRequestMethod('GET');
$request->setHeaders(array(
'cache-control' => 'no-cache',
'x-signature' => $signature,
'api-key' => '******************************',
'accept' => 'application/json'
));


$client->enqueue($request)->send();
$response = $client->getResponse();

echo $response->getBody();

问题是,如果我在本地服务器上生成 var_dump $signature 值,然后像这样粘贴它:

'x-signature' => 'b67bfd70f9ba8564eddfde0aa02dffb8aa6e24f937886ae80f77efcee139e5e5',

然后 运行 proyect 服务器上的脚本,它给了我正确的响应,但如果我只是输入:

'x-signature' => $signature,...

它给了我一个"Not authorized error"。我不知道出了什么问题,我已经在 proyect 服务器上打印了时间,彼此之间的差异就像 10 个数字,即使我将它们平均放置,问题仍然存在。

我本地服务器的PHP版本5.5.12,proyect服务器的版本是5.4.16.

所以,可能是时间函数,我认为不是,或者哈希函数与 PHP 版本不同,但那会很奇怪。

请帮忙。

我通过更改服务器上的时区并更正那里的时间解决了这个问题。