Интеграция Dynamics CRM 365 с PHP через Web API
- Алексей
- Комментариев нет
В данной статье мы рассмотрим примеры подключения к Dynamics CRM 2016/365 с помощью PHP через программный интерфейс Web API. Мы рассмотрим два варианта подключения к системе On-premise и Online-системе.
Для каждого из вариантов нам потребуется HTTP клиент для PHP под названием Guzzle.
Далее все достаточно просто, в обоих примерах мы реализуем задачу получение 10 контактов, выводим их полное имя и мобильный телефон, а также общее количество контактов.
В примере для On-premise мы просто в запросе указываем данные для авторизации с типом HTLM:
<?php require 'vendor/autoload.php'; $url = 'http://crmsrv/org/'; //Адрес организации $login = 'domain\login'; //Пользователь $password = 'password'; //Пароль $client = new GuzzleHttp\Client(); $res = $client->request('GET', $url . 'api/data/v9.0/contacts?$select=fullname,mobilephone&$count=true', [ 'auth' => [$login, $password, 'ntlm'], 'headers' => [ 'Prefer' => 'odata.maxpagesize=10' ] ]); $data = json_decode($res->getBody(), true); $cnt = $data["@odata.count"]; $text = "Контакты не найдены!"; if ($cnt > 0) { if ($cnt == 1) $text = "Найден " . $cnt . " контакт:</br>"; else if ($cnt < 4) $text = "Найдено " . $cnt . " контакта:</br>"; else $text = "Найдено " . $cnt . " контактов:</br>"; foreach ($data["value"] as $value) $text = $text . "</br>ФИО: " . $value["fullname"] . ". Телефон: " . $value["mobilephone"]; if ($cnt > 10) $text = $text . "</br></br>показаны первые 10"; echo $text; }
В случае Online нам нужно предварительно получить токен, для этого используем отдельный метод, который обращается к порталу авторизации Microsoft, в него мы передаем адрес системы, логин и пароль:
<?php require 'vendor/autoload.php'; $url = 'https://org.crm4.dynamics.com/'; //Адрес организации $login = 'login@bdomain.ru'; //Пользователь $password = 'password'; //Пароль $client = new GuzzleHttp\Client(); $res = $client->request('GET', $url . 'api/data/v9.0/contacts?$select=fullname,mobilephone&$count=true', [ 'headers' => [ 'Authorization' => 'Bearer ' . GetToken($url, $login, $password), 'Prefer' => 'odata.maxpagesize=10' ] ]); $data = json_decode($res->getBody(), true); $cnt = $data["@odata.count"]; $text = "Контакты не найдены!"; if ($cnt > 0) { if ($cnt == 1) $text = "Найден " . $cnt . " контакт:</br>"; else if ($cnt < 4) $text = "Найдено " . $cnt . " контакта:</br>"; else $text = "Найдено " . $cnt . " контактов:</br>"; foreach ($data["value"] as $value) $text = $text . "</br>ФИО: " . $value["fullname"] . ". Телефон: " . $value["mobilephone"]; if ($cnt > 10) $text = $text . "</br></br>показаны первые 10"; echo $text; } function GetToken($url, $login, $password) { $client = new GuzzleHttp\Client(); $res = $client->request('POST', 'https://login.microsoftonline.com/common/oauth2/token', [ 'form_params' => [ 'client_id' => '2ad88395-b77d-4561-9441-d0e40824f9bc', 'username' => $login, 'password' => $password, 'grant_type' => 'password', 'resource' => $url ] ]); $data = json_decode($res->getBody(), true); return $data["access_token"]; }
Комментариев нет