RGameShow
@RGameShow
В поисках ответов на глупые вопросы

Слишком много cURL при интеграции с Bitrix24, как собрать все и сделать в один cURL?

Сделали интеграцию 7 сайтов с bitrix 24. Формы отправляются по 5 секунд в среднем.
Сначала идет запрос создание контакта, потом создание лида, потом устанавливаем цену сервису, потом некоторым добавляем комментарии.... И все это запросы в cURL

Можно ли как то сократить это?
/*
 * Создаем лид
 */
public function createLeadAndSend(){
    $queryUrl = 'https://XXXX.bitrix24.ru/rest/XXXX/XXXX/crm.lead.add.json';
    $queryData = http_build_query(array(
        'fields' => array(
            'CONTACT_ID'=>$this->createContact(),
            'TITLE' => $this->post['title'],
            'NAME' => $this->post['fio'],
            'EMAIL' => array(
                array(
                    'VALUE' => $this->post['email'],
                    'VALUE_TYPE' => 'WORK'
                )
            ),
            'PHONE' => array(
                array(
                    'VALUE' => $this->post['phone'],
                    'VALUE_TYPE' => 'WORK'
                )
            ),
            'COMMENTS' => $this->post['comments'],
            'OPPORTUNITY' => $this->post['price'],
            'UF_CRM_1571212572' => $this->post['inn'],
            'UF_CRM_1571226484' => $this->post['tariff'],
            'UF_CRM_1574428927' => $this->arr_product_and_manager['product_id'],
            'CURRENCY_ID' => 'RUB',
            'QUANTITY' => 1,
            'SOURCE_ID' => $this->setIdSiteAppForm(),
            'ADDRESS_CITY' => $this->post['city'],
            'ASSIGNED_BY_ID' => $this->arr_product_and_manager['manager_id']
        ),
        'params' => array("REGISTER_SONET_EVENT" => "Y")
    ));

    $this->curl_result = $this->curl($queryUrl, $queryData);
    $result = json_decode($this->curl_result, 1);
    $leadID = $result["result"];

    //Добавляем цену к товару
    $this->addPriceLead($leadID);

    //Добавляем комментарии к определенному лиду
    if ($this->post['product_id'] == 'elba' && $this->post['posted_data']['_wpcf7'] == 3124) {
        $this->addCommentLead($leadID, '<b>КОММЕНТ</b>');
    }
}

/*
 * Добавляем цену к товару
 */
public function addPriceLead($leadID){
    $queryUrl = 'https://XXXX.bitrix24.ru/rest/XXXX/XXXX/crm.lead.productrows.set.json';
    $queryData = http_build_query(array(
        'id' => $leadID,
        'rows' => Array(
            Array(
                "PRODUCT_ID" => $this->arr_product_and_manager['product_id'],
                "PRICE" => $this->post['price'],
                "QUANTITY" => 1,
            ),
        ),
    ));
    $this->curl($queryUrl, $queryData);
}

/*
 * Создаем контакт
 */
public function createContact(){
    $queryUrl = 'https://XXXX.bitrix24.ru/rest/XXXX/XXXX/crm.contact.add.json';
    $queryData = http_build_query(array(
        'fields' => array(
            'NAME' => $this->post['fio'],
            'EMAIL' => array(
                array(
                    'VALUE' => $this->post['email'],
                    'VALUE_TYPE' => 'WORK'
                )
            ),
            'PHONE' => array(
                array(
                    'VALUE' => $this->post['phone'],
                    'VALUE_TYPE' => 'WORK'
                )
            ),
            'UF_CRM_5DA6EF1A6B1F4' => $this->post['inn'],
            'UF_CRM_1574428927' => $this->arr_product_and_manager['product_id'],
            'SOURCE_ID' => $this->setIdSiteAppForm(),
            'ADDRESS_CITY' => $this->post['city'],
            'ASSIGNED_BY_ID' => $this->arr_product_and_manager['manager_id']
        ),
        'params' => array("REGISTER_SONET_EVENT" => "Y")
    ));

    $this->curl_result = $this->curl($queryUrl, $queryData);
    $result = json_decode($this->curl_result, 1);
    return $result["result"];
}

/*
 * Добавляем комментарии к определенному лиду
 */
public function addCommentLead($leadID, $comment){
    $queryUrl = 'https://XXXX.bitrix24.ru/rest/XXXX/XXXX/crm.timeline.comment.add.json';
    $queryData = http_build_query(array(
        'fields' => Array(
            "ENTITY_ID" => $leadID,
            "ENTITY_TYPE" => "lead",
            "COMMENT" => $comment
        ),
    ));
    $this->curl($queryUrl, $queryData);
}

/*
 * Отправляем данные с помощью cURL
 */
public function curl($queryUrl, $queryData){
    $curl = curl_init();
    $curl_array = [CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_POST => 1, CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $queryUrl, CURLOPT_POSTFIELDS => $queryData];
    curl_setopt_array($curl, $curl_array);
    $result = curl_exec($curl);
    $this->postCurl($result);
    curl_close($curl);
    return $result;
}
  • Вопрос задан
  • 1475 просмотров
Решения вопроса 1
Ramapriya
@Ramapriya
Используйте класс CRest, там есть метод callBatch, позволяющий работать с пакетными запросами.

Если все методы должны быть вызваны последовательно друг за другом, callBatch сильно упростит ситуацию, потому что в Битрикс24 нельзя отправить более двух запросов в секунду.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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