PHP hash sha256在服务器上运行不正常

时间:2016-03-23 05:45:30

标签: php web-services api hash sha256

我正在处理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, ...

它给了我一个“未经授权的错误”。我不知道出了什么问题,我已经在proyect服务器上打印了时间,差异就像是彼此之间的10个数字,即使我把它们放在一起,问题仍然存在。

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

所以,它可能是时间函数,我认为它不是,或者散列函数与PHP版本不同,但这很奇怪。

请帮忙。

1 个答案:

答案 0 :(得分:1)

我通过更改服务器上的时区并更正那里的时间来解决它。