私はbase64でencondedされたhmacハッシュを生成する関数を使用しようとしています。ただし、エンドポイントはそのメッセージを検証できません。APIでhmac + base64を検証できません。
関数の外でbase64でencondedされたhmacハッシュを生成すると、正常に動作します。エンドポイントはメッセージを検証します。
この
機能を使用するときに私がやっているものです(これは私が必要とそれを動作させることができない方法です):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...
機能と権利を実行するとき、私はVARSをダンプデバッグしようとしましたカールを実行する前に、一致します。だから、それは情報を生成し、それを送信しているようです。
と機能を使用しない場合、これは(これは、それが働いている方法です)私がやっているものです:
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...
私が間違って何をやっていますか?なぜ私は異なった結果を得ているのですか?エンドポイントAPIの問題ですか?
編集:APIが返すエラーは「INVALID_SIGNATURE」です。私も同じ値を取って、SoapUIから要求を出しました。私は最初のケース(関数)を使用するときに同じエラーが発生し、2番目のケース(外部関数)を使用するとうまく動作します。だから、なぜ関数を使うときに間違ったハッシュを生成するのですか?