2017-03-03 2 views
0

J'essaie d'utiliser une fonction pour générer le hachage hmac en base64. Toutefois, le point de terminaison ne peut pas valider ce message.L'API ne peut pas valider hmac + base64 lorsqu'elle est générée dans une fonction

Lorsque je génère le hachage hmac en base64 en dehors d'une fonction, cela fonctionne correctement. Le point de terminaison valide le message.

C'est ce que je fais lors de l'utilisation d'une fonction (ce qui est la façon dont j'ai besoin et ne peut pas le faire fonctionner):

function genNonce() { 
    list($usec, $sec) = explode(" ", microtime()); 
    $nonce = (int)((float)$usec + (float)$sec); 
    return $nonce; 
} 

function genMsg($nonce) { 
    $signature = strtoupper(base64_encode(hash_hmac('sha256', $nonce . $key, $secret, true))); 
    return $signature; 
} 

$nonce = genNonce(); 
$signature = genMsg($nonce); 

$auth = Array(); 
    $auth[] = "key: " . $key; 
    $auth[] = "nonce: " . $nonce; 
    $auth[] = "signature: " . $signature; 

...execute curl... 

J'ai essayé de déboguer le dumping des vars lors de l'exécution de la fonction et à droite avant d'exécuter curl, ils correspondent. Il semble donc qu'il génère l'information et l'envoie.

Et voici ce que je fais quand ne pas utiliser une fonction (ce qui est la façon dont il fonctionne):

list($usec, $sec) = explode(" ", microtime()); 
$nonce = (int)((float)$usec + (float)$sec); 
$signature = strtoupper(base64_encode(hash_hmac('sha256', $nonce . $key, $secret, true))); 

$auth = Array(); 
    $auth[] = "key: " . $key; 
    $auth[] = "nonce: " . $nonce; 
    $auth[] = "signature: " . $signature; 

...execute curl... 

Est-ce que je fais quelque chose de mal? Pourquoi ai-je des résultats différents? Est-ce un problème de l'API de point de terminaison?

Modifier: L'erreur renvoyée par l'API est "INVALID_SIGNATURE". J'ai aussi essayé de prendre les mêmes valeurs et de faire une demande via SoapUI. Je reçois la même erreur lors de l'utilisation du premier cas (fonctions) et cela fonctionne très bien lors de l'utilisation du second cas (fonctions externes). Alors, pourquoi génère-t-il de mauvais hachages lors de l'utilisation d'une fonction?

Répondre

0

Mon erreur. Je ne passais pas $ key et $ secret à genMsg().

function genNonce() { 
    list($usec, $sec) = explode(" ", microtime()); 
    $nonce = (int)((float)$usec + (float)$sec); 
    return $nonce; 
} 

function genMsg($nonce, $key, $secret) { 
    $signature = strtoupper(base64_encode(hash_hmac('sha256', $nonce . $key, $secret, true))); 
    return $signature; 
} 

$nonce = genNonce(); 
$signature = genMsg($nonce, $key, $secret);