Страница 1 из 2

Запись ответа API в поле

Добавлено: 29 апр 2024, 22:36
Andres
Подскажите кто-нибудь:
После создания пользователя по API приходит ответ

Код: Выделить всё

Array ( [status] => success [data] => Array ( [id] => 42 ) )
Как этот id записать в поле текущей записи?

Код: Выделить всё

if($result)
{
  $result = json_decode($result,true);

  print_r($result);
}
Пробую:

Код: Выделить всё

db_query("update app_entity_1 set field_257=$result where id={$item_id}");
И много разных вариантов, например:

Код: Выделить всё

$element = $result['id'];
  db_query("update app_entity_1 set field_257={$element} where id={$item_id}");
но безрезультатно...

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 02:59
Antonyous99

Код: Выделить всё

db_perform('app_entity_1,['field_257'=>$result['id']],'update',"id=[id]");

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 19:34
Andres
Antonyous99 писал(а): 30 апр 2024, 02:59

Код: Выделить всё

db_perform('app_entity_1,['field_257'=>$result['id']],'update',"id=[id]");
Спасибо за совет, но не работает...
Сначала:
Ошибка: Процесс: #1, Действия для процесса: #1 - syntax error, unexpected identifier "field_257", expecting ")" on line 50
Попробовал убрать апострафы с "field_257", тогда ругается на "id":
Ошибка: Процесс: #1, Действия для процесса: #1 - syntax error, unexpected identifier "id", expecting ")" on line 50
Сидим, колупаем с Copilot вдвоем... :D

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 19:44
Antonyous99
Кавычку забыл, поправил.

Код: Выделить всё

db_perform('app_entity_1',['field_257'=>$result['id']],'update',"id=[id]");

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 20:27
Andres
Кавычку я тоже нашел, но не работает всеравно... Ругается на необъявленный ключ:

Warning: Undefined array key "id" in /site.ru/plugins/ext/classes/processes/processes.php(1834) : eval()'d code on line 41

Warning: Cannot modify header information - headers already sent by (output started at /site.ru/plugins/ext/classes/processes/processes.php(1834) : eval()'d code:43) in /site.ru/includes/functions/urls.php on line 26

Может не работает в контексте всего кода?

Код: Выделить всё

$bind_id=[id];
$firstname=[7];
$lastname=[8];
$username=[12];
$usermail=[9];
$items = array();
$items[] = array(
  'group_id' => 4, //4 - ID группы пользователя
  'firstname' => $firstname,
  'lastname' => $lastname,
  'username' => $username,
  'email' => $usermail,
  'password' => '',//Если не указан, будет сгенерирован автоматически.
  'field_255' => $bind_id,
);

$params = array(
  'key' => 'КЛЮЧ',
  'username' => 'ЛОГИН',
  'password' => 'ПАРОЛЬ',
  'action' => 'insert',
  'entity_id' => 1,
  'notify' =>false, //Будет отправлено уведомление пользователю.
  'login_url' => 'https://site.ru/index.php',
  'items' => $items,
);
 						                                    
$ch = curl_init('https://site.ru/api/rest.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);			
$result = curl_exec($ch);
curl_close($ch);

                    //Пользователь создается, все в порядке

if($result)
{
  $result = json_decode($result,true);
  
  db_perform('app_entity_1',['field_257'=>$result['id']],'update',"id=[id]");

}
Copilot советовал:

Код: Выделить всё

if($result)
{
  $result = json_decode($result,true);
  
  if(isset($result['id'])) {
    $id = $result['id'];
  } else {
    echo "ID не найден в ответе";
  }
    db_perform('app_entity_1',['field_255'=>$result['id']],'update',"id=[id]");
  //print_r($result);
}
Таки, да, выводит "ID не найден в ответе"...

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 20:38
Andres
"print_r($result);" выводит:
ID не найден в ответеArray ( [status] => success [data] => Array ( [id] => 84 ) )
:shock: Как это "не найден success"? :shock: Массив вернулся, ОК. Но нет "id" - он же возвращается. Или нет?

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 20:59
Fait
Попробуйте вот этот код:

Код: Выделить всё

$bind_id=[id];
$firstname=[7];
$lastname=[8];
$username=[12];
$usermail=[9];
$items = array();
$items[] = array(
  'group_id' => 4, //4 - ID группы пользователя
  'firstname' => $firstname,
  'lastname' => $lastname,
  'username' => $username,
  'email' => $usermail,
  'password' => '',//Если не указан, будет сгенерирован автоматически.
  'field_255' => $bind_id,
);

$params = array(
  'key' => 'КЛЮЧ',
  'username' => 'ЛОГИН',
  'password' => 'ПАРОЛЬ',
  'action' => 'insert',
  'entity_id' => 1,
  'notify' =>false, //Будет отправлено уведомление пользователю.
  'login_url' => 'https://site.ru/index.php',
  'items' => $items,
);
 						                                    
$ch = curl_init('https://site.ru/api/rest.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);			
$result = curl_exec($ch);
curl_close($ch);

                    //Пользователь создается, все в порядке

if($result)
{
  $result = json_decode($result,true);
  $upd = array( 'field_257' => $result['data'][0]['id'] );
  items::update_by_id(1,$bind_id,$upd);
}

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 21:08
Fait
Сработает либо предыдущий, либо вот этот код:

Код: Выделить всё

$bind_id=[id];
$firstname=[7];
$lastname=[8];
$username=[12];
$usermail=[9];
$items = array();
$items[] = array(
  'group_id' => 4, //4 - ID группы пользователя
  'firstname' => $firstname,
  'lastname' => $lastname,
  'username' => $username,
  'email' => $usermail,
  'password' => '',//Если не указан, будет сгенерирован автоматически.
  'field_255' => $bind_id,
);

$params = array(
  'key' => 'КЛЮЧ',
  'username' => 'ЛОГИН',
  'password' => 'ПАРОЛЬ',
  'action' => 'insert',
  'entity_id' => 1,
  'notify' =>false, //Будет отправлено уведомление пользователю.
  'login_url' => 'https://site.ru/index.php',
  'items' => $items,
);
 						                                    
$ch = curl_init('https://site.ru/api/rest.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);			
$result = curl_exec($ch);
curl_close($ch);

                    //Пользователь создается, все в порядке

if($result)
{
  $result = json_decode($result,true);
  $upd = array( 'field_257' => $result['data']['id'] );
  items::update_by_id(1,$bind_id,$upd);
}

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 21:18
Andres
Да! Спасибо Fait!
Второй вариант работает.

Re: Запись ответа API в поле

Добавлено: 30 апр 2024, 21:52
Fait
Andres писал(а): 30 апр 2024, 21:18 Да! Спасибо Fait!
Второй вариант работает.
Рад помочь)
И ещё, постарайтесь вообще не использовать db_perform.
Эта функция не всё учитывает, и в рамках Руководителя работает криво.
Функция update_by_id работает гораздо надёжнее.