@dreamt

Как получить id уникальных сделок по API v2?

В старой версии API v2 AmoCRM имеется возможность получать сделки с лимитом 500, при таком запросе
$link='https://'.$this->subdomain.'.amocrm.ru/api/v2/leads?limit_rows=500&limit_offset=2';
/*получил сделки*/
$idArr = array();
foreach($leadsArr as $lead){
     пушу в $idArr id-шники сделок
}

возможно ли построить запрос, если имеется множество воронок 5-10, в каждой воронке по 1000-3000 сделок, как осуществить выборку всех только уникальных не повторяющихся сделок по запросу из всех воронок и не пропустить не одну из существующих сделок, потому что с параметром limit_offset=2 или же например limit_offset=3 всё равно попадаются повторяющиеся сделки, когда вывожу id-шники этих сделок, есть ли решение ? может кто сталкивался
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@dreamt Автор вопроса
<?php
$subdomain = 'test';
$offset = 0;
$size = 500;
$link = "https://$subdomain.amocrm.ru/api/v2/leads";

$temp = [];
do {
    $res = request($link, 'USER_LOGIN', 'USER_HASH', [
        'limit_rows' => $size,
        'limit_offset' => $offset
    ]);
    $offset += $size;
    if ($itsOk = ($res['code'] === 200)) {
        $temp[] = $res['response']['_embedded']['items'];
    }
} while ($itsOk);

$leads = array_merge([], ...$temp);
$leadsIds = array_column($leads, 'id');

var_dump($leadsIds);

/* Для API-Key */
function request($link, $user_login, $user_hash, $params = [])
{
    $params['USER_LOGIN'] = $user_login;
    $params['USER_HASH'] = $user_hash;
    $tries = 0;
    do {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, $link . '?' . http_build_query($params));
        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        $out = curl_exec($curl);
        $code = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);
        if ($code === 429) {
            if ($tries++ > 3) {
                throw new RuntimeException('Превышено допустимое количество запросов в секунду');
            }
            sleep(1);
        }
    } while ($code === 429);
    return ['code' => $code, 'response' => json_decode($out, 1)];
}

/* Для OAuth
function request($link, $access_token, $params = [])
{
    $tries = 0;
    do {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_URL, $link . '?' . http_build_query($params));
        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $access_token));
        $out = curl_exec($curl);
        $code = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE);
        curl_close($curl);
        if ($code === 429) {
            if ($tries++ > 3) {
                throw new RuntimeException('Превышено допустимое количество запросов в секунду');
            }
            sleep(1);
        }
    } while ($code !== 429);
    return ['code' => $code, 'response' => json_decode($out, 1)];
}
*/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы