Этот класс используется для передачи информации о произвольном заказе в плагины оплаты и доставки.
Родительский класс — ArrayAccess, поэтому свойства экземпляра класса можно заполнять напрямую — без использования методов:
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $item['id'],
'name' => $item['name'],
'price' => $item['price'],
'quantity' => 10,
],
],
]);
// установка валюты заказа
$order->currency = 'RUB';
Свойства заказа
В экземпляре класса могут использоваться следующие свойства заказа:
- id: числовой ID заказа,
- id_str: отформатированный (строковый) ID заказа,
- contact_id: ID контакта клиента,
- currency: ISO-код валюты,
- total: сумма заказа,
- tax: размер применённого налога,
- discount: общий размер скидки,
- subtotal: подытог: стоимость позиций заказа без стоимости доставки,
- shipping: стоимость доставки,
- shipping_name: название варианта доставки,
- payment_name: название способа оплаты,
- tax_included: признак налога, включённого в стоимость позиций заказа,
- recurrent: признак повторяющегося заказа,
- save_card: признак заказа, для оплаты которого сохранена информация о платёжной карте клиента,
- description: локализованное описание на текущем языке,
- description_en: универсальное описание на английском языке,
- datetime: дата и время оформления заказа,
- update_datetime: дата и время последнего обновления заказа,
- paid_datetime: дата и время оплаты заказа,
- shipping_params: параметры варианта доставки,
- shipping_data: свойства заказа, связанные с доставкой,
- shipping_rate_id: ID варианта доставки,
- shipping_plugin: идентификатор плагина доставки,
- shipping_tax_rate: размер налога на доставку,
- shipping_tax_included: признак налога, включённого в стоимость доставки,
- shipping_address: адрес доставки в виде массива со следующими ключами:
- shipping_address['firstname']: имя плательщика, если адрес плательщика совпадает с адресом доставки,
- shipping_address['lastname']: фамилия плательщика, если адрес плательщика совпадает с адресом доставки,
- shipping_address['name']: полное имя плательщика, если адрес плательщика совпадает с адресом доставки,
- shipping_address['zip']: почтовый индекс,
- shipping_address['street']: название улицы, номер дома и квартиры,
- shipping_address['city']: название населённого пункта,
- shipping_address['region']: код региона,
- shipping_address['region_name']: название региона,
- shipping_address['country']: ISO-код страны,
- shipping_address['country_name']: название страны,
- shipping_address['address']: весь адрес в виде строки,
- billing_params: параметры способа оплаты,
- billing_data: свойства заказа, связанные с оплатой,
- billing_address: адрес плательщика — с теми же ключами, что и для свойства
'shipping_address'(адрес доставки), - items: список позиций заказа (см. описание структуры в описании конструктора класса),
- total_quantity: общее количество позиций заказа,
- contact_email (только для чтения): основной email-адрес клиента,
- contact_name (только для чтения): полное имя клиента,
- comment: комментарий к заказу,
- params: массив дополнительных параметров заказа,
- card_native_id: идентификатор сохранённой платёжной карты клиента для оплаты повторяющихся заказов.
Методы
-
__construct
Конструктор.
-
getContact
Возвращает объект с данными клиента.
-
getContactField
Возвращает значение из данных клиента.
-
hasFractionalQuantity
Возвращает информацию наличии в заказе позиций с дробным количеством.
-
repackFractionalQuantity
Конвертирует дробные количества позиций заказа в целочисленные.
-
hasStockUnits
Возвращает информацию наличии в заказе позиций с нестандартными единицами измерения количества.
-
getTotalDiscount
Возвращает общий размер скидки.
-
getTotalQuantity
Возвращает общее количество всех позиций заказа.
public function __construct ($data = [])
Конструктор — создаёт экземпляр класса для работы с конкретным заказом.
Параметры
-
$data
Массив параметров заказа со следующими необязательными ключами:
- contact: Экземпляр класса
waContactс данными клиента. - params: Массив параметров с заказа с необязательными ключами следующих видов:
- [type]_[group]_[name]: В качестве [type] могут использоваться обозначения типов shipping (доставка) и payment или billing (оплата). В качестве [group] могут использоваться обозначения групп params (параметры доставки или оплаты), data (параметры заказа для использования плагинами доставки либо оплаты). В качестве [name] могут использоваться произвольные ключи параметров.
- shipping_[name]: В качестве [name] могут использоваться имена параметров
rate_id(идентификатор тарифа доставки),plugin(идентификатор плагина доставки),name(название способа доставки).
- items: Список позиций заказа. Каждый элемент списка — массив со следующими ключами:
- id: идентификатор,
- name: название,
- price: цена,
- description (необязательно): описание,
- img (необязательно): URL изображения,
- height (необязательно): высота,
- width (необязательно): ширина,
- length (необязательно): длина,
- weight (необязательно): вес,
- quantity (необязательно): количество (по умолчанию 1),
- discount (необязательно): размер скидки для одной единицы позиции; используется для расчёта скидки, если не указано значение
total_discount, - total_discount (необязательно): размер скидки, уже рассчитанный для указанного количества позиции,
- product_codes (необязательно): список присвоенных товарных кодов; каждый элемент списка — массив со следующими ключами:
- id: числовой идентификатор кода,
- code: строковый идентификатор кода,
- name (необязательно): название,
- icon (необязательно): URL иконки,
- logo (необязательно): URL логотипа,
- values: массив значений, присвоенных позиции заказа.
- contact: Экземпляр класса
Пример
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $item['id'],
'name' => $item['name'],
'price' => $item['price'],
'quantity' => 10,
],
],
]);
public function getContact()
Возвращает экземпляр класса waContact с данными клиента.
Пример
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $item['id'],
'name' => $item['name'],
'price' => $item['price'],
'quantity' => 10,
],
],
]);
$customer = $order->getContact();
public function getContactField ($field, $format = null)
Возвращает значение из данных клиента.
Параметры
-
$field
Имя контактного поля клиента.
-
$format
Формат, в котором нужно получить значение поля. Поддерживаются обозначения формата для метода get() класса
waContact.
Пример
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $item['id'],
'name' => $item['name'],
'price' => $item['price'],
'quantity' => 10,
],
],
]);
$customer_email = $order->getContactField('email', 'default');
Результат
name@domain.ru
public function hasFractionalQuantity()
Возвращает информацию наличии в заказе позиций с дробным количеством.
Пример
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $items[0]['id'],
'name' => $items[0]['name'],
'price' => $items[0]['price'],
'quantity' => 2.5,
],
[
'id' => $items[1]['id'],
'name' => $items[1]['name'],
'price' => $items[1]['price'],
'quantity' => 3,
],
],
]);
$order->hasFractionalQuantity();
Результат
true
public function repackFractionalQuantity()
Конвертирует дробные количества позиций заказа в целочисленные. Если количество позиции выражено дробным числом, оно заменяется на 1, а информация о дробном количестве вместе с названием единицы измерения (если оно указано) добавляется в скобках к названию позиции. Цена позиции умножается на старое значение количества. Метод возвращает новый экземпляр класса с конвертированной информацией о позициях заказа — в исходный экземпляр изменения не вносятся.
Пример
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $item['id'],
'name' => $item['name'],
'price' => $item['price'],
'quantity' => 2.5,
'stock_unit' => 'кг',
],
],
]);
waLog::dump($order->repackFractionalQuantity()->items);
Результат
[
[
'id' => 123,
'name' => 'Картофель (2.5 кг)',
'price' => 122.5,
'quantity' => 1,
'description' => NULL,
'img' => NULL,
'height' => NULL,
'width' => NULL,
'length' => NULL,
'weight' => NULL,
'product_codes' => [],
'total' => 122.5,
],
]
public function hasStockUnits()
Возвращает информацию наличии в заказе позиций с нестандартными единицами измерения количества. Если в конструктор заказа был передан флаг с ключом 'has_custom_stock_units', то метод возвращает логический (Boolean) эквивалент этого значения. В противном случае метод ищет в свойствах позиций заказа наличие непустого обозначения единицы измерения с ключом 'stock_unit'.
Пример
$order = new waOrder([
'has_custom_stock_units' => true,
'contact' => new waContact(123),
'items' => [
[
'id' => $items[0]['id'],
'name' => $items[0]['name'],
'price' => $items[0]['price'],
'quantity' => 2.5,
],
[
'id' => $items[1]['id'],
'name' => $items[1]['name'],
'price' => $items[1]['price'],
'quantity' => 3,
],
],
]);
$order->hasStockUnits();
Результат
// потому что в конструктор передан параметр 'has_custom_stock_units' с непустым значением true
Пример
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $items[0]['id'],
'name' => $items[0]['name'],
'price' => $items[0]['price'],
'quantity' => 2.5,
'stock_unit' => 'кг',
],
[
'id' => $items[1]['id'],
'name' => $items[1]['name'],
'price' => $items[1]['price'],
'quantity' => 3,
'stock_unit' => 'кг',
],
],
]);
$order->hasStockUnits();
Результат
// потому что в свойствах позиций заказа есть заполненная единица измерения с ключом 'stock_unit' true
public function getTotalDiscount()
Возвращает общий размер скидки. Вычисляется на основании значений total_discount в свойствах позиций заказа.
Пример
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $items[0]['id'],
'name' => $items[0]['name'],
'price' => $items[0]['price'],
'quantity' => 10,
'total_discount' => 15,
],
[
'id' => $items[1]['id'],
'name' => $items[1]['name'],
'price' => $items[1]['price'],
'quantity' => 20,
'total_discount' => 30,
],
],
]);
$order->getTotalDiscount();
Результат
45
public function getTotalQuantity()
Возвращает общее количество всех позиций заказа.
Пример
$order = new waOrder([
'contact' => new waContact(123),
'items' => [
[
'id' => $items[0]['id'],
'name' => $items[0]['name'],
'price' => $items[0]['price'],
'quantity' => 10,
],
[
'id' => $items[1]['id'],
'name' => $items[1]['name'],
'price' => $items[1]['price'],
'quantity' => 20,
],
],
]);
$order->getTotalQuantity();
Результат
30









