You've already forked wc-licensed-product-client
Align client and server signature implementation
- Update server docs to use RFC 5869 hash_hkdf() for key derivation - Add recursive key sorting to client ResponseSignature - Ensures client and server produce matching signatures for nested objects Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -129,11 +129,11 @@ final class ResponseSignature
|
||||
|
||||
private function buildSignaturePayload(array $responseData, int $timestamp): string
|
||||
{
|
||||
// Sort keys for consistent ordering
|
||||
ksort($responseData);
|
||||
// Sort keys recursively for consistent ordering (matches server implementation)
|
||||
$sortedData = $this->sortKeysRecursive($responseData);
|
||||
|
||||
// Create deterministic JSON representation
|
||||
$jsonBody = json_encode($responseData, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
$jsonBody = json_encode($sortedData, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
||||
|
||||
if ($jsonBody === false) {
|
||||
throw new \RuntimeException(
|
||||
@@ -145,6 +145,22 @@ final class ResponseSignature
|
||||
return $timestamp . ':' . $jsonBody;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively sort array keys for consistent JSON output.
|
||||
*/
|
||||
private function sortKeysRecursive(array $data): array
|
||||
{
|
||||
ksort($data);
|
||||
|
||||
foreach ($data as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
$data[$key] = $this->sortKeysRecursive($value);
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
private function isTimestampValid(int $timestamp): bool
|
||||
{
|
||||
$now = time();
|
||||
|
||||
Reference in New Issue
Block a user