diff --git a/src/Requests/Header.php b/src/Requests/Header.php new file mode 100644 index 0000000..8a4201b --- /dev/null +++ b/src/Requests/Header.php @@ -0,0 +1,50 @@ + $k . $v, + array_keys($sortedParameters), + array_values($sortedParameters) + )); + } + + public static function generateNonce(): ?string + { + return md5(uniqid(mt_rand(), true)); + } + + public static function generateSignValue(array $queryParams = [], string $body = '', string $randomNonce = ''): string + { + $apiKey = config('bitunix-api.api_key'); + $apiSecret = config('bitunix-api.api_secret'); + $timeStamp = (string)round(microtime(true) * 1000); + $digestedQueryParam = self::digestQueryParameters($queryParams); + + $digestedHeader = $randomNonce . $timeStamp . $apiKey . $digestedQueryParam . $body; + $hash = hash('sha256', $digestedHeader); + $sign = $hash . $apiSecret; + return hash('sha256', $sign); + } +} diff --git a/tests/AuthHeaderTest.php b/tests/AuthHeaderTest.php new file mode 100644 index 0000000..3f39327 --- /dev/null +++ b/tests/AuthHeaderTest.php @@ -0,0 +1,48 @@ +toBeEmpty(); + + $params = [ + 'z_index' => 'z value', + 'a_index' => 'a value', + 'b_index' => 'b value', + ]; + $sortedParams = Header::sortQueryParameters($params); + expect($sortedParams) + ->toMatchArray([ + 'a_index' => 'a value', + 'b_index' => 'b value', + 'z_index' => 'z value', + ]); +}); + +it('get sorted query params as string value', function () { + + $digestedParam = Header::digestQueryParameters([]); + expect($digestedParam)->toBeNull(); + + $params = [ + 'z_index' => 'z_value', + 'a_index' => 'a_value', + 'b_index' => 'b_value', + ]; + $sortedParams = Header::digestQueryParameters($params); + expect($sortedParams)->toEqual('a_indexa_valueb_indexb_valuez_indexz_value'); +}); + +it('get some random string 32 bit', function () { + + $firstRandom = Header::generateNonce(); + $secondRandom = Header::generateNonce(); + + expect($firstRandom) + ->toBeString() + ->toHaveLength(32) + ->not()->toEqual($secondRandom) + ->not()->toBeNull(); +}); diff --git a/tests/ExampleTest.php b/tests/ExampleTest.php deleted file mode 100644 index 5d36321..0000000 --- a/tests/ExampleTest.php +++ /dev/null @@ -1,5 +0,0 @@ -toBeTrue(); -});