487 lines
12 KiB
Markdown
487 lines
12 KiB
Markdown
|
|
# Справочник 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);
|
|||
|
|
```
|
|||
|
|
|