# PHPOrangeData
PHP integration for OrangeData service
Актуальная версия библиотеки: 3.0.0
Версия PHP: 5.6.6+
Версия протокола взаимодействия с интернет кассой: 2.22.0 от 28.04.2019
# Содержание
# Начало работы
## Подключение библиотеки
Для начала работы необходимо подключить файл класса:
```php
'0123456789',
'api_url' => '2443',
// 'api_url' => 'https://apip.orangedata.ru:2443', // link access
'sign_pkey' => dirname(__DIR__) . '/secure_path/private_key.pem',
'ssl_client_key' => dirname(__DIR__) . '/secure_path/client.key',
'ssl_client_crt' => dirname(__DIR__) . '/secure_path/client.crt',
'ssl_ca_cert' => dirname(__DIR__) . '/secure_path/cacert.pem',
'ssl_client_crt_pass' => 1234,
];
$buyer = new orangedata\orangedata_client($client); // create new client
```
**Cвойства клиента**
| Имя | Обязательное поле | Описание |
| ------------------- | -------------------- | ------------------------------------------------------------------ |
| inn | Да | ИНН организации (строка от 1 до 64) |
| api_url | Да | Порт, на который будем отправлять запросы или Адрес API или прокси |
| sign_pkey | Да | Путь к приватному ключу, который используется для подписи "чека" |
| ssl_client_key | Да | Путь к приватному ключу используемому для 2ssl взаимодействия |
| ssl_client_crt | Да | Путь к клиентскому сертификату используемому для 2ssl |
| ssl_ca_cert | Да | Путь к cacert.pem |
| ssl_client_crt_pass | Да | Пароль к клиентскому сертификату |
Для включения записи логов в файл 'curl.log', прописываем:
```php
is_debug();
```
# Заказ
## Создание заказа
После того, как создали клиента, можно приступить к созданию заказа.
```php
'23423423434',
'type' => 1,
'customerContact' => 'example@example.com',
'taxationSystem' => 1,
'key' => '1234567',
];
$buyer->create_order($order);
```
**Cвойства заказа**
| Имя | Обязательное поле | Описание |
| ------------------- | -------------------- | ------------------------------------------------------------------ |
| id | Да | Идентификатор документа (строка от 1 до 64) |
| type | Да | 1 - Приход
2 - Возврат прихода
3 - Расход
4 - Возврат расхода |
| customerContact | Да | Телефон или электронный адрес покупателя (строка от 1 до 64) |
| taxationSystem | Да | 0 - Общая, ОСН
1 - Упрощенная доход, УСН доход
2 - Упрощенная доход минус расход, УСН доход - расход
3 - Единый налог на вмененный доход, ЕНВД
4 - Единый сельскохозяйственный налог, ЕСН
5 - Патентная система налогообложения, Патент |
| key | Да | Название ключа, который должен быть использован для проверки подпись. Для клиентов используется их ИНН, для партнеров и платежных агентов код с маской 301****, для вендинга 401**** (cтрока от 1 до 32 ) |
| group | Да | Группа устройств, с помощью которых будет пробит чек (строка от 1 до 32 символов), по умолчанию 'Main' |
### Добавление позиции в заказ
```php
'10',
'price' => 100,
'tax' => 1,
'text' => 'some text',
'paymentMethodType' => 3,
'paymentSubjectType' => 1,
'nomenclatureCode' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/',
'supplierInfo' => [
'phoneNumbers' => ['+79266660011', '+79293456723'],
'name' => 'PAO Example',
],
'supplierINN' => 1234567890,
'agentType' => 127,
'agentInfo' => [
'paymentTransferOperatorPhoneNumbers' => ['+79266660011', '+79293456723'],
'paymentAgentOperation' => 'some operartion',
'paymentAgentPhoneNumbers' => ['+79266660011', '+79293456723'],
'paymentOperatorPhoneNumbers' => ['+79266660011'],
'paymentOperatorName' => 'OAO ATLANT',
'paymentOperatorAddress' => 'Address',
'paymentOperatorInn' => 1234567890,
],
'unitOfMeasurement' => 'kg',
'additionalAttribute' => 'attribute',
'manufacturerCountryCode' => '534',
'customsDeclarationNumber' => 'AD 11/77 from 01.08.2018',
'excise' => '12.43',
];
$buyer->add_position_to_order($position);
```
**Cвойства позиции**
| Имя | Обязательное поле | Описание |
| ------------------- | -------------------- | ------------------------------------------------------------------ |
| quantity | Да | Количество предмета расчета (десятичное число) |
| price | Да | Цена за единицу предмета расчета с учетом скидок и наценок (десятичное число) |
| tax | Да | Ставка НДС:
1 - ставка НДС 20%
2 - ставка НДС 10%
3 - ставка НДС расч. 20/120
4 - ставка НДС расч. 10/110
5 - ставка НДС 0%
6 - НДС не облагается |
| text | Да | Наименование предмета расчета (строка до 128 символов) |
| paymentMethodType | Да | Признак способа расчета:
1 - Предоплата 100%
2 - Частичная предоплата
3 - Аванс
4 - Полный расчет
5 - Частичный расчет и кредит
6 - Передача в кредит
7 - оплата кредита |
| paymentSubjectType | Да | Признак предмета расчета:
1 - Товар
2 - Подакцизный товар
3 - Работа
4 - Услуга
5 - Ставка азартной игры
6 - Выигрыш азартной игры
7 - Лотерейный билет
8 - Выигрыш лотереи
9 - Предоставление РИД
10 - Платеж
11 - Агентское вознаграждение
12 - Составной предмет расчета
13 - Иной предмет расчета
14 - Имущественное право
15 - Внереализационный доход*
16 - Страховые взносы*
17 - Торговый сбор
18 - Курортный сбор
19 - Залог |
| nomenclatureCode | | Код товарной номенклатуры (строка, содержащая base64 кодированный массив от 1 до 32 байт) |
| supplierInfo | | Данные поставщика (смотреть "Свойства supplierInfo") |
| supplierINN | | ИНН поставщика (строка длиной от 10 до 12 символов) |
| agentType | | Признак агента по предмету расчета (Число от 1 до 127) |
| agentInfo | | Данные агента (смотреть "Свойства agentInfo") |
| unitOfMeasurement | | Единица измерения предмета расчета (строка от 1 до 16) |
| additionalAttribute | | Дополнительный реквизит предмета расчета (строка от 1 до 64) |
| manufacturerCountryCode | | Код страны происхождения товара (строка длиной от 1 до 3 ) |
| customsDeclarationNumber | | Номер таможенной декларации (строка от 1 до 32) |
| excise | | Акциз (десятичное число) |
**Cвойства supplierInfo**
| Имя | Обязательное поле | Описание |
| ------------------- | -------------------- | ------------------------------------------------------------------ |
| phoneNumbers | | Телефон поставщика (массив строк длиной от 1 до 19 символов) |
| name | | Наименование поставщика (строка до 239 символов) |
**Cвойства agentInfo**
| Имя | Обязательное поле | Описание |
| ----------------------------------- | -------------------- | ------------------------------------------------------------------ |
| paymentTransferOperatorPhoneNumbers | | Телефон оператора перевода (массив строк длиной от 1 до 19 символов) |
| paymentAgentOperation | | Операция платежного агента (строка до 24 символов) |
| paymentAgentPhoneNumbers | | Телефон платежного агента (массив строк длиной от 1 до 19 символов) |
| paymentOperatorPhoneNumbers | | Телефон оператора по приему платежей (массив строк длиной от 1 до 19 символов) |
| paymentOperatorName | | Наименование оператора перевода (строка до 64 символов) |
| paymentOperatorAddress | | Адрес оператора перевода (строка до 243 символов) |
| paymentOperatorINN | | ИНН оператора перевода (cтрока длиной от 10 до 12 символов) |
### Добавление оплаты в заказ
```php
16,
'amount' => 131.23,
];
$buyer->add_payment_to_order($payment);
```
**Cвойства оплаты**
| Имя | Обязательное поле | Описание |
| ------------------- | -------------------- | ------------------------------------------------------------------ |
| type | Да | Тип оплаты:
1 - сумма по чеку наличными, 1031
2 - сумма по чеку безналичными, 1081
14 - сумма по чеку предоплатой (зачетом аванса и (или) предыдущих платежей), 1215
15 - сумма по чеку постоплатой (в кредит), 1216
16 - сумма по чеку (БСО) встречным предоставлением, 1217 |
| amount | Да | Сумма оплаты (десятичное число) |
### Добавление агента в заказ
```php
127,
'paymentTransferOperatorPhoneNumbers' => ['+79998887766', '+76667778899'],
'paymentAgentOperation' => 'Operation',
'paymentAgentPhoneNumbers' => ['+79998887766'],
'paymentOperatorPhoneNumbers' => ['+79998887766'],
'paymentOperatorName' => 'Name',
'paymentOperatorAddress' => 'ulitsa Adress, dom 7',
'paymentOperatorINN' => '3123011520',
'supplierPhoneNumbers' => ['+79998887766', '+76667778899'],
];
$buyer->add_agent_to_order($agent);
```
**Cвойства агента**
| Имя | Обязательное поле | Описание |
| ----------------------------------- | -------------------- | ------------------------------------------------------------------ |
| agentType | | Признак агента по предмету расчета (число от 1 до 127) |
| paymentTransferOperatorPhoneNumbers | | Телефон оператора перевода (массив строк длиной от 1 до 19 символов) |
| paymentAgentOperation | | Операция платежного агента (строка до 24 символов) |
| paymentAgentPhoneNumbers | | Телефон платежного агента (массив строк длиной от 1 до 19 символов) |
| paymentOperatorPhoneNumbers | | Телефон оператора по приему платежей (массив строк длиной от 1 до 19 символов) |
| paymentOperatorName | | Наименование оператора перевода (строка до 64 символов) |
| paymentOperatorAddress | | Адрес оператора перевода (строка до 243 символов) |
| paymentOperatorINN | | ИНН оператора перевода (cтрока длиной от 10 до 12 символов) |
| supplierPhoneNumbers | | Телефон поставщика (массив строк длиной от 1 до 19 символов) |
### Добавление дополнительного реквизита пользователя
```php
'Like',
'value' => 'Example',
];
$buyer->add_user_attribute($userAttribute);
```
**Cвойства дополнительного реквизита пользователя**
| Имя | Обязательное поле | Описание |
| ----------------------------------- | -------------------- | ------------------------------------------------------------------ |
| name | | Наименование дополнительного реквизита пользователя (строка от 1 до 64 символов) |
| value | | Значение дополнительного реквизита пользователя (строка от 1 до 234 символов) |
### Добавление дополнительных полей
```php
'Attribute',
'customer' => 'Ivanov Ivan',
'customerINN' => '0987654321',
];
$buyer->add_additional_attributes($additional);
```
**Cвойства дополнительных полей**
| Имя | Обязательное поле | Описание |
| ----------------------------------- | -------------------- | ------------------------------------------------------------------ |
| additionalAttribute | | Дополнительный реквизит чека(БСО) (строка от 1 до 16 символов) |
| customer | | Покупатель (клиент) (строка от 1 до 243 символов) |
| customerINN | | ИНН покупателя (клиента) (Строка длиной от 10 до 12 символов) |
### Добавление вендинга в заказ
```php
'21321321123',
'settlementAddress' => 'Address',
'settlementPlace' => 'Place',
];
$buyer->add_vending_to_order($vending);
```
**Cвойства вендинга**
| Имя | Обязательное поле | Описание |
| ----------------------------------- | -------------------- | ------------------------------------------------------------------ |
| automatNumber | | Номер автомата (строка от 1 до 20 символов) |
| settlementAddress | | Адрес расчетов (строка от 1 до 243 символов) |
| settlementPlace | | Место расчетов (Строка длиной от 10 до 12 символов) |
## Отправка заказа
После того, как заполнены все поля заказа и добавлены все параметры, можно отправлять заказ на обработку:
```php
send_order();
var_dump($result);
```
## Проверка статуса заказа
```php
get_order_status(23423423434);
var_dump($order_status);
```
# Чек коррекции
## Создание чека коррекции
```php
'23423423',
'key' => '1234567',
'correctionType' => 0,
'type' => 1,
'description' => 'cashier error',
'causeDocumentDate' => new \DateTime(),
'causeDocumentNumber' => '56ce',
'totalSum' => 567.9,
'cashSum' => 567,
'eCashSum' => 0.9,
'prepaymentSum' => 0,
'postpaymentSum' => 0,
'otherPaymentTypeSum' => 0,
'tax1Sum' => 0,
'tax2Sum' => 0,
'tax3Sum' => 0,
'tax4Sum' => 0,
'tax5Sum' => 0,
'tax6Sum' => 0,
'taxationSystem' => 2,
];
$buyer->create_correction($correction);
```
**Cвойства чека коррекции**
| Имя | Обязательное поле | Описание |
| ----------------------------------- | -------------------- | ------------------------------------------------------------------ |
| id | Да | Идентификатор документа (строка от 1 до 64 символов) |
| group | Да | Группа устройств, с помощью которых будет пробит чек (строка от 1 до 32 символов), по умолчанию 'Main' |
| key | Да | Название ключа, который должен быть использован для проверки подписи (строка от 1 до 32 символов) |
| correctionType | Да | Тип коррекции 1173:
0. Самостоятельно
1. По предписанию |
| type | Да | Признак расчета, 1054:
1. Приход
3. Расход |
| description | Да | Описание коррекции (cтрока от 1 до 243 символов. ) |
| causeDocumentDate | Да | Дата документа основания для коррекции (время в виде строки в формате ISO8601) |
| causeDocumentNumber | Да | Номер документа основания для коррекции (строка от 1 до 32 символов) |
| totalSum | Да | Сумма расчета, указанного в чеке (десятичное число) |
| cashSum | | Сумма по чеку (БСО) наличными (десятичное число) |
| eCashSum | | Сумма по чеку (БСО) безналичными (десятичное число) |
| prepaymentSum | | Сумма по чеку (БСО) предоплатой (зачетом аванса и (или) предыдущих платежей) (десятичное число) |
| postpaymentSum | | Сумма по чеку (БСО) постоплатой (в кредит) (десятичное число) |
| otherPaymentTypeSum | | Сумма по чеку (БСО) встречным предоставлением (десятичное число) |
| tax1Sum | | Сумма НДС чека по ставке 20% (десятичное число) |
| tax2Sum | | Сумма НДС чека по ставке 10% (десятичное число) |
| tax3Sum | | Сумма расчета по чеку с НДС по ставке 0% (десятичное число) |
| tax4Sum | | Сумма расчета по чеку без НДС (десятичное число) |
| tax5Sum | | Сумма НДС чека по расч. ставке 20/120 (десятичное число) |
| tax6Sum | | Сумма НДС чека по расч. ставке 10/110 (десятичное число) |
| taxationSystem | | Применяемая система налогообложения, 1055:
0. Общая
1. Упрощенная доход
2. Упрощенная доход минус расход
3. Единый налог на вмененный доход
4. Единый сельскохозяйственный налог
5. Патентная система налогообложения |
### Добавление вендинга в чек коррекции
```php
'21321321123',
'settlementAddress' => 'Address',
'settlementPlace' => 'Place',
];
$buyer->add_vending_to_correction($correctionVending);
```
**Cвойства вендинга**
| Имя | Обязательное поле | Описание |
| ----------------------------------- | -------------------- | ------------------------------------------------------------------ |
| automatNumber | | Номер автомата (строка от 1 до 20 символов) |
| settlementAddress | | Адрес расчетов (строка от 1 до 243 символов) |
| settlementPlace | | Место расчетов (Строка длиной от 10 до 12 символов) |
## Отправка чека коррекции
```php
post_correction();
var_dump($result);
```
## Проверка статуса чека коррекции
```php
get_correction_status('23423423');
var_dump($cor_status);
```