Блог

Интеграция 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"];
	}

Комментариев нет

Ваш комментарий