|
7 | 7 |
|
8 | 8 | **Документация находится в процессе разработки.** |
9 | 9 |
|
| 10 | +# Содержание |
| 11 | + |
10 | 12 | <!-- MarkdownTOC levels="1,2,3,4,5,6" autoanchor="true" autolink="true" --> |
11 | 13 |
|
12 | 14 | - [Требования](#%D0%A2%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F) |
| 15 | +- [Класс `\App\Bitrix24\Bitrix24API`](#%D0%9A%D0%BB%D0%B0%D1%81%D1%81-appbitrix24bitrix24api) |
| 16 | + - [Описание общих методов класса](#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BE%D0%B1%D1%89%D0%B8%D1%85-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0) |
| 17 | + - [Дополнительные параметры](#%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B) |
| 18 | +- [Методы работы с сущностями Битрикс24](#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-%D1%81%D1%83%D1%89%D0%BD%D0%BE%D1%81%D1%82%D1%8F%D0%BC%D0%B8-%D0%91%D0%B8%D1%82%D1%80%D0%B8%D0%BA%D1%8124) |
| 19 | + - [Методы работы со сделками](#%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81%D0%BE-%D1%81%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0%D0%BC%D0%B8) |
| 20 | + - [Описание методов](#%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2) |
| 21 | + - [Обработка ошибок](#%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA) |
| 22 | +- [Примеры](#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B) |
| 23 | + - [Работа со сделками](#%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81%D0%BE-%D1%81%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0%D0%BC%D0%B8) |
13 | 24 | - [Автор](#%D0%90%D0%B2%D1%82%D0%BE%D1%80) |
14 | 25 | - [Лицензия](#%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F) |
15 | 26 |
|
|
21 | 32 | - PHP >= 7.0. |
22 | 33 | - Произвольный автозагрузчик классов, реализующий стандарт [PSR-4](https://www.php-fig.org/psr/psr-4/). |
23 | 34 |
|
| 35 | +<a id="%D0%9A%D0%BB%D0%B0%D1%81%D1%81-appbitrix24bitrix24api"></a> |
| 36 | +## Класс `\App\Bitrix24\Bitrix24API` |
| 37 | + |
| 38 | +Список общих методов класса: |
| 39 | + |
| 40 | +- `__construct(string $webhookURL)` |
| 41 | +- `request(string $function, array $params = []) :?array` |
| 42 | +- `getList(string $function, array $params = []) :\Generator` |
| 43 | +- `fetchList(string $function, array $params = []) :\Generator` |
| 44 | +- `batchRequest(array $commands, $halt = true) :array` |
| 45 | +- `buildCommands(string $function, array $items) :array` |
| 46 | +- `buildCommand(string $function, array $params) :string` |
| 47 | +- `getLastResponse() :?array` |
| 48 | + |
| 49 | +<a id="%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BE%D0%B1%D1%89%D0%B8%D1%85-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2-%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B0"></a> |
| 50 | +### Описание общих методов класса |
| 51 | + |
| 52 | +- `__construct(string $webhookURL)` |
| 53 | + Конструктор класса `Bitrix24API`. |
| 54 | + - `$webhookURL` - URL входящего вебхука Битрикс24. |
| 55 | + |
| 56 | +- `request(string $function, array $params = []) :?array` |
| 57 | + Отправляет запрос в API и возвращает ответ сервера. |
| 58 | + - `$function` - имя метода (функции) запроса; |
| 59 | + - `$params` - параметры запроса. |
| 60 | + |
| 61 | +- `getList(string $function, array $params = []) :\Generator` |
| 62 | + Загружает все сущности заданного типа. |
| 63 | + Возвращает объект типа `\Generator` для последующей выборки параметров загруженных сушностей. |
| 64 | + - `$function` - имя метода (функции) запроса; |
| 65 | + - `$params` - параметры запроса. |
| 66 | + |
| 67 | +- `fetchList(string $function, array $params = []) :\Generator` |
| 68 | + Загружает все сущности заданного типа. |
| 69 | + Возвращает объект типа `\Generator` для последующей выборки параметров загруженных сушностей. |
| 70 | + Реализует [быстрый метод](https://dev.1c-bitrix.ru/rest_help/rest_sum/start.php) загрузки при |
| 71 | + работе с большими объемами данных. |
| 72 | + - `$function` - имя метода (функции) запроса; |
| 73 | + - `$params` - параметры запроса. |
| 74 | + |
| 75 | +- `batchRequest(array $commands, $halt = true) :array` |
| 76 | + Отправляет пакет запросов в API. Возвращает ответ сервера. |
| 77 | + - `$commands` - пакет команд; |
| 78 | + - `$halt` - определяет прерывать ли последовательность запросов в случае ошибки. |
| 79 | + |
| 80 | +- `buildCommands(string $function, array $items) :array` |
| 81 | + Возвращает массив одинаковых команд для метода `batchRequest()`. |
| 82 | + - `$function` - имя метода (функции) запроса; |
| 83 | + - `$items` - массив полей запросов. |
| 84 | + |
| 85 | +- `buildCommand(string $function, array $params) :string` |
| 86 | + Возвращает строку одной команды пакета запросов для метода `buildCommands()`. |
| 87 | + - `$function` - имя метода (функции) запроса; |
| 88 | + - `$params` - массив параметров команды. |
| 89 | + |
| 90 | +- `getLastResponse() :?array` |
| 91 | + Возвращает последний ответ сервера. |
| 92 | + |
| 93 | +<a id="%D0%94%D0%BE%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D1%8B"></a> |
| 94 | +### Дополнительные параметры |
| 95 | + |
| 96 | +Дополнительные параметры доступны через публичные свойства класса `Bitrix24API`. |
| 97 | + |
| 98 | +Свойство | По умолчанию | Описание |
| 99 | +----------------------- | ------------------ | -------- |
| 100 | +`$batchSize` | 50 | Устанавливает количество команд в одном пакете запросов (batch) |
| 101 | +`$logger` | null | Хранит объект класса, выполняющего логирование запросов и ответов API. Например, `\App\DebugLogger` |
| 102 | +`$http` | `object \App\HTTP` | Хранит объект класса `\App\HTTP`, отправляющего запросы к API |
| 103 | + |
| 104 | +<a id="%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81-%D1%81%D1%83%D1%89%D0%BD%D0%BE%D1%81%D1%82%D1%8F%D0%BC%D0%B8-%D0%91%D0%B8%D1%82%D1%80%D0%B8%D0%BA%D1%8124"></a> |
| 105 | +## Методы работы с сущностями Битрикс24 |
| 106 | + |
| 107 | +Работа с сущностями Битрикс24 строится с помощью методов класса `Bitrix24API`. |
| 108 | + |
| 109 | +<a id="%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B-%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B-%D1%81%D0%BE-%D1%81%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0%D0%BC%D0%B8"></a> |
| 110 | +### Методы работы со сделками |
| 111 | + |
| 112 | +Список доступных методов: |
| 113 | + |
| 114 | +- `getDeal($dealId, array $with = []) :array` |
| 115 | +- `addDeal(array $fields = [], array $params = []) :int` |
| 116 | +- `updateDeal($dealId, array $fields = [], array $params = []) :int` |
| 117 | +- `deleteDeal($dealId) :int` |
| 118 | +- `getDealList(array $filter = [], array $select = [], array $order = []) :\Generator` |
| 119 | +- `fetchDealList(array $filter = [], array $select = [], array $order = []) :\Generator` |
| 120 | +- `addDeals(array $deals = [], array $params = []) :array` |
| 121 | +- `updateDeals(array $deals = [], array $params = []) :array` |
| 122 | +- `deleteDeals(array $dealIds = []) :array` |
| 123 | +- `setDealFile($dealId, $userFieldId, string $fileName, string $fileContent, bool $isBase64FileData = true) :int` |
| 124 | +- `setDealFiles($dealId, $userFieldId, array $files = [], bool $isBase64FileData = true) :int` |
| 125 | +- `getDealContactItems($dealId) :array` |
| 126 | +- `setDealContactItems($dealId, array $contacts) :array` |
| 127 | +- `getDealProductRows($dealId) :array` |
| 128 | +- `setDealProductRows($dealId, array $products) :array` |
| 129 | +- `getDealProductRowFields() :array` |
| 130 | +- `getDealFields() :array` |
| 131 | + |
| 132 | +<a id="%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%BE%D0%B2"></a> |
| 133 | +#### Описание методов |
| 134 | + |
| 135 | +- `getDeal($dealId, array $with = []) :array` |
| 136 | + Возвращает параметры сделки по ID. |
| 137 | + - `$dealId` - ID сделки; |
| 138 | + - `$with` - имена связанных сущностей, возвращаемых вместе со сделкой: |
| 139 | + - `CONTACTS` - контакты; |
| 140 | + - `PRODUCTS` - товарные позиции. |
| 141 | + |
| 142 | +- `addDeal(array $fields = [], array $params = []) :int` |
| 143 | + Добавляет новую сделку. Возвращает ID сделки. |
| 144 | + - `$fields` - набор полей сделки; |
| 145 | + - `$params` - набор параметров сделки. |
| 146 | + |
| 147 | +- `updateDeal($dealId, array $fields = [], array $params = []) :int` |
| 148 | + Обновляет существующую сделку. Возвращает ID сделки. |
| 149 | + - `$dealId` - ID сделки; |
| 150 | + - `$fields` - набор полей сделки; |
| 151 | + - `$params` - набор параметров сделки. |
| 152 | + |
| 153 | +- `deleteDeal($dealId) :int` |
| 154 | + Удаляет существующую сделку. Возвращает ID сделки. |
| 155 | + - `$dealId` - ID сделки. |
| 156 | + |
| 157 | +- `getDealList(array $filter = [], array $select = [], array $order = []) :\Generator` |
| 158 | + Загружает все сделки с возможностью фильтрации, сортировки и выборки полей. |
| 159 | + Возвращает объект типа `\Generator` для последующей выборки параметров загруженных сделок. |
| 160 | + - `$filter` - параметры фильтрации; |
| 161 | + - `$order` - параметры сортировки; |
| 162 | + - `$select` - параметры выборки полей. |
| 163 | + |
| 164 | +- `fetchDealList(array $filter = [], array $select = [], array $order = []) :\Generator` |
| 165 | + Загружает все сделки с возможностью фильтрации, сортировки и выборки полей. |
| 166 | + Возвращает объект типа `\Generator` для последующей выборки параметров загруженных сделок. |
| 167 | + Реализует [быстрый метод](https://dev.1c-bitrix.ru/rest_help/rest_sum/start.php) загрузки при |
| 168 | + работе с большими объемами данных. |
| 169 | + - `$filter` - параметры фильтрации; |
| 170 | + - `$order` - параметры сортировки; |
| 171 | + - `$select` - параметры выборки. |
| 172 | + |
| 173 | +- `addDeals(array $deals = [], array $params = []) :array` |
| 174 | + Пакетно добавляет новые сделки со связанными товарными позициями. Возвращает массив ID сделок. |
| 175 | + - `$deals` - массив наборов полей сделок со связанными товараными позициями `PRODUCTS`; |
| 176 | + - `$params` - набор параметров сделки. |
| 177 | + |
| 178 | +- `updateDeals(array $deals = [], array $params = []) :array` |
| 179 | + Пакетно обновляет существующие сделки со связанными товарными позициями. Возвращает массив ID сделок. |
| 180 | + - `$deals` - массив наборов полей сделок со связанными товарными позициями `PRODUCTS`; |
| 181 | + - `$params` - набор параметров сделки. |
| 182 | + |
| 183 | +- `deleteDeals(array $dealIds = []) :array` |
| 184 | + Пакетно удаляет сделки. Возвращает массив ID сделок. |
| 185 | + - `$dealIds` - набор ID сделок. |
| 186 | + |
| 187 | +- `setDealFile($dealId, $userFieldId, string $fileName, string $fileContent, bool $isBase64FileData = true) :int` |
| 188 | + Устанавливает файл в НЕ множественное пользовательское поле типа файл (файл нельзя удалить). |
| 189 | + Возвращает ID сделки. |
| 190 | + - `$dealId` - ID cделки; |
| 191 | + - `$userFieldId` ID НЕ множественного пользовательского поля в сделке ('UF_CRM_XXXXXXXXXX'); |
| 192 | + - `$fileName` - имя файла; |
| 193 | + - `$fileContent` - RAW данные файла; |
| 194 | + - `$isBase64FileData` - RAW данные файла закодированны BASE64. |
| 195 | + |
| 196 | +- `setDealFiles($dealId, $userFieldId, array $files = [], bool $isBase64FileData = true) :int` |
| 197 | + Устанавливает файлы во множественное пользовательское поле типа файл (файлы можно удалить). |
| 198 | + Возвращает ID сделки. |
| 199 | + - `$dealId` - ID cделки; |
| 200 | + - `$userFieldId` ID НЕ множественного пользовательского поля в сделке ('UF_CRM_XXXXXXXXXX'); |
| 201 | + - `$files` - массив параметров файлов ([ [ < Имя файла >, < RAW данные файла > ], ... ]) (пустой массив для удаления всех файлов); |
| 202 | + - `$isBase64FileData` - RAW данные файла закодированны BASE64. |
| 203 | + |
| 204 | +- `getDealContactItems($dealId) :array` |
| 205 | + Возвращает массив параметров контактов, связанных со сделкой по ID сделки. |
| 206 | + - `$dealId` - ID cделки. |
| 207 | + |
| 208 | +- `setDealContactItems($dealId, array $contacts) :array` |
| 209 | + Устанавливает контакты, связанные со сделкой по ID сделки. Возвращает ответ сервера. |
| 210 | + - `$dealId` - ID cделки; |
| 211 | + - `$contacts` - массив параметров контактов. |
| 212 | + |
| 213 | +- `setDealProductRows($dealId, array $products) :array` |
| 214 | + Устанавливает товарые позиции, связанные со сделкой по ID сделки. Возвращает ответ сервера. |
| 215 | + - `$dealId` - ID cделки; |
| 216 | + - `$products` - массив параметров товарных позиций. |
| 217 | + |
| 218 | +- `getDealProductRows($dealId) :array` |
| 219 | + Возвращает массив параметров товарных позиций, связанных со сделкой по ID сделки. |
| 220 | + - `$dealId` - ID cделки. |
| 221 | + |
| 222 | +- `getDealProductRowFields() :array` |
| 223 | + Возвращает описание полей товарных позиций. |
| 224 | + |
| 225 | +- `getDealFields() :array` |
| 226 | + Возвращает описание полей cделки, в том числе пользовательских. |
| 227 | + |
| 228 | +<a id="%D0%9E%D0%B1%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0-%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA"></a> |
| 229 | +### Обработка ошибок |
| 230 | + |
| 231 | +При возникновении ошибок при запросах к API выбрасывается исключение типа `Bitrix24APIException`. |
| 232 | + |
| 233 | +<a id="%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B"></a> |
| 234 | +## Примеры |
| 235 | + |
| 236 | +<a id="%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81%D0%BE-%D1%81%D0%B4%D0%B5%D0%BB%D0%BA%D0%B0%D0%BC%D0%B8"></a> |
| 237 | +### Работа со сделками |
| 238 | + |
| 239 | +```php |
| 240 | +use \App\Bitrix24\Bitrix24API; |
| 241 | + |
| 242 | +try { |
| 243 | + |
| 244 | + $webhookURL = 'https://www.example.com/rest/1/u7ngxagzrhpuj31a/'; |
| 245 | + $bx24 = new Bitrix24API($webhookURL); |
| 246 | + |
| 247 | + // Добавляем новую сделку |
| 248 | + $dealId = $bx24->addDeal([ |
| 249 | + 'TITLE' => 'Новая сделка №1', |
| 250 | + 'COMPANY_ID' => 6, |
| 251 | + 'CONTACT_ID' => 312 |
| 252 | + ]); |
| 253 | + print_r($dealId); |
| 254 | + |
| 255 | + // Устанавливаем набор связанных контактов |
| 256 | + $bx24->setDealContactItems($dealId, [ |
| 257 | + [ 'CONTACT_ID' => 313 ], |
| 258 | + [ 'CONTACT_ID' => 454 ] |
| 259 | + ]); |
| 260 | + |
| 261 | + // Устанавливаем набор связанных товарных позиций |
| 262 | + $bx24->setDealProductRows($dealId, [ |
| 263 | + [ 'PRODUCT_ID' => 1689, 'PRICE' => 1500.00, 'QUANTITY': 2 ], |
| 264 | + [ 'PRODUCT_ID' => 1860, 'PRICE' => 500.00, 'QUANTITY': 15 ] |
| 265 | + ]); |
| 266 | + |
| 267 | + // Обновляем существующую сделку |
| 268 | + $bx24->updateDeal($dealId, [ |
| 269 | + 'TITLE' => 'Новая сделка №12' |
| 270 | + ]); |
| 271 | + |
| 272 | + // Загружаем сделку по ID вместе со связанными товарами и контактами одним запросом |
| 273 | + $deal = $bx24->getDeal($dealId, [ 'PRODUCTS', 'CONTACTS' ]); |
| 274 | + print_r($deal); |
| 275 | + |
| 276 | + // Удаляем существующую сделку |
| 277 | + $bx24->deleteDeal($dealId); |
| 278 | + |
| 279 | + // Загружаем все сделки используя быстрый метод при работе с большими объемами данных |
| 280 | + $generator = $bx24->fetchDealList(); |
| 281 | + foreach ($generator as $deals) { |
| 282 | + foreach($deals as $deal) { |
| 283 | + print($deal); |
| 284 | + } |
| 285 | + } |
24 | 286 |
|
| 287 | + // Пакетно добавляем сделки вместе с товарными позициями |
| 288 | + $ids = $bitrix->addDeals([ |
| 289 | + [ |
| 290 | + 'TITLE' => 'Новая сделка №1121', |
| 291 | + 'COMPANY_ID' => 6, |
| 292 | + 'CONTACT_ID' => 312, |
| 293 | + 'PRODUCTS' => [ |
| 294 | + [ "PRODUCT_ID" => 27, "PRICE" => 100.00, "QUANTITY" => 11 ], |
| 295 | + ] |
25 | 296 |
|
| 297 | + ], |
| 298 | + [ |
| 299 | + 'TITLE' => 'Новая сделка №1122', |
| 300 | + 'COMPANY_ID' => 6, |
| 301 | + 'PRODUCTS' => [ |
| 302 | + [ "PRODUCT_ID" => 28, "PRICE" => 200.00, "QUANTITY" => 22 ], |
| 303 | + [ "PRODUCT_ID" => 27, "PRICE" => 200.00, "QUANTITY" => 11 ], |
| 304 | + ] |
| 305 | + ] |
| 306 | + ]); |
| 307 | + print_r($ids); |
26 | 308 |
|
| 309 | +} catch (\App\Bitrix24\Bitrix24APIException $e) { |
| 310 | + printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage()); |
| 311 | +} |
| 312 | +``` |
27 | 313 |
|
28 | 314 | <a id="%D0%90%D0%B2%D1%82%D0%BE%D1%80"></a> |
29 | 315 | ## Автор |
|
0 commit comments