Ответы пользователя по тегу RESTful API
  • Каким образом в CRM Битрикс24 (коробочный) можно получать системные события типа "При удалении сделки" (onCrmDealDelete)?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Документацию https://dev.1c-bitrix.ru/ уже несколько дней перелопачиваю,


    В официальной документации сказано про init.php, под подписки на события Есть так же куча неофициальных документаций и статей где и как размещать свой код.

    в какой из системных файлов дописать код выцепляющий нужные мне события


    Единого перечня событий нет, т.е. тут только гуглить и искать по системе.
    Ответ написан
    Комментировать
  • Bitrix24 как вывести варицию продукта?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Дело в том что "Товар" из CRM и "Товар" из Интернет-магазина это не один и тот же товар исторически.
    Попробуйте работать с методам товаров из интернет-магазиина
    Ответ написан
    Комментировать
  • Как правильно собрать batch-запрос на получение товаров сразу нескольких сделок, количество которых изначально неизвестно?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Как указать в запросе, что этот индекс должен изменяться просто динамически?


    Такой возможности в Битрикс24 нет.

    Дело кроется в несколько ином видении проблематики. Когда вы выполняете запрос на получения количества он возвращает вам не более 50 элементов с постраничной, но батч это всего 50 запросов, то есть если бы такой механизм имел место, то батч был бы резиновым, так как по факту должен выполнить 51 запрос (1 на получение списка и еще 50 на получение каждого элемента). Каким образом должен был бы себя вести батч-запрос когда вы указали 3 запроса? Например получение списка сделок, получение конкретных сделок и получение какого-нибудь справочника? Выполнить 52 запроса? Нет, это фантастика.

    Какой хак можно использовать?
    Можно самому генерировать запросы на основании хака.
    Так как в батче результат запроса выдается порядковым номером (если не указано иное), то они всегда будут в диапазоне от 0 до 49.
    Для примера мы хотим получить 10 сделок из постранички одним запросом, тогда можно отправить следующий батч-запрос:

    'halt' => 0,
    'cmd'  => [
    	'deals' => 'crm.deal.list?filter[STAGE_ID]=PREPAYMENT_INVOICE&filter[>ID]=0&limit=10',
    	'products_0' => 'crm.deal.productrows.get?id=$result[deals][0][ID]',
    	'products_1' => 'crm.deal.productrows.get?id=$result[deals][1][ID]',
    	...
    	'products_8' => 'crm.deal.productrows.get?id=$result[deals][8][ID]',
    	'products_9' => 'crm.deal.productrows.get?id=$result[deals][9][ID]',
    ]


    Когда мы проитерируем "products_*", мы получим последний обработанный ID (для примера это будет 123456) и сможем выполнить следующий батч-запрос:
    'halt' => 0,
    'cmd'  => [
    	'deals' => 'crm.deal.list?filter[STAGE_ID]=PREPAYMENT_INVOICE&filter[>ID]=123456&limit=10',
    	'products_0' => 'crm.deal.productrows.get?id=$result[deals][0][ID]',
    	'products_1' => 'crm.deal.productrows.get?id=$result[deals][1][ID]',
    	...
    	'products_8' => 'crm.deal.productrows.get?id=$result[deals][8][ID]',
    	'products_9' => 'crm.deal.productrows.get?id=$result[deals][9][ID]',
    ]


    Но вы в любом случае должны понимать что чем больше данных будет возвращать ваш батч-запрос тем он мендленнее будет выполняться, поэтому в crm.deal.list рекомендую так же ограничить список получаемых полей.
    Ответ написан
    1 комментарий
  • Почему не обновляются значения списка в битрикс через REST API?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вот и ошибка.

    В поле `LIST` автор пытается отправить json структуру, в то время как битрикс ожидает HTTP параметры.
    Таким образом его исходный запрос:
    https://domain.bitrix24.ua/rest/321/apicode/crm.deal.userfield.update.json?ID=223&LIST=[{"id": "49", "DEL": "Y"}]


    Должен выглядеть следующим образом:
    https://domain.bitrix24.ua/rest/321/apicode/crm.deal.userfield.update.json?id=223&LIST[0][ID]=49&LIST[0][DEL]=Y


    Либо, установить заголовок отправляемой информации в javascript и отравить json:
    {
    	"id": 223,
    	"LIST": [{"id": "49", "DEL": "Y"}]
    }
    Ответ написан
    Комментировать
  • Crest получить список лидов?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Что касается постранички, попробуйте так:
    $result = CRest::call(
        'crm.lead.list',
        [
            'filter' => [
                ...
            ],
            'select' => [
                ...
            ],
            'start' => 50
        ]
    );


    В иделале бы вообще выводить не порциями а заданым числов

    Максимальное количество элементов в списочных методах - 50, можно меньше (см. limit-ключ), но больше нельзя.

    а еще более идеальный случай получать сразу csv файл

    Так можно только через веб-интерфейс
    Ответ написан
    4 комментария
  • Как по сделке получить историю статусов с датой в апи битрикса?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    На момент написания комментария историю сделки и историю переходов между стадиями сделки через REST Api получить нельзя.
    Для коробочной версии можно использовать:
    \Bitrix\Crm\History\Entity\DealStageHistoryTable - data mapper для историй состояния (переходы между стадиями)
    CCrmEvent - для обработки истории
    Bitrix\Crm\Timeline\TimelineEntry - для записей в timeline
    Ответ написан
  • Из за чего возникает ошибка Internal server error при попытке отправить POST через CURL для оплаты частями от Privat Bank?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Окей.

    'partsCount' => 5,

    partsCount Integer notNull, min=2, max=25 Количество частей на которые делится сумма транзакции (Для заключения кредитного договора) Должно быть > 1.


    'amount' => 2,
    amount Да Double notNull, Min=300, Max=50 000 Окончательная сумма покупки

    Минимальная сумма 300, у вас 2.
    Далее, вы хотите чтобы 2 разделилось каким-то образом на 5?
    Правильно ли я понимаю, что вы хотите чтобы пользователь провел 5 транзакций по 40 копеек?

    Кроме того - у тебя еще и ошибка в сигнатуре:
    'signature' => base64_encode ( SHA1 ( '75bef16bfdce4d0e9c0ad5a19b9940df'.'4AAD1369CF734B64B70F'.'12211212121'.' 200'.' 5'.' PP'.'https://adsasd'.'https://saddsa'.' test1200'.' 75bef16bfdce4d0e9c0ad5a19b9940df' ))

    Если внимательно посмотришь - у тебя пробелы перед 200, 5 и PP стоят.
    Далее: у тебя есть параметр 'recipientId', который ты передаешь, но в хеш-сумме он остутствует, а по правилам должен быть. Либо убирай, либо добавляй в формирование.

    Поделаешь то что нужно и получишь другую ошибку:
    Array
    (
        [orderId] => 12211212121
        [signature] => +JYghcAp9oIQq3xR/Zn1PftEvQ8=
        [state] => FAIL
        [message] => bad value: Scheme not found for given store
        [storeId] => 4AAD1369CF734B64B70F
    )


    Но это все потому, что scheme - это Идентификатор схемы. Выделяется Банком. По умолчанию не передается.

    Удаляешь его и получаешь заветное:
    Array
    (
        [orderId] => 12211212121
        [signature] => S4cN/oBUIIJeHlcJgTTM+gcZddQ=
        [state] => FAIL
        [message] => bad value: Payment with sent orderId already exists
        [storeId] => 4AAD1369CF734B64B70F
    )


    А это потому, что кто-то уже прогнал твой запрос через api или через веб-морду. Меняешь orderid и получаешь заветное:
    Array
    (
        [orderId] => fdsa1
        [signature] => x2m4GaLFv3ptcxZLynRzwuy/t5g=
        [token] => ADFEDB2FB0C7485CB968148D4BFD6B5A
        [state] => SUCCESS
        [storeId] => 4AAD1369CF734B64B70F
    )
    Ответ написан
    1 комментарий
  • Как верно отрабатывать ошибки для ответа API?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А если используется rest, то можно возвращать просто текст и 400 ошибку.
    Ответ написан
    Комментировать