Страница 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 вдвоем...

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 ) )

Как это "не найден success"?

Массив вернулся, ОК. Но нет "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 работает гораздо надёжнее.