如何在api localbitcoin上使用分页

如何在api localbitcoin上使用分页,api,pagination,bitcoin,hmac,Api,Pagination,Bitcoin,Hmac,我正在使用本地比特币API进行开发,我正在使用路径“/API/dashboard/closed/”,这是我的代码: <?php function localbitcoinsquery($path, $nonce,array $req = Array()) { global $random; $key='mykey'; $secret='secretkey'; if ($req) { $get=httpbuildquery($req);

我正在使用本地比特币API进行开发,我正在使用路径“/API/dashboard/closed/”,这是我的代码:

<?php
function localbitcoinsquery($path, $nonce,array $req = Array()) {
    global $random;
    $key='mykey';
    $secret='secretkey';

    if ($req) {
        $get=httpbuildquery($req);
        $path=$path.'?'.$get;
    }

    $postdata=$nonce.$key.$path;
    $sign = strtoupper(hashhmac('sha256', $postdata, $secret));
    $headers = array(
        'Apiauth-Signature:'.$sign,
        'Apiauth-Key:'.$key,
        'Apiauth-Nonce:'.$nonce
    );

    $ch = null;
    $ch = curlinit('https://localbitcoins.com'.$path);
    curlsetopt($ch, CURLOPTRETURNTRANSFER, true);
    curlsetopt($ch, CURLOPTHTTPHEADER, $headers);
    curlsetopt($ch, CURLOPTSSLVERIFYPEER, TRUE);
    curlsetopt($ch, CURLOPTCONNECTTIMEOUT, 20);
    $res = curlexec($ch);
    if ($res === false) throw new Exception('Curl error: '.curlerror($ch));
    $dec = jsondecode($res, true);
    if (!$dec) throw new Exception('Invalid data: '.$res);
    curl_close($ch);

    return $dec;
}

$getinfo = array();
$url='/api/dashboard/closed/';
$mt = explode(' ', microtime());
$random = $mt[1].substr($mt[0], 2, 6);
$getinfo = localbitcoinsquery($url,$random);
echo "<pre>";
printr($getinfo); 
echo "</pre>";
?>
但我不知道如何使用分页,当我试图在代码中使用此链接时,我得到错误:

[消息]=>已提供HMAC身份验证密钥和签名,但它们 无效。错误41


我已经在谷歌进行了大量调查,但信息很少。

我正在使用python库,也遇到了同样的问题。当我与技术支持人员交谈时,他们说问题在于我计算身份验证的方式

基本上,您必须将分页url作为签名的一部分

至少在python库上,您不必更改api端点,因为参数是作为表单数据的一部分传递的

因此,在获取第二页时,您仍然可以访问“/api/dashboard/closed/”,而“?order_by=-closed_at&start_at&start_at=2017-10-26+17%3U50%3A49%2B00%9A00”内容以某种形式出现


pythonapi为您完成了所有这些,您只需从github页面复制示例。

我正在使用python库,遇到了同样的问题。当我与技术支持人员交谈时,他们说问题在于我计算身份验证的方式

基本上,您必须将分页url作为签名的一部分

至少在python库上,您不必更改api端点,因为参数是作为表单数据的一部分传递的

因此,在获取第二页时,您仍然可以访问“/api/dashboard/closed/”,而“?order_by=-closed_at&start_at&start_at=2017-10-26+17%3U50%3A49%2B00%9A00”内容以某种形式出现


pythonapi为您完成了所有这些,您只需从github页面复制示例。

我修复了第41个错误。我修改了你的例子来说明这是可行的,(阅读我的注释:注释以更好地理解问题所在)阅读我的注释:注释


我修复了第41个错误。我修改了你的例子来说明这是可行的,(阅读我的注释:注释以更好地理解问题所在)阅读我的注释:注释


[pagination] => Array
(
[next] => https://localbitcoins.com/api/dashboard/closed/?order_by=-closed_at&start_at=2017-10-26+17%3U50%3A49%2B00%9A00
)
<?php
function localbitcoins_query($path, array $req = Array()) { 
   $key='yourkey';
   $secret='yoursecret';      

   $array_mt = explode(' ', microtime());   
   $nonce = $array_mt[1].substr($array_mt[0], 2, 6);   

   $get = "";
   if ($req) {
      $get=http_build_query($req);
   }
   $postdata=$nonce.$key.$path.$get; // NOTE: here $postdata goes without '?' char before the parameters!

   $sign = strtoupper(hash_hmac('sha256', $postdata, $secret)); 

   $headers = array(
      'Apiauth-Signature:'.$sign,
      'Apiauth-Key:'.$key,
      'Apiauth-Nonce:'.$nonce
   );
   $ch = null;
   $ch = curl_init('https://localbitcoins.com'.$path.( $get=="" ? "" : "?".$get)); // NOTE:  here it's necesary '?' char before the parameters!
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, TRUE);
   curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20);

   $res = curl_exec($ch);
   if ($res === false) throw new Exception('Curl error: '.curlerror($ch));
   $dec = json_decode($res, true);   
   if (!$dec) throw new Exception('Invalid data: '.$res);
   curl_close($ch);   
   return $dec;
}

$getinfo = array();
$api_endpoint = '/api/dashboard/closed/';
$array_params = array(    "order_by" => "-closed_at"
                        , "start_at" => "2019-08-14 18:00:26+00:00" 
                        );
$getinfo = localbitcoins_query($api_endpoint,$array_params);
echo "<pre>"; print_r($getinfo); echo "</pre>"; 
?