From 8d77aebb6408d6cb2e996f1cf97ef1eb8a4abee6 Mon Sep 17 00:00:00 2001 From: mahdi msr Date: Mon, 29 Sep 2025 00:16:31 +0330 Subject: [PATCH] future-private: FIX signature for case empty body and have only query param --- src/Requests/Header.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/Requests/Header.php b/src/Requests/Header.php index 2192635..d1fb011 100644 --- a/src/Requests/Header.php +++ b/src/Requests/Header.php @@ -21,6 +21,7 @@ class Header /** * Convert sorted parameters to string format * Example: ["id" => "1", "uid" => "200"] becomes "id1uid200" + * According to Bitunix documentation: String queryParams = "id1uid200" */ public static function digestQueryParameters(array $parameters): string { @@ -32,7 +33,7 @@ class Header $result = ''; foreach ($sortedParameters as $key => $value) { - $result .= $key.$value; + $result .= $key . $value; } return $result; @@ -78,8 +79,12 @@ class Header // Step 2: Remove all spaces from body (already done if JSON encoded properly) $bodyString = trim($body); - // Step 3: Create digest: SHA256(nonce + timestamp + api-key + queryParams + body) - $digestInput = $nonce.$timestamp.$apiKey.$queryParamsString.$bodyString; + // Step 3: Create digest: SHA256(nonce + timestamp + api-key + queryParams + body (if not empty)) + if (strlen($bodyString) == 0) { + $digestInput = $nonce.$timestamp.$apiKey.$queryParamsString; + }else{ + $digestInput = $nonce.$timestamp.$apiKey.$queryParamsString.$bodyString; + } $digest = hash('sha256', $digestInput); // Step 4: Create sign: SHA256(digest + secretKey)