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 版本不同,但那会很奇怪。
请帮忙。
我通过更改服务器上的时区并更正那里的时间解决了这个问题。
我正在处理 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 版本不同,但那会很奇怪。
请帮忙。
我通过更改服务器上的时区并更正那里的时间解决了这个问题。