Files
erv-clientright/API_REFERENCE.md
2026-03-13 10:42:01 +03:00

487 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Справочник API
## CRM WebService API
### Базовый URL
```
https://crm.clientright.ru/webservice.php
```
### Авторизация
#### 1. Получение токена (getchallenge)
```php
GET ?operation=getchallenge&username=api
```
**Ответ:**
```json
{
"success": true,
"result": {
"token": ременный_токен"
}
}
```
#### 2. Получение sessionId (login)
```php
POST
operation=login
username=api
accessKey=md5(challengeToken + userAccessKey)
```
**Где:**
- `userAccessKey = '4r9ANex8PT2IuRV'`
- `accessKey = md5(challengeToken + userAccessKey)`
**Ответ:**
```json
{
"success": true,
"result": {
"sessionName": "session_id_для_дальнейшихапросов"
}
}
```
### Операции с клиентами
#### CreateContact - Создание/обновление клиента
**Параметры:**
```php
operation = CreateContact
sessionName = полученный_sessionId
firstname = Имя (обязательно)
lastname = Фамилия (обязательно)
secondname = Отчество
mobile = Телефон (обязательно)
email = Email
tgid = Telegram ID (число)
birthday = Дата рождения в формате ГГГГ-ММ-ДД (обязательно)
birthplace = Место рождения
mailingstreet = Адрес проживания
inn = ИНН (обязательно)
requisites = Реквизиты для перечисления средств
code = СМС код
```
**Пример запроса:**
```php
$params = array(
'operation' => 'CreateContact',
'sessionName' => $sessionId,
'firstname' => 'Василий',
'lastname' => 'Пупкинидзе',
'secondname' => 'Алибабаевич',
'mobile' => '+7(949) 123-45-11',
'email' => 'rrrr@mail.ru',
'birthday' => '1986-11-15',
'mailingstreet' => 'г. Калининград',
'inn' => '321654987654',
'code' => '4568'
);
```
**Ответ:**
```json
{
"success": true,
"result": "83859"
}
```
Где `result` - это ID созданного или обновленного клиента.
### Операции с контрагентами
#### CreateAccount - Создание/обновление контрагента
**Параметры:**
```php
operation = CreateAccount
sessionName = полученный_sessionId
accountname = Наименование юрлица (обязательно)
address = Юридический адрес
email = Email
website = Сайт
phone = Телефон
inn = ИНН (обязательно)
ogrn = ОГРН (обязательно)
```
**Пример запроса:**
```php
$params = array(
'operation' => 'CreateAccount',
'sessionName' => $sessionId,
'accountname' => 'ООО "Три бобра"',
'address' => 'г. Москва, Кремль',
'email' => 'qqqqq@ya.ru',
'website' => 'https://pikabu.ru',
'phone' => '+7 928 664-66-11',
'inn' => '1234567899',
'ogrn' => '32165498711'
);
```
**Ответ:**
```json
{
"success": true,
"result": "83837"
}
```
Где `result` - это ID созданного или обновленного контрагента.
### Операции с проектами
#### CreateProject - Создание проекта
**Параметры:**
```php
operation = CreateProject
sessionName = полученный_sessionId
contactid = ID клиента (обязательно)
offenderid = ID контрагента-обидчика (обязательно)
agentid = ID контрагента-посредника (опционально)
sms = Код из СМС
ip = IP пользователя
source = Откуда пришли
region = Регион пользователя
formid = ID формы
category = Категория обращения
direction = Направление обращения
agrprice = Цена договора (число)
subject = Предмет договора
agrdate = Дата заключения договора (ГГГГ-ММ-ДД)
startdate = Срок начальный (ГГГГ-ММ-ДД)
finishdate = Срок конечный (ГГГГ-ММ-ДД)
loss = Убыток (число)
servicecost = Стоимость услуги (число)
progress = Прогресс в % (число)
country = Страна путешествия
hotel = Средство размещения
transport = Транспортные услуги ("да" или "нет")
insurance = Страховка ("да" или "нет")
other = Прочее
description = Описание
independently = Самостоятельно соблюден претензионный порядок ("да" или "нет")
claimdate = Дата направления претензии (ГГГГ-ММ-ДД)
returned = Вернули в претензионном порядке (число)
```
**Пример запроса:**
```php
$params = array(
'operation' => 'CreateProject',
'sessionName' => $sessionId,
'contactid' => 83834,
'offenderid' => 84675,
'sms' => '1234',
'ip' => '192.168.0.1',
'source' => 'с улицы',
'region' => 'Владивосток',
'formid' => 1376,
'category' => 'Абидили!!',
'direction' => 'Путину',
'description' => 'какое-то описание'
);
```
**Ответ:**
```json
{
"success": true,
"result": "83839"
}
```
Где `result` - это ID созданного проекта.
### Получение списка файлов
#### GetFilesList - Получение списка файлов клиента
**Параметры:**
```php
operation = GetFilesList
sessionName = полученный_sessionId
inn = ИНН клиента (обязательно)
sms = СМС-код (обязательно)
```
**Пример запроса:**
```php
$params = array(
'operation' => 'GetFilesList',
'sessionName' => $sessionId,
'inn' => '643922466250',
'sms' => '795372'
);
```
**Ответ при успехе:**
```json
{
"success": true,
"result": {
"status": "ok",
"files": [
{
"title": "договор",
"path": "storage/2023/December/week4/9e84c3f86209302799f46d0136e93ab6.pdf"
},
{
"title": "подтверждение оплаты",
"path": "storage/2023/December/week4/cf65c58a01e7db0b19c8e1fe119c0e32.pdf"
}
]
}
}
```
**Ответ при ошибке:**
```json
{
"success": true,
"result": {
"status": "failed",
"message": "Клиент с указанным СМС-кодом и ИНН не найден"
}
}
```
## WebForms Capture API
### Базовый URL
```
https://crm.clientright.ru/modules/Webforms/capture.php
```
### Параметры формы
**Обязательные системные параметры:**
```php
__vtrftk = 'sid:ec649134ad232e44c3ad71bbd321cee986f05545,1688385374'
publicid = '3ddc71c2d79ef101c09b0d4e9c6bd08b'
urlencodeenable = '1'
name = 'websiteticket'
```
**Кастомные поля:**
Все поля с атрибутом `data-crmname` отправляются как отдельные параметры.
## File Upload API
### Базовый URL
```
https://form.clientright.ru/fileupload_v2.php
```
### Параметры
```php
POST multipart/form-data
lastname = Фамилия клиента
sub_dir = ID сессии
files_names[] = Массив имен полей для файлов
docs_names[] = Массив названий документов
field_name-0 = Файл 1
field_name-1 = Файл 2
...
```
**Ответ:**
```json
{
"success": "true",
"empty_file": "путь_к_пустышке",
"real_file": "путь_к_реальномуайлу",
"message": "Файл успешно загружен"
}
```
## DaData API
### Базовый URL
```
https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/party
```
### Авторизация
```
Authorization: Token f5d6928d7490cd44124ccae11a08c7fa5625d48c
Content-Type: application/json
```
### Запрос
```json
POST
{
"query": "название организации или ИНН"
}
```
### Ответ
```json
{
"suggestions": [
{
"value": "ООО Рога и Копыта",
"data": {
"inn": "1234567890",
"address": {
"value": "г. Москва, ул. Ленина, д. 1"
}
}
}
]
}
```
## IP Geolocation API
### Базовый URL
```
http://ip-api.com/json/{IP}?lang=ru
```
### Пример запроса
```
GET http://ip-api.com/json/192.168.1.1?lang=ru
```
### Ответ
```json
{
"status": "success",
"country": "Россия",
"regionName": "Москва",
"city": "Москва",
"lat": 55.7558,
"lon": 37.6173
}
```
## Обработка ошибок
### Стандартный формат ошибки
```json
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Описание ошибки"
}
}
```
### HTTP коды статуса
- `200` - Успешный запрос
- `400` - Неверные параметры
- `401` - Ошибка авторизации
- `404` - Ресурс не найден
- `500` - Внутренняя ошибка сервера
### Важные замечания
1. **SessionId** имеет ограниченное время жизни (15 минут)
2. **Поле success** в ответе означает только техническую успешность запроса
3. Для проверки бизнес-логики используйте поле **status** внутри **result**
4. Все даты должны быть в формате **ГГГГ-ММ-ДД**
5. При работе с файлами используйте **multipart/form-data**
## Примеры использования
### Полный цикл создания обращения
```php
// 1. Получение токена
$ch = curl_init();
$url = "https://crm.clientright.ru/webservice.php?operation=getchallenge&username=api";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);
$jsonResponse = json_decode($response, true);
$challengeToken = $jsonResponse['result']['token'];
// 2. Получение sessionId
$userAccessKey = '4r9ANex8PT2IuRV';
$generatedKey = md5($challengeToken . $userAccessKey);
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://crm.clientright.ru/webservice.php',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => array(
'operation' => 'login',
'username' => 'api',
'accessKey' => $generatedKey
)
));
$response = curl_exec($ch);
$jsonResponse = json_decode($response, true);
$sessionId = $jsonResponse['result']['sessionName'];
// 3. Создание клиента
$clientParams = array(
'operation' => 'CreateContact',
'sessionName' => $sessionId,
'firstname' => 'Иван',
'lastname' => 'Иванов',
'mobile' => '+79991234567',
'email' => 'ivan@example.com',
'birthday' => '1990-01-01',
'inn' => '123456789012',
'code' => '123456'
);
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_URL => 'https://crm.clientright.ru/webservice.php',
CURLOPT_POSTFIELDS => $clientParams
));
$response = curl_exec($ch);
$jsonResponse = json_decode($response, true);
$contactId = $jsonResponse['result'];
// 4. Создание контрагента
$accountParams = array(
'operation' => 'CreateAccount',
'sessionName' => $sessionId,
'accountname' => 'ООО "Пример"',
'inn' => '9876543210',
'ogrn' => '1234567890123'
);
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_URL => 'https://crm.clientright.ru/webservice.php',
CURLOPT_POSTFIELDS => $accountParams
));
$response = curl_exec($ch);
$jsonResponse = json_decode($response, true);
$accountId = $jsonResponse['result'];
// 5. Создание проекта
$projectParams = array(
'operation' => 'CreateProject',
'sessionName' => $sessionId,
'contactid' => $contactId,
'offenderid' => $accountId,
'description' => 'Описание обращения'
);
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_POST => 1,
CURLOPT_URL => 'https://crm.clientright.ru/webservice.php',
CURLOPT_POSTFIELDS => $projectParams
));
$response = curl_exec($ch);
$jsonResponse = json_decode($response, true);
$projectId = $jsonResponse['result'];
curl_close($ch);
```