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);
|
||
```
|
||
|