Эффективная интеграция и кастомизация функционала в Битрикс24 часто требует работы на уровне API. Сегодня мы подробно рассмотрим «Добавить заказ sale.order.add». Вы узнаете экспертные методики работы с sale.order.add и научитесь избегать типичных ошибок начинающих разработчиков.
Добавить заказ sale.order.add
> Scope: sale
>
> Кто может выполнять метод: администратор
Метод sale.order.add предназначен для добавления заказа.
Параметры метода
Названиетип | Описание |
|---|---|
fieldsobject | Значения полей для создания заказа |
Параметр fields
Названиетип | Описание |
|---|---|
lidstring | Идентификатор сайта, на котором будет использоваться данный тип плательщика. Имеет постоянное значение ‘s1’ |
personTypeIdsale_person_type.id | Идентификатор типа плательщика |
currencystring | Валюта. Список валют можно получить через метод crm.currency.list |
pricedouble | Цена |
discountValuedouble | Значение скидки |
statusIdsale_status.id | Идентификатор статуса заказа |
empStatusIduser.id | Идентификатор пользователя, изменившего статус заказа |
dateInsertdatetime | Дата создания заказа |
markedstring | Флаг маркировки. Признак того, является ли отгрузка отмеченной как проблемная. Значение Y ставится автоматически, если при сохранении произошла ошибка.— По умолчанию устанавливается |
empMarkedIduser.id | Идентификатор пользователя, поставившего маркировку |
reasonMarkedstring | Причина, по которой заказ был промаркирован |
userDescriptionstring | Комментарий покупателя к заказу |
additionalInfostring | Устаревший. Дополнительная информация |
commentsstring | Комментарий менеджера к заказу |
responsibleIduser.id | Идентификатор пользователя, ответственного за заказ |
recurringIdinteger | Идентификатор продления подписки |
lockedByuser.id | Актуально только для коробочной версии. Идентификатор пользователя, заблокировавшего заказ. Заказ блокируется в административной панели, когда пользователь открывает детальную карточку заказа |
recountFlagstring | Устаревший. Флаг пересчёта. — По умолчанию устанавливается Y |
affiliateIdinteger | Актуально только для коробочной версии. Идентификатор аффилиата |
updated1cstring | Обновлён ли через 1С. — По умолчанию устанавливается |
orderTopicstring | Устаревший. Тема заказа |
xmlIdstring | Внешний идентификатор |
id1cstring | Идентификатор в 1С |
version1cstring | Версия в 1с |
externalOrderstring | Заказ из внешней системы или нет. — По умолчанию устанавливается |
canceledstring | Был ли отменен заказ. — По умолчанию устанавливается |
empCanceledIduser.id | Идентификатор пользователя, отменившего заказ |
reasonCanceledstring | Причина отмены |
userIduser.id | Идентификатор клиента |
Примеры кода
- cURL (Webhook)
-X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"fields":{"lid":"s1","personTypeId":1,"currency":"RUB","price":100,"discountValue":10,"statusId":"N","empStatusId":1,"dateInsert":"2024-03-01T14:00:00","marked":"Y","empMarkedId":1,"reasonMarked":"","userDescription":"","additionalInfo":"","comments":"","companyId":1,"responsibleId":1,"recurringId":1,"lockedBy":1,"recountFlag":"N","affiliateId":1,"updated1c":"N","orderTopic":"","xmlId":"","id1c":"","version1c":"","externalOrder":"N","canceled":"Y","empCanceledId":1,"reasonCanceled":"","userId":1}}' \
https://**put_your_bitrix24_address**/rest/**put_your_user_id_here**/**put_your_webbhook_here**/sale.order.add- cURL (OAuth)
-X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{"fields":{"lid":"s1","personTypeId":1,"currency":"RUB","price":100,"discountValue":10,"statusId":"N","empStatusId":1,"dateInsert":"2024-03-01T14:00:00","marked":"Y","empMarkedId":1,"reasonMarked":"","userDescription":"","additionalInfo":"","comments":"","companyId":1,"responsibleId":1,"recurringId":1,"lockedBy":1,"recountFlag":"N","affiliateId":1,"updated1c":"N","orderTopic":"","xmlId":"","id1c":"","version1c":"","externalOrder":"N","canceled":"Y","empCanceledId":1,"reasonCanceled":"","userId":1},"auth":"**put_access_token_here**"}' \
https://**put_your_bitrix24_address**/rest/sale.order.add- JS
try
{
const response = await $b24.callMethod(
'sale.order.add',
{
fields: {
lid: 's1',
personTypeId: 1,
currency: 'RUB',
price: 100,
discountValue: 10,
statusId: 'N',
empStatusId: 1,
dateInsert: '2024-03-01T14:00:00',
marked: 'Y',
empMarkedId: 1,
reasonMarked: '',
userDescription: '',
additionalInfo: '',
comments: '',
companyId: 1,
responsibleId: 1,
recurringId: 1,
lockedBy: 1,
recountFlag: 'N',
affiliateId: 1,
updated1c: 'N',
orderTopic: '',
xmlId: '',
id1c: '',
version1c: '',
externalOrder: 'N',
canceled: 'Y',
empCanceledId: 1,
reasonCanceled: '',
userId: 1,
}
}
);
const result = response.getData().result;
console.log(result);
}
catch(error)
{
console.error(error);
}- PHP
try {
$response = $b24Service
->core
->call(
'sale.order.add',
[
'fields' => [
'lid' => 's1',
'personTypeId' => 1,
'currency' => 'RUB',
'price' => 100,
'discountValue' => 10,
'statusId' => 'N',
'empStatusId' => 1,
'dateInsert' => '2024-03-01T14:00:00',
'marked' => 'Y',
'empMarkedId' => 1,
'reasonMarked' => '',
'userDescription' => '',
'additionalInfo' => '',
'comments' => '',
'companyId' => 1,
'responsibleId' => 1,
'recurringId' => 1,
'lockedBy' => 1,
'recountFlag' => 'N',
'affiliateId' => 1,
'updated1c' => 'N',
'orderTopic' => '',
'xmlId' => '',
'id1c' => '',
'version1c' => '',
'externalOrder' => 'N',
'canceled' => 'Y',
'empCanceledId' => 1,
'reasonCanceled' => '',
'userId' => 1,
],
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error adding order: ' . $e->getMessage();
}- BX24.js
BX24.callMethod(
'sale.order.add',
{
fields: {
lid: 's1',
personTypeId: 1,
currency: 'RUB',
price: 100,
discountValue: 10,
statusId: 'N',
empStatusId: 1,
dateInsert: '2024-03-01T14:00:00',
marked: 'Y',
empMarkedId: 1,
reasonMarked: '',
userDescription: '',
additionalInfo: '',
comments: '',
companyId: 1,
responsibleId: 1,
recurringId: 1,
lockedBy: 1,
recountFlag: 'N',
affiliateId: 1,
updated1c: 'N',
orderTopic: '',
xmlId: '',
id1c: '',
version1c: '',
externalOrder: 'N',
canceled: 'Y',
empCanceledId: 1,
reasonCanceled: '',
userId: 1,
}
},
function(result)
{
if(result.error())
console.error(result.error());
else
console.log(result.data());
}
);- PHP CRest
require_once('crest.php');
$result = CRest::call(
'sale.order.add',
[
'fields' => [
'lid' => 's1',
'personTypeId' => 1,
'currency' => 'RUB',
'price' => 100,
'discountValue' => 10,
'statusId' => 'N',
'empStatusId' => 1,
'dateInsert' => '2024-03-01T14:00:00',
'marked' => 'Y',
'empMarkedId' => 1,
'reasonMarked' => '',
'userDescription' => '',
'additionalInfo' => '',
'comments' => '',
'companyId' => 1,
'responsibleId' => 1,
'recurringId' => 1,
'lockedBy' => 1,
'recountFlag' => 'N',
'affiliateId' => 1,
'updated1c' => 'N',
'orderTopic' => '',
'xmlId' => '',
'id1c' => '',
'version1c' => '',
'externalOrder' => 'N',
'canceled' => 'Y',
'empCanceledId' => 1,
'reasonCanceled' => '',
'userId' => 1,
]
]
);
echo '<PRE>';
print_r($result);
echo '</PRE>';Обработка ответа
HTTP-статус: 200
{
"result": {
"order": {
"accountNumber": "455",
"additionalInfo": "",
"affiliateId": 1,
"canceled": "Y",
"clients": [],
"comments": "",
"companyId": 1,
"currency": "RUB",
"dateCanceled": "2024-04-12T13:50:21+03:00",
"dateInsert": "2024-03-01T13:00:00+03:00",
"dateMarked": "2024-04-12T13:50:21+03:00",
"dateStatus": "2024-04-12T13:50:21+03:00",
"dateUpdate": "2024-04-12T13:50:21+03:00",
"deducted": "N",
"discountValue": 10,
"empCanceledId": 1,
"empMarkedId": 1,
"empStatusId": 1,
"externalOrder": "N",
"id": 299,
"id1c": "",
"lid": "s1",
"lockedBy": "1",
"marked": "Y",
"orderTopic": "",
"payed": "N",
"personTypeId": 1,
"personTypeXmlId": "",
"price": 100,
"reasonCanceled": "",
"reasonMarked": "",
"recountFlag": "N",
"recurringId": "1",
"requisiteLink": [],
"responsibleId": 1,
"statusId": "N",
"statusXmlId": "",
"updated1c": "N",
"userDescription": "",
"userId": 1,
"version1c": "",
"xmlId": ""
}
},
"time": {
"start": 1712922620.724857,
"finish": 1712922623.393783,
"duration": 2.6689260005950928,
"processing": 2.210068941116333,
"date_start": "2024-04-12T14:50:20+03:00",
"date_finish": "2024-04-12T14:50:23+03:00"
}
}Возвращаемые данные
Названиетип | Описание |
|---|---|
resultobject | Корневой элемент ответа |
ordersale_order | Объект с информацией о добавленном заказе |
timetime | Информация о времени выполнения запроса |
Обработка ошибок
HTTP-статус: 400
{
"error":200040300020,
"error_description":"Access Denied"
}Возможные коды ошибок
| Код | Описание |
|---|---|
200040300020 | Недостаточно прав для добавления заказа |
100 | Не указан или пустой параметр fields |
0 | Не переданы обязательные поля |
0 | Другие ошибки (например, фатальные ошибки) |
- [](./sale-order-update)
- [](./sale-order-get)
- [](./sale-order-list)
- [](./sale-order-delete)
- [](./sale-order-get-fields)
💡 Экспертное мнение и рекомендации
Ключевые выводы по теме «Добавить заказ sale.order.add»:
Использование современных стандартов D7 при работе с sale.order.add позволяет писать чистый, масштабируемый и безопасный код. Не забывайте обрабатывать исключения (try/catch) и проверять права доступа текущего пользователя перед выполнением критических операций.
Похожая задача в бизнесе?
Помогу автоматизировать процессы и внедрить ИИ
Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.
или на почту: gorandvas@yandex.ru