meraproject/module/integration/amocrm/model.php
keboss-m 5c21d25d45 Initial commit: Merakomis portal, Docker stack and user-reader API.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-24 11:04:05 +03:00

240 lines
9.0 KiB
PHP

<?php
namespace integration;
class AMOCRM{
public static $AMO_SUBDOMAIN = "";
public static $AMO_LOGIN = "";
public static $AMO_HASH = "";
public static $AMO_TAGS = "";
public static $AMO_PRICE = "0";
public static $AMO_NAME = "";
const TO_CONTACT = 1;
const TO_DEAL = 2;
const TO_COMPANY = 3;
const TO_TASK = 4;
const TO_BUYER = 12;
const NOTE_TYPE_DEAL_CREATED = 1;//"DEAL_CREATED";
const NOTE_TYPE_CONTACT_CREATED = 2;//"CONTACT_CREATED";
const NOTE_TYPE_DEAL_STATUS_CHANGED = 3;//"DEAL_STATUS_CHANGED";
const NOTE_TYPE_COMMON = 4;//"COMMON";
const NOTE_TYPE_COMPANY_CREATED = 12;//"COMPANY_CREATED ";
const NOTE_TYPE_TASK_RESULT = 13;//"TASK_RESULT";
const NOTE_TYPE_SYSTEM = 25;//"SYSTEM";
const NOTE_TYPE_SMS_IN = 102;//"SMS_IN";
const NOTE_TYPE_SMS_OUT = 103;//"SMS_OUT";
static function init($subdomain,$login,$hash){
self::$AMO_SUBDOMAIN = $subdomain;
self::$AMO_LOGIN = $login;
self::$AMO_HASH = $hash;
}
public static function link($link = ''){
return 'https://'.self::$AMO_SUBDOMAIN.'.amocrm.ru/private/api/'.$link;
}
public static function publicLink($link = ''){
return 'https://'.self::$AMO_SUBDOMAIN.'.amocrm.ru/api/'.$link;
}
public static function auth(){
$data = array(
'USER_LOGIN'=>self::$AMO_LOGIN,
'USER_HASH' =>self::$AMO_HASH
);
$link = self::link('auth.php?type=json');
self::query($link,$data);
}
public static function addNote($data){
$notes['request']['notes']['add']=array(
//$notes['add']=array(
array(
'element_id' => $data['oid'],
'element_type' => $data['to'],
'note_type' => $data['note_type'],
'created_at' => time(),
'text'=>$data['text'],
)
);
$link = self::link('v2/json/notes/set');
return self::query($link,$notes);
}
public static function updateLeads($leads){
//$data['request']['leads']['update']=$leads;
//$link = self::link('v2/json/leads/set');
$data['update']=$leads;
$link = self::publicLink('v2/leads');
return self::query($link,$data);
}
public static function getLeadByID($id){
$link = self::link('v2/json/leads/?id='.$id);
return self::query($link,[],'GET');
}
public static function addLead($data){
/*
$leads['request']['leads']['add']=array(
array(
'name' =>$data['name']?$data['name']:'Аноним',
'tags' =>$data['tags']?$data['tags']:self::$AMO_TAGS,
'price' =>$data['price']?$data['price']:self::$AMO_PRICE,
'status_id' =>$data['status_id']?$data['status_id']:null,
'pipeline_id' =>$data['pipeline_id']?$data['pipeline_id']:null,
'custom_fields'=>$data['custom_fields']?$data['custom_fields']:[],
'catalog_elements_id'=>$data['catalog_elements_id']?$data['catalog_elements_id']:[],
)
);
$link = self::link('v2/json/leads/set');
/**/
$leads['add']=array(
array(
'name' =>$data['name']?$data['name']:'Аноним',
'tags' =>$data['tags']?$data['tags']:self::$AMO_TAGS,
'price' =>$data['price']?$data['price']:self::$AMO_PRICE,
'status_id' =>$data['status_id']?$data['status_id']:null,
'pipeline_id' =>$data['pipeline_id']?$data['pipeline_id']:null,
'custom_fields'=>$data['custom_fields']?$data['custom_fields']:[],
'catalog_elements_id'=>$data['catalog_elements_id']?$data['catalog_elements_id']:[],
)
);
$link = self::publicLink('v2/leads');
return self::query($link,$leads);
}
public static function getContacts($a){
// https://developers.amocrm.ru/rest_api/contacts_list.php
$s = array();
foreach ($a as $k=>$v)
$s[] = $k.'='.$v;
$link = self::link('v2/json/contacts/list?'.implode('&',$s));
return self::query($link,$a,'GET');
}
public static function linkPost($a){
// https://developers.amocrm.ru/rest_api/links/set.php
$arr['request']['links']['link'] = $a;
$link = self::link('v2/json/links/set');
return self::query($link,$arr,'POST');
}
public static function getCurrent(){
$link = self::link('v2/json/accounts/current');
return self::query($link,array(),'');
}
public static function addTask($lead_id,$user_id){
/*
$contacts['request']['tasks']['add']=array(
array(
'element_id'=>$lead_id,
'responsible_user_id'=>$user_id,
'element_type'=>2,
'task_type'=>1,
'text'=>'Позвонить по сделке',
'complete_till'=>time()+60*60*12,
)
);
//echo '<pre>'.print_r($contacts).'</pre>';
$link = self::link('v2/json/tasks/set');
return $res = self::query($link,$contacts);
/**/
}
public static function addContact($data){
$contacts['request']['contacts']['add']=array(
array(
'name'=>$data['name'],
'tags'=>self::$AMO_TAGS,
'linked_leads_id'=>$data['linked_leads_id']?$data['linked_leads_id']:array(),
'responsible_user_id'=>$data['who']?$data['who']:'',
//'company_name'=>'SuperStar',
'custom_fields'=>$data['custom_fields']?$data['custom_fields']:
// kadigarden..
[
array(
#Телефоны
'id'=>413859, #Уникальный индентификатор заполняемого дополнительного поля
'values'=>array(
array(
'value'=>$data['phone']?$data['phone']:'-',
'enum'=>'WORK' #Мобильный
),
)
),
array(
#E-mails
'id'=>413861,
'values'=>array(
array(
'value'=>$data['email']?$data['email']:'-',
'enum'=>'WORK', #Рабочий
),
)
),
]
)
);
//echo '<pre>'.print_r($contacts).'</pre>';
$link = self::link('v2/json/contacts/set');
return $res = self::query($link,$contacts);
//var_dump($res);
}
public static function getCatalogElements($term='',$page=0){
$link = self::publicLink('v2/catalog_elements/?page='.$page.'&term='.$term);
return self::query($link,array(['page'=>$page]),'GET');
}
static function addCatalogElements($items=[]){
$link = self::publicLink('v2/catalog_elements');
return self::query($link,['add'=>$items]);
}
static function query($link, $data=array(),$custom_request="POST")
{
//echo "<br/>".$link."<br/>";
$curl = curl_init(); #Сохраняем дескриптор сеанса cURL
#Устанавливаем необходимые опции для сеанса cURL
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, 'amoCRM-API-client/1.0');
curl_setopt($curl, CURLOPT_URL, $link);
if ($custom_request) curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $custom_request);
if ($data) curl_setopt($curl, CURLOPT_POSTFIELDS, je($data));
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt'); #PHP>5.3.6 dirname(__FILE__) -> __DIR__
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
$out = curl_exec($curl); #Инициируем запрос к API и сохраняем ответ в переменную
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE); #Получим HTTP-код ответа сервера
curl_close($curl); #Завершаем сеанс cURL
$out = json_decode($out);
$out = je($out);
$out = json_decode($out);
return $out;
}
}