Я считаю, что в вашем заголовке отсутствует информация.
signatureString идентифицирует части, используемые в кодировке, и также должно содержаться в заголовке.
Пример:
$date = gmdate("D, d M Y H:i:s") . " GMT";
$signingString = "Date: $date";
$signature = base64_encode(hash_hmac('sha1', $signingString, $secret, true));
$authorization = "hmac username=\"$user\", algorithm=\"hmac-sha1\", headers=\"Date\", signature=\"$signature\"";
$headers = ['Content-Type' => 'application/json',
'Date' => $date,
'Authorization' => $authorization,
'Content-MD5' => $bodyHash ];
$options = [
'headers' => $header,
'json' => $body];
$response = $client->request('POST', $uri, $options);
В этом примере '*Поле 1009 * Date 'передается в заголовке со значением, используемым в кодировке (signatureString) с секретом, а заголовок' Authorization 'определяет, какиеполя для захвата в подполе ' headers ' как часть декодирования.