Получить из Битрикс24 коробки контактные данные сущностей компании и контакты
Получить данные можно через метод CCrmFieldMulti::GetList
Для получения добавил 2 метода в REST API: crm.company.contact и crm.contact.contact
В php_interface/init.php добавл следующий код:
<?php
// ...
AddEventHandler('rest', 'OnRestServiceBuildDescription', ['\CustomRest', 'OnRestServiceBuildDescription']);
class CustomRest
{
public static function OnRestServiceBuildDescription()
{
return [
'crm' => [
'crm.company.contact' => [
'callback' => [__CLASS__, 'crmCompanyContact'],
'options' => [],
],
'crm.contact.contact' => [
'callback' => [__CLASS__, 'crmContactContact'],
'options' => [],
],
],
];
}
public static function crmCompanyContact($query, $nav, \CRestServer $server)
{
if ($query['error']) {
throw new \Bitrix\Rest\RestException(
'Message',
'ERROR_CODE',
\CRestServer::STATUS_PAYMENT_REQUIRED
);
}
return self::__crmContact($query, 'COMPANY');
}
public static function crmContactContact($query, $nav, \CRestServer $server)
{
if ($query['error']) {
throw new \Bitrix\Rest\RestException(
'Message',
'ERROR_CODE',
\CRestServer::STATUS_PAYMENT_REQUIRED
);
}
return self::__crmContact($query, 'CONTACT');
}
protected static function __crmContact($query, $type)
{
if (!isset($query['id'])) {
return [
'error' => 'ERROR_METHOD_NOT_FOUND',
'error_description' => 'Method not found! ' . __LINE__,
];
}
$result = [];
$total = 0;
Bitrix\Main\Loader::includeModule('crm');
$dbResult = CCrmFieldMulti::GetList([
'ID' => 'asc',
], [
'ENTITY_ID' => $type,
'ELEMENT_ID' => $query['id'],
]);
while ($fields = $dbResult->Fetch()) {
$result[] = $fields;
$total++;
}
$result['total'] = $total;
return $result;
}
}
// ...
Для получение по ресту работает разрешение от CRM
Пример запроса контактных данных контакта:
https://example.com/rest/1/<КЛЮЧ_REST_API>/crm.contact.contact.json?id=<ИД_КОНТАКТА>
Пример запроса контактных данных компании:
https://example.com/rest/1/<КЛЮЧ_REST_API>/crm.company.contact.json?id=<ИД_КОНТАКТА>
Пример результата:
{
"result": [
{
"ID": "12345",
"ENTITY_ID": "COMPANY",
"ELEMENT_ID": "1234",
"TYPE_ID": "PHONE",
"VALUE_TYPE": "WORK",
"COMPLEX_ID": "PHONE_WORK",
"VALUE": "+7(912)345-67-89"
},
{
"ID": "12346",
"ENTITY_ID": "COMPANY",
"ELEMENT_ID": "1234",
"TYPE_ID": "EMAIL",
"VALUE_TYPE": "WORK",
"COMPLEX_ID": "EMAIL_WORK",
"VALUE": "mail@example.com"
}
],
"total": 2,
"time": {
"start": 1667217111.755219,
"finish": 1667217111.808055,
"duration": 0.052835941314697266,
"processing": 0.003957033157348633,
"date_start": "2022-10-31T14:51:51+03:00",
"date_finish": "2022-10-31T14:51:51+03:00"
}
}