Перейти к содержанию

Обращение к 1Ф из PHP

При интеграции "Первой Формы" с сайтами (например, на Bitrix или WordPress) необходимо обращаться к "Первой Форме" из php. Для "Первой Формы" версий до 2.184 можно использовать аутентификацию через cookie, для "Первой Формы" версий 2.184 и старше — аутентификацию по токенам.

Пример обращения через токен

ℹ️ Токен, который генерируется "Первой Формой", возвращается как строка формата JSON, заключенная в кавычки. Поэтому для получения собственно токена надо либо декодировать эту строку (в примере ниже это выражение $token = json_decode($result)), либо иным способом убирать кавычки в начале и в конце строки.

<?php
/*
 * Settings
 */
$formaUrl = 'https://1fhost.ru';
$formaUser = 'user';
$formaPwd = 'password';

/*
 * Get token
 */
$authUrl = $formaUrl . "/app/v1.0/api/auth/token?login=" . $formaUser . "&password=" . $formaPwd;
$headers = [
     "Accept: application/json"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $authUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
    die('Error:' . curl_error($ch));
}
curl_close ($ch);
$token = json_decode($result);
if ($token == '') {
    die('Error: cannot receive token');
}

/*
 * Example request with token in header
 */
$url = $formaUrl . "/app/v1.0/api/info";
$headers = [
     "1FormaAuth: " . $token
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_VERBOSE, true);
if (curl_errno($ch)) {
    die('Error:' . curl_error($ch));
}
$output = curl_exec($ch);
curl_close($ch);

echo $output;

ℹ️ Cookie-аутентификация является устаревшим методом и поддерживается только для версий до 2.184. В новых интеграциях используйте токен-авторизацию.

<?php
/*
 * Settings
 */
$formaUrl = 'https://1fhost.ru';
$formaUser = 'user';
$formaPwd = 'password';

/*
 * Functions
 */

function setCurlCookies(&$ch, $cookies) {
  foreach($cookies as $ckey => $cvalue) {
    curl_setopt($ch, CURLOPT_COOKIE, $ckey . '=' . $cvalue);
   }
}


/*
 * Get auth cookies
 */
$authUrl = $formaUrl . "/iOSClientServices/Auth.ashx";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $authUrl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "UserName=" . $formaUser . "&Pass=" . $formaPwd . "&IsDebug=1");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
preg_match_all('/^Set-Cookie:\s*([^;\*]/mi', $result, $matches);
$cookies = [];
foreach($matches[1] as $item) {
    parse_str($item, $cookie);
     $cookies = array_merge($cookies, $cookie);
}
if (curl_errno($ch)) {
    die('Error:' . curl_error($ch));
}
curl_close ($ch);

/*
 * Example request
 */
$url = $formaUrl . "/app/v1.0/api/info";
$ch = curl_init();
setCurlCookies($ch, $cookies);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
curl_setopt($ch, CURLOPT_VERBOSE, true);
if (curl_errno($ch)) {
    die('Error:' . curl_error($ch));
}
$output = curl_exec($ch);
curl_close($ch);

echo $output;