Базовые настройки интернет-магазина
- Настроить магазин с нуля
- Указать сайт-магазин и валюту по умолчанию
- Определить обязательный минимум
- Создать тип плательщика
- Создать группу свойств заказа
- Создать свойства заказа
- Добавить собственный статус заказа или доставки
- Создать компанию
- Настроить службы доставки
- Настроить платежные системы
- Получить данные для дальнейшей работы
- Проверить настройки перед созданием заказа
- Продолжить изучение
Базовые настройки задают контекст заказа: где оформляется покупка, кто покупатель, как принять оплату и доставить товар. При программном оформлении заказа код использует идентификаторы этих настроек вместо ручного выбора в административном интерфейсе.
Модель заказа описана в статье Схема работы интернет-магазина и основные объекты.
Чтобы работать с API интернет-магазина, подключите модуль sale. Для сценариев с валютами нужен модуль currency, а для цен товаров, НДС, единиц измерения и округления — модуль catalog.
Настроить магазин с нуля
Перед созданием заказа настройте данные, от которых зависят оформление, оплата и доставка. Если настройка уже есть в административном интерфейсе, не создавайте запись повторно из кода. Получите существующую настройку и используйте ее идентификатор.
Последовательность подготовки:
-
Определите сайт для оформления заказа и укажите сайт-магазин в настройках модуля. Идентификатор сайта понадобится в заказе, типах плательщиков, свойствах заказа, доставках и оплатах.
-
Настройте каталог: товары, типы цен, НДС, единицы измерения и доступ к ценам. Если заказ должен учитывать остатки, резервирование или списание, подготовьте склады. Настройки каталога относятся к модулю
catalogи описаны в статьях Базовые настройки каталога и Складской учет. -
Подготовьте товар с ценой в нужной валюте. Валюта товара попадет в корзину и дальше перейдет в заказ.
-
Создайте тип плательщика. Он определит, какие свойства заказа нужно заполнять покупателю.
-
Создайте группы и свойства заказа. Добавьте свойства, обязательные для выбранного типа плательщика и сценария. Для доставки обычно нужны адрес или местоположение.
-
Настройте хотя бы одну службу доставки, если заказ должен содержать отгрузку.
-
Настройте хотя бы одну платежную систему, если заказ должен содержать оплату.
-
Создайте компанию, если оплаты, доставки, кассы или документы должны работать от имени конкретного юридического лица продавца.
-
Проверьте, что код может получить идентификаторы, которые использует сценарий: тип плательщика, свойства заказа, а при необходимости — службу доставки, платежную систему и компанию.
Товары, доставки, оплаты, кассы и налоги настраиваются в отдельных сценариях: Доставка и отгрузки, Оплаты и платежные системы, Кассы и чеки и Местоположения и налоги.
Указать сайт-магазин и валюту по умолчанию
Перед созданием заказов проверьте параметры модуля sale в разделе Настройки > Настройки продукта > Настройки модулей > Интернет-магазин.
-
Указать сайты, которые являются магазинами — отметьте сайты, на которых оформляются заказы. Сайт нужно указать даже в системе с одним сайтом.
-
Валюта по умолчанию — задает валюту для представления стоимости товаров, суммы продаж и других данных в административном разделе. Настройка не заменяет валюту цены товара.
-
Валюта в дополнительных параметрах сайта — задает валюту публичной части сайта. Если цена товара задана в другой валюте, модуль использует настройки валют для пересчета.
Эти параметры можно задать через код. В примере:
-
$siteId— идентификатор сайта, -
$currency— код валюты для настройки магазина.
Замените s1 и RUB на собственные значения.
if (!\Bitrix\Main\Loader::includeModule('sale'))
{
throw new \RuntimeException('Модуль sale не установлен');
}
$siteId = 's1';
$currency = 'RUB';
\Bitrix\Main\Config\Option::set('sale', 'default_currency', $currency);
\Bitrix\Main\Config\Option::set('sale', 'SHOP_SITE_' . $siteId, $siteId);
$siteCurrency = \Bitrix\Sale\Internals\SiteCurrencyTable::getByPrimary($siteId)->fetch();
if ($siteCurrency)
{
$result = \Bitrix\Sale\Internals\SiteCurrencyTable::update($siteId, [
'CURRENCY' => $currency,
]);
}
else
{
$result = \Bitrix\Sale\Internals\SiteCurrencyTable::add([
'LID' => $siteId,
'CURRENCY' => $currency,
]);
}
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
Параметр default_currency задает валюту по умолчанию, SHOP_SITE_s1 отмечает сайт s1 как магазин, а SiteCurrencyTable сохраняет валюту публичной части сайта.
Методы Option::set() не возвращают объект результата, поэтому код проверяет результат только после сохранения валюты сайта.
Учесть валюту цены товара
Цена товара хранит свою валюту в модуле catalog. Заказ не получает ее из настроек магазина напрямую. Код берет значение из цены товара или торгового предложения.
При добавлении товара в корзину позиция получает цену и валюту товара. Затем это значение участвует в суммах заказа, оплате и доставке.
Если корзина создана, берите значение из ее позиции. Если корзины нет, передайте в Order::create() код из цены товара. При отличии от валюты публичной части сайта модуль выполнит пересчет по настройкам валют.
Товары, цены и валюты описаны в материале Базовые настройки каталога.
Определить обязательный минимум
Не все настройки нужны каждому магазину. Для создания заказа подготовьте сайт, валюту, тип плательщика и товар с ценой. Заполните только те свойства заказа, которые обязательны для выбранного типа плательщика и текущего сценария.
Платежная система нужна, если на текущем этапе создается оплата. Служба доставки и адресные свойства нужны, если заказ содержит пользовательскую отгрузку с доставкой. Заказ можно впервые сохранить без оплаты и пользовательской отгрузки, а затем добавить их отдельным изменением через коллекции заказа.
Варианты первого сохранения описаны в разделе Создать оплату и отгрузку независимо.
|
Сценарий |
Что добавить к общему минимуму |
Что можно отложить |
|
Цифровой товар с немедленной оплатой |
Платежную систему и обязательные свойства выбранного типа плательщика |
Службы доставки, адресные свойства, заявки в транспортные службы |
|
Заказ с отложенной оплатой и доставкой |
Обязательные свойства выбранного типа плательщика |
Платежную систему, службу доставки и адресные свойства до этапа, когда появятся оплата и отгрузка |
|
Физический товар с доставкой |
Службу доставки, адрес или местоположение. Если заказ должен учитывать остатки или списание, нужны склады |
Собственные обработчики доставки, дополнительные услуги доставки, сложные статусы |
|
Заказ юридического лица |
Тип плательщика для юридического лица, реквизиты в свойствах заказа, компанию продавца |
Правила компаний, кассы, печатные формы и документы, если они не нужны в первом сценарии |
|
Магазин с доставкой, кассами и фискализацией |
Службу доставки, компанию, кассу и правила печати чеков |
Собственные платежные обработчики, собственные обработчики доставки и сложные правила компаний |
Создать тип плательщика
Тип плательщика определяет набор свойств заказа, ограничения оплат и доставок, бизнес-смыслы платежных документов. Для физического и юридического лица обычно создают разные типы плательщиков.
Создайте тип плательщика через \Bitrix\Sale\Internals\PersonTypeTable::add(). Перед созданием проверьте, нет ли типа плательщика с таким кодом.
Поля типа плательщика:
-
LID— сайт, для которого создается тип плательщика. -
NAME— название типа плательщика в административном интерфейсе. -
CODE— код типа плательщика. Используйте код, чтобы повторно найти настройку. -
SORT— порядок показа в списках. -
ACTIVE— активность типа плательщика. ЗначениеYвключает тип. -
ENTITY_REGISTRY_TYPE— область применения. Для заказов передайте\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER.
$personTypeCode = 'PERSON';
$personType = \Bitrix\Sale\Internals\PersonTypeTable::getList([
'select' => ['ID'],
'filter' => [
'=CODE' => $personTypeCode,
'=ENTITY_REGISTRY_TYPE' => \Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER,
],
'limit' => 1,
])->fetch();
if ($personType)
{
$personTypeId = (int)$personType['ID'];
}
else
{
$result = \Bitrix\Sale\Internals\PersonTypeTable::add([
'LID' => $siteId,
'NAME' => 'Физическое лицо',
'CODE' => $personTypeCode,
'SORT' => 100,
'ACTIVE' => 'Y',
'ENTITY_REGISTRY_TYPE' => \Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER,
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
$personTypeId = (int)$result->getId();
}
В результате переменная $personTypeId содержит идентификатор типа плательщика. Он нужен для групп свойств, свойств заказа, ограничений оплат и доставок.
После создания привяжите тип плательщика к сайту через \Bitrix\Sale\Internals\PersonTypeSiteTable. Без этой связи \Bitrix\Sale\PersonType::load($siteId) не вернет тип для сайта.
Для привязки передайте PERSON_TYPE_ID — идентификатор типа плательщика и SITE_ID — идентификатор сайта.
$personTypeSite = \Bitrix\Sale\Internals\PersonTypeSiteTable::getList([
'select' => ['PERSON_TYPE_ID', 'SITE_ID'],
'filter' => [
'=PERSON_TYPE_ID' => $personTypeId,
'=SITE_ID' => $siteId,
],
'limit' => 1,
])->fetch();
if (!$personTypeSite)
{
$result = \Bitrix\Sale\Internals\PersonTypeSiteTable::add([
'PERSON_TYPE_ID' => $personTypeId,
'SITE_ID' => $siteId,
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
}
После привязки тип плательщика доступен для сайта.
Чтобы проверить результат, получите активные типы плательщиков для сайта через \Bitrix\Sale\PersonType::load(). Метод возвращает массив записей, отсортированных по SORT и ID.
$personTypes = \Bitrix\Sale\PersonType::load($siteId);
if (!$personTypes)
{
throw new \RuntimeException('Для сайта не настроены типы плательщиков');
}
Создать группу свойств заказа
Свойства заказа нужно привязать к группе. Группа помогает разделить контактные данные, адрес доставки, реквизиты юридического лица и служебные поля.
Создайте группу через \Bitrix\Sale\Internals\OrderPropsGroupTable::add(). Перед созданием найдите группу по коду внутри нужного типа плательщика.
В метод передайте параметры:
-
PERSON_TYPE_ID— идентификатор типа плательщика, для которого создается группа. -
NAME— название группы в форме заказа и административном интерфейсе. -
CODE— символьный код группы. Используйте его, чтобы повторно найти группу и не создать дубль.
$propertyGroupCode = 'CONTACTS';
$propertyGroup = \Bitrix\Sale\Internals\OrderPropsGroupTable::getList([
'select' => ['ID'],
'filter' => [
'=PERSON_TYPE_ID' => $personTypeId,
'=CODE' => $propertyGroupCode,
],
'limit' => 1,
])->fetch();
if ($propertyGroup)
{
$propertyGroupId = (int)$propertyGroup['ID'];
}
else
{
$result = \Bitrix\Sale\Internals\OrderPropsGroupTable::add([
'PERSON_TYPE_ID' => $personTypeId,
'NAME' => 'Контактные данные',
'CODE' => $propertyGroupCode,
'SORT' => 100,
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
$propertyGroupId = (int)$result->getId();
}
В результате переменная $propertyGroupId содержит идентификатор группы. Передайте идентификатор группы в свойства заказа через PROPS_GROUP_ID.
Создать свойства заказа
Свойства заказа хранят контактные, адресные и служебные данные оформления: телефон, email, адрес доставки, ИНН, комментарии. Набор свойств зависит от типа плательщика.
Не смешивайте свойства заказа с товарными свойствами. Свойства заказа относятся к оформлению в sale, а характеристики товара относятся к iblock и catalog.
Создайте свойство с помощью \Bitrix\Sale\Internals\OrderPropsTable::add(). Минимально нужны PERSON_TYPE_ID, NAME, TYPE и PROPS_GROUP_ID. Перед созданием найдите свойство по коду внутри типа плательщика.
Поля свойства заказа:
-
PERSON_TYPE_ID— тип плательщика, для которого создается свойство. -
PROPS_GROUP_ID— группа свойств. -
NAME— название свойства в форме заказа и административном интерфейсе. -
CODE— символьный код группы. -
TYPE— тип значения свойства. В примерах используется строкаSTRING. -
REQUIRED— обязательность заполнения, значениеYделает свойство обязательным. -
ENTITY_REGISTRY_TYPE— область применения. Для свойств заказа передайте\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER. -
IS_EMAIL,IS_PHONE,IS_ADDRESS,IS_ADDRESS_TO,IS_FILTERED— служебные флаги роли свойства. Они показывают системе, что свойство хранит email, телефон, адрес, адрес доставки или доступно для фильтрации.
$emailProperty = \Bitrix\Sale\Internals\OrderPropsTable::getList([
'select' => ['ID'],
'filter' => [
'=PERSON_TYPE_ID' => $personTypeId,
'=CODE' => 'EMAIL',
],
'limit' => 1,
])->fetch();
if ($emailProperty)
{
$emailPropertyId = (int)$emailProperty['ID'];
}
else
{
$result = \Bitrix\Sale\Internals\OrderPropsTable::add([
'PERSON_TYPE_ID' => $personTypeId,
'PROPS_GROUP_ID' => $propertyGroupId,
'NAME' => 'Email',
'CODE' => 'EMAIL',
'TYPE' => 'STRING',
'REQUIRED' => 'Y',
'ACTIVE' => 'Y',
'SORT' => 100,
'IS_EMAIL' => 'Y',
'IS_FILTERED' => 'Y',
'ENTITY_REGISTRY_TYPE' => \Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER,
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
$emailPropertyId = (int)$result->getId();
}
В результате переменная $emailPropertyId содержит идентификатор свойства email. Значение email покупателя заполняется в PropertyValueCollection для найденного свойства.
Для телефона создайте отдельное свойство. Флаг IS_PHONE сообщает системе, что свойство хранит телефон покупателя.
$phoneProperty = \Bitrix\Sale\Internals\OrderPropsTable::getList([
'select' => ['ID'],
'filter' => [
'=PERSON_TYPE_ID' => $personTypeId,
'=CODE' => 'PHONE',
],
'limit' => 1,
])->fetch();
if (!$phoneProperty)
{
$result = \Bitrix\Sale\Internals\OrderPropsTable::add([
'PERSON_TYPE_ID' => $personTypeId,
'PROPS_GROUP_ID' => $propertyGroupId,
'NAME' => 'Телефон',
'CODE' => 'PHONE',
'TYPE' => 'STRING',
'REQUIRED' => 'Y',
'ACTIVE' => 'Y',
'SORT' => 110,
'IS_PHONE' => 'Y',
'ENTITY_REGISTRY_TYPE' => \Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER,
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
}
В типе плательщика появится активное обязательное свойство телефона с кодом PHONE.
Если магазин продает физические товары с доставкой, добавьте свойства для адреса или местоположения. Без адресных данных служба доставки не сможет проверить ограничения и рассчитать стоимость для покупателя.
Подробно о местоположениях читайте в статье Местоположения и налоги.
Минимальное адресное свойство можно создать как контактные свойства. Флаг IS_ADDRESS сообщает системе, что свойство хранит адрес покупателя.
$addressProperty = \Bitrix\Sale\Internals\OrderPropsTable::getList([
'select' => ['ID'],
'filter' => [
'=PERSON_TYPE_ID' => $personTypeId,
'=CODE' => 'ADDRESS',
],
'limit' => 1,
])->fetch();
if (!$addressProperty)
{
$result = \Bitrix\Sale\Internals\OrderPropsTable::add([
'PERSON_TYPE_ID' => $personTypeId,
'PROPS_GROUP_ID' => $propertyGroupId,
'NAME' => 'Адрес доставки',
'CODE' => 'ADDRESS',
'TYPE' => 'STRING',
'REQUIRED' => 'Y',
'ACTIVE' => 'Y',
'SORT' => 120,
'IS_ADDRESS' => 'Y',
'IS_ADDRESS_TO' => 'Y',
'ENTITY_REGISTRY_TYPE' => \Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER,
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
}
После создания адресное свойство доступно по PERSON_TYPE_ID и CODE.
Для заказа юридического лица добавьте отдельные свойства: название компании, ИНН, адрес и контактное лицо. Создайте их аналогично, как email и телефон. Задайте CODE, название, тип и группу свойств.
Как заполнить значения, настроить пользовательские типы и отличить свойства заказа от товарных свойств, читайте в статье Свойства заказа.
Добавить собственный статус заказа или доставки
Статусы задают этапы обработки. Для заказа используйте тип \Bitrix\Sale\Internals\StatusTable::TYPE_ORDER, для доставки — \Bitrix\Sale\Internals\StatusTable::TYPE_SHIPMENT.
Статус не обязателен для первого заказа, если хватает стандартных статусов. Добавьте собственный статус, если бизнес-процессу нужен отдельный этап обработки.
В метод \Bitrix\Sale\Internals\StatusTable::add() передайте параметры:
-
ID— код статуса. В примере используетсяVP. -
TYPE— тип статуса: заказ или доставка. -
NOTIFY— признак отправки уведомления при смене статуса. -
COLOR— цвет статуса в интерфейсе.
$statusId = 'VP';
$status = \Bitrix\Sale\Internals\StatusTable::getById($statusId)->fetch();
if (!$status)
{
$result = \Bitrix\Sale\Internals\StatusTable::add([
'ID' => $statusId,
'TYPE' => \Bitrix\Sale\Internals\StatusTable::TYPE_ORDER,
'SORT' => 200,
'NOTIFY' => 'Y',
'COLOR' => '#F2C94C',
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
}
Код создает статус с кодом $statusId. Статус и его название хранятся отдельно. Чтобы статус отображался в интерфейсе, добавьте языковую запись через \Bitrix\Sale\Internals\StatusLangTable.
Передайте параметры:
-
STATUS_ID— код статуса, -
LID— код языка, -
NAME— название статуса, -
DESCRIPTION— описание статуса.
$statusLang = \Bitrix\Sale\Internals\StatusLangTable::getByPrimary([
'STATUS_ID' => $statusId,
'LID' => 'ru',
])->fetch();
if (!$statusLang)
{
$result = \Bitrix\Sale\Internals\StatusLangTable::add([
'STATUS_ID' => $statusId,
'LID' => 'ru',
'NAME' => 'Проверяется менеджером',
'DESCRIPTION' => 'Заказ ожидает проверки менеджером',
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
}
После добавления языковой записи статус отображается на русском языке с названием Проверяется менеджером.
О правах на смену статусов и событиях обработки читайте в статье Статусы и события. Общие права доступа к операциям модуля sale описаны в материале Права доступа.
Создать компанию
Компания в модуле sale описывает юридическое лицо продавца. Компания может участвовать в правилах доступности оплат, доставок и касс.
Создайте компанию через \Bitrix\Sale\Internals\CompanyTable::add(). Минимально нужно передать название. Если используете код компании, заранее проверьте, нет ли такой записи.
В метод передайте параметры:
-
NAME— название юридического лица продавца. -
CODE— символьный код компании. Используйте его, чтобы повторно найти компанию и не создать дубль. -
ADDRESS— адрес компании для документов и связанных сценариев.
Поля CODE, ACTIVE и SORT уже описаны выше.
$companyCode = 'romashka';
$company = \Bitrix\Sale\Internals\CompanyTable::getList([
'select' => ['ID'],
'filter' => ['=CODE' => $companyCode],
'limit' => 1,
])->fetch();
if ($company)
{
$companyId = (int)$company['ID'];
}
else
{
$result = \Bitrix\Sale\Internals\CompanyTable::add([
'NAME' => 'ООО Ромашка',
'CODE' => $companyCode,
'ACTIVE' => 'Y',
'SORT' => 100,
'ADDRESS' => 'Москва, ул. Примерная, д. 1',
]);
if (!$result->isSuccess())
{
throw new \RuntimeException(implode('; ', $result->getErrorMessages()));
}
$companyId = (int)$result->getId();
}
В результате переменная $companyId содержит идентификатор компании.
Чтобы использовать компанию в оплате или отгрузке, проверьте доступность через \Bitrix\Sale\Services\Company\Manager. Метод getAvailableCompanyIdByEntity() возвращает первую активную компанию, которая проходит правила для переданного объекта. В примере $payment содержит объект оплаты из заказа.
Передайте в метод объект оплаты или отгрузки и режим проверки ограничений. В примере используется клиентский режим MODE_CLIENT.
$availableCompanyId = \Bitrix\Sale\Services\Company\Manager::getAvailableCompanyIdByEntity(
$payment,
\Bitrix\Sale\Services\Company\Restrictions\Manager::MODE_CLIENT
);
if ($availableCompanyId > 0)
{
$payment->setField('COMPANY_ID', $availableCompanyId);
}
Положительное число в результате — идентификатор доступной компании. Код записывает идентификатор в поле COMPANY_ID объекта оплаты.
Правила компаний для оплат, доставок и касс описаны в статьях Оплаты и платежные системы, Доставка и отгрузки и Кассы и чеки.
Настроить службы доставки
Служба доставки описывает способ доставки. В заказе выбранная служба сохраняется в отгрузке. Для базовой подготовки достаточно одной доступной службы.
Активность службы не гарантирует доступность для конкретной отгрузки. Ограничения могут учитывать сайт, местоположение, сумму заказа, вес, тип плательщика и другие условия. На этом шаге проверьте наличие активной службы, а доступность для отгрузки проверяйте при создании доставки.
Метод getActiveList() возвращает активные службы доставки. Первый аргумент $calculatingOnly ограничивает список службами, которые подходят для расчета. В примере true помогает проверить, есть ли доставка для расчета стоимости.
$deliveryServices = \Bitrix\Sale\Delivery\Services\Manager::getActiveList(true);
if (!$deliveryServices)
{
throw new \RuntimeException('Активные службы доставки не найдены');
}
Пустой массив $deliveryServices означает, что активные службы доставки не найдены. Если список не пустой, используйте идентификатор выбранной службы как DELIVERY_ID при создании отгрузки.
Про создание собственной службы доставки, расчет стоимости, ограничения, дополнительные услуги и отгрузки читайте в статье Доставка и отгрузки. Заявки в транспортные службы описаны в статье Заявки на доставку.
Настроить платежные системы
Платежная система описывает способ оплаты. В заказе выбранная платежная система сохраняется в объекте оплаты. Если сценарий создает оплату при оформлении заказа, заранее проверьте, что доступен хотя бы один активный способ оплаты.
В примере $order — заказ с корзиной, выбранным сайтом, валютой и типом плательщика. Код создает оплату $payment, задает сумму заказа и передает оплату в getListWithRestrictions(). Метод возвращает платежные системы, которые проходят ограничения.
$paymentCollection = $order->getPaymentCollection();
$payment = $paymentCollection->createItem();
$payment->setField('SUM', $order->getPrice());
$paySystems = \Bitrix\Sale\PaySystem\Manager::getListWithRestrictions(
$payment,
\Bitrix\Sale\Services\PaySystem\Restrictions\Manager::MODE_CLIENT
);
if (!$paySystems)
{
throw new \RuntimeException('Для заказа нет доступных платежных систем');
}
$paySystem = reset($paySystems);
$payment->setFields([
'PAY_SYSTEM_ID' => (int)$paySystem['ID'],
'PAY_SYSTEM_NAME' => $paySystem['NAME'],
]);
В оплату записываются PAY_SYSTEM_ID и PAY_SYSTEM_NAME первой доступной платежной системы. В этом сценарии значения задают до сохранения оплаты в составе заказа.
Про создание обработчиков платежных систем, ограничения, возвраты, частичную оплату и связь с кассами читайте в материале Оплаты и платежные системы. Работа касс и чеков описана в статье Кассы и чеки.
Получить данные для дальнейшей работы
После настройки код создания заказа получает нужные идентификаторы и значения.
|
Данные |
Как получить |
Где использовать |
|
|
Задается в коде сценария или берется из текущего контекста сайта |
|
|
Валюта цены товара |
Из цены товара или из позиции корзины после добавления товара |
|
|
|
|
|
|
|
|
Создание и группировка свойств заказа |
|
Идентификаторы свойств заказа |
|
Заполнение |
|
|
|
Отгрузка заказа, расчет доставки |
|
|
|
Объект оплаты в |
|
|
|
Оплата, отгрузка, касса, правила компаний |
|
Статус заказа или доставки |
|
Смена состояния заказа или отгрузки, проверка прав на операции |
Проверить настройки перед созданием заказа
После сбора идентификаторов проверьте, что код читает настройки из таблицы выше и не подставляет произвольные значения. Если настройка не найдена, вернитесь к нужному блоку.
|
Что не найдено |
Что проверить |
Куда перейти |
|
Валюта цены товара |
Задана ли цена товара в нужной валюте, не расходится ли валюта позиции корзины с суммами заказа, оплаты и доставки |
раздел Учесть валюту цены товара и статья Базовые настройки каталога |
|
Тип плательщика |
Активен ли тип плательщика, привязан ли он к сайту через |
раздел Создать тип плательщика |
|
Свойство заказа |
Есть ли группа свойств и активное свойство с нужным |
раздел Создать свойства заказа и статья Свойства заказа |
|
Служба доставки |
Есть ли активная служба доставки и проходят ли ограничения для отгрузки |
материал Доставка и отгрузки |
|
Платежная система |
Активна ли платежная система и проходит ли ограничения для оплаты |
материал Оплаты и платежные системы |
|
Компания |
Активна ли компания и проходит ли она правила для оплаты, отгрузки или кассы |
раздел Создать компанию |
|
Товар, цена или НДС |
Создан ли товар, задана ли цена, доступен ли тип цены пользователю, настроен ли НДС |
Статья Базовые настройки каталога |
|
Склад и остатки |
Создан ли склад, есть ли остаток товара, если сценарий использует складской учет, резервирование или списание |
Статья Складской учет |
Пример для короткой проверки создания заказа:
$siteId = 's1'; // идентификатор сайта, для которого создается заказ
$userId = 1; // идентификатор пользователя, на которого создается заказ
$currency = 'RUB'; // валюта цены товара или позиции корзины
$personTypes = \Bitrix\Sale\PersonType::load($siteId); // идентификатор активного типа плательщика для сайта
if (!$personTypes)
{
throw new \RuntimeException('Для сайта не настроены типы плательщиков');
}
$personType = reset($personTypes);
$personTypeId = (int)$personType['ID'];
$order = \Bitrix\Sale\Order::create($siteId, $userId, $currency);
$personTypeResult = $order->setPersonTypeId($personTypeId);
if (!$personTypeResult->isSuccess())
{
throw new \RuntimeException(implode('; ', $personTypeResult->getErrorMessages()));
}
В результате есть объект заказа $order с типом плательщика. Пример не сохраняет заказ: перед сохранением добавьте корзину и заполните обязательные свойства. Если сценарий создает пользовательскую отгрузку или оплату, выберите соответствующую службу доставки или платежную систему.