Php API可以';t验证hmac+;在函数中生成时使用base64

Php API可以';t验证hmac+;在函数中生成时使用base64,php,hash,hmac,Php,Hash,Hmac,我试图使用一个函数来生成base64中编码的hmac哈希。但是,端点无法验证该消息 当我在函数外部生成base64中编码的hmac哈希时,它可以正常工作。端点验证消息 这就是我在使用函数时所做的(这就是我需要并且无法使其工作的方式): 我尝试在执行函数时调试转储变量,在执行curl之前,它们匹配。因此,它似乎正在生成信息并将其发送出去 这就是我在不使用函数时所做的(这就是它的工作原理): 我做错什么了吗?为什么我会得到不同的结果?这是端点API的问题吗 编辑:API返回的错误是“无效的\u签名”

我试图使用一个函数来生成base64中编码的hmac哈希。但是,端点无法验证该消息

当我在函数外部生成base64中编码的hmac哈希时,它可以正常工作。端点验证消息

这就是我在使用函数时所做的(这就是我需要并且无法使其工作的方式):

我尝试在执行函数时调试转储变量,在执行curl之前,它们匹配。因此,它似乎正在生成信息并将其发送出去

这就是我在不使用函数时所做的(这就是它的工作原理):

我做错什么了吗?为什么我会得到不同的结果?这是端点API的问题吗

编辑:API返回的错误是“无效的\u签名”。我还尝试采用相同的值,并通过SoapUI发出请求。在使用第一种情况(函数)时,我会遇到相同的错误,而在使用第二种情况(外部函数)时,它工作正常。那么,为什么它在使用函数时会生成错误的散列呢?

我的错误

我没有将$key和$secret传递给genMsg()

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...
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...
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);