micro uniquestamp,这是什么?

时间:2019-04-13 08:32:12

标签: php api curl nonce

我正在使用api cURL开发基于API请求的小软件。

我遇到了API的私有请求问题。请求的参数之一是“ nonce”(unix时间戳),但响应是“ invalid nonce”。

联系援助人员,他们回答我:

  

当您发送的随机数小于或等于先前发送的随机数时,将发送无效的随机数。

然后

如果同时发出2个请求,则需要增加第二个请求的随机数(可以使用micro uniquestamp,这样一秒钟内您可以在1秒钟内创建1000000个唯一随机数)。

我的问题是:我可以使用什么功能来解决此问题!?我尝试了microtime()函数,但遇到了同样的错误。

谢谢你,我的英语不好。

我的代码:

$unix_time = time();
$microtime = number_format(microtime(true), 5, '', '')
$message = $unix_time.$customer_id.$API_KEY; //nonce + customer id + api key
$signature = hash_hmac('sha256', $message, $API_SECRET);

$ticker_url = "https://www.bitstamp.net/api/v2/ticker/btceur";
$balance_url = "https://www.bitstamp.net/api/v2/balance/btceur/";

$param_array = array(
    "key" => $API_KEY,
    "signature" => strtoupper($signature),
    "nonce" => $microtime  
);

switch($_POST['action']){
    case 'ticker_btceur':
        ticker_btceur($param_array, $ticker_url);
        break;
    case 'balance_btceur':
        balance_btceur($param_array, $balance_url);
        break;
}

function ticker_btceur($da, $b_url){ // cURL GET 

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $b_url."?key=".$da['key']."&signature=".$da['signature']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
    curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "/CAcerts/cacert.pem");

    if(curl_exec($ch) === false){
        echo "Errore: ". curl_error($ch)." - Codice errore: ".curl_errno($ch);
    }
    else{
        $result = curl_exec($ch);
        echo $result;
    }
    curl_close($ch);
}

 function balance_btceur($pa, $b_url){ // cURL POST 

 $ch = curl_init();

 curl_setopt($ch,CURLOPT_URL, $b_url);
 curl_setopt($ch,CURLOPT_POST, count($pa));
 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($pa));

 if(curl_exec($ch) === false){
    echo "Errore: ". curl_error($ch)." - Codice errore: ".curl_errno($ch);
 }
 else{
     $result = curl_exec($ch);
     echo $result;
 }
 curl_close($ch);

}

3 个答案:

答案 0 :(得分:0)

microtime()是当前的Unix时间戳(以微秒为单位),它与正常的微秒时间(1秒= 1000000微秒)不同,因此它们是不同的。

如果服务提供商要求您以Unix时间戳发送微秒的时间,则必须使用:

$time = microtime(true);

此外,您可以使用rand()使其随机:

// Increase the time in random value between 10 and 100 in microtime
$time = microtime(true) + rand(10, 100);

如果他们要求您在几秒钟的时间内完成操作,则可以像这样使用rand()

$time = rand(1000,10000000);

答案 1 :(得分:0)

似乎API需要微秒,这是获取微秒的函数:

d

答案 2 :(得分:0)

我最好的猜测是它们的意思:

$stamp=(string)(int)(microtime(true)*1000000);

此图章每秒将改变一百万次,具体取决于您生成它的时间

string(16) "1555177383042022"

..请注意,此代码将无法在32位系统上正常运行,如果您的代码需要32位php兼容性,则请执行以下操作:

$stamp2=bcmul(number_format(microtime(true),18,".",""),"1000000",0);