Я работаю над интеграцией с API Hotelbeds, но у меня возникла проблема с аутентификацией, необходимой для отправки как ключа API, так и X-подписи, хэша SHA256 в шестнадцатеричном формате, рассчитанного на основе ключа API, секретного плюс текущего временные метки в секундах
вот их пример:
#!/bin/bash
apiKey="yourApiKey"
secret="yourSecret"
curl -i \
-X GET \
-H 'Accept:application/json' \
-H 'Api-key:'$apiKey'' \
-H 'X-Signature:'$(echo -n ${apiKey}${secret}$(date +%s)|sha256sum|awk '{ print $1}')'' \
https://api.test.hotelbeds.com/hotel-api/1.0/status
и этот тоже
//Begin UTC creation
var utcDate = Math.floor(new Date().getTime() / 1000);
//Begin Signature Assembly
var publicKey = environment["Api-key"];
var privateKey = environment["secret"];
var assemble = (publicKey+privateKey+utcDate);
//Begin SHA-256 Encryption
hash = CryptoJS.SHA256(assemble).toString();
encryption = (hash.toString(CryptoJS.enc.Hex));
postman.setEnvironmentVariable("X-Signature", encryption);
поэтому я использую Laravel для аутентификации, и вот мой код:
$client = new \GuzzleHttp\Client();
$apiKey = "apiXXXXXXX";
$secret = "seceretXXXXX";
$assemble = $apiKey . $secret . Carbon::now()->timestamp;
// $hash = Hash::make($assemble);
$hash = base64_encode(hash('sha512', $assemble));
$headers = [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Api-key' => $apiKey,
'X-Signature' => $$hash,
];
$apiURL = 'https://api.test.hotelbeds.com/hotel-api/1.0/status';
$res = $client->request('GET', $apiURL, [
'headers' => $headers,
'json' => [
"data" => [
"type" => "flight-offers-pricing",
]
],
]);
$statusCode = $res->getStatusCode();
$responseBody = json_decode($res->getBody(), true);
dd($responseBody);
но я получаю следующую ошибку Ошибка клиента: GET https://api.test.hotelbeds.com/hotel-api/1.0/status привела к ошибке `400 Bad Запрос
как отправить ключ API и X-подпись, хеш SHA256 в шестнадцатеричном формате, рассчитанный на основе ключа API, секрета и текущих меток времени в секундах
решено проблема и вот новый код
$client = new \GuzzleHttp\Client();
$apiKey = "apixxxxxx";
$secret = "secxxxxxx";
// Signature is generated by SHA256 (Api-Key + Shared Secret + Timestamp (in seconds))
$signature = hash("sha256", $apiKey . $secret . time());
$headers = [
'Content-Type' => 'application/json',
'Accept' => 'application/json',
'Api-key' => $apiKey,
'X-Signature' => $signature,
];
$apiURL = 'https://api.test.hotelbeds.com/hotel-api/1.0/status';
$res = $client->request('GET', $apiURL, [
'headers' => $headers,
]);
$statusCode = $res->getStatusCode();
$responseBody = json_decode($res->getBody(), true);
return $responseBody;
Подробнее здесь: https://stackoverflow.com/questions/758 ... in-laravel
Как использовать хеш SHA256 в шестнадцатеричном формате в laravel ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как мне преобразовать UTF-8 в шестнадцатеричном формате в его кодовую точку?
Anonymous » » в форуме JAVA - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-