Ошибка валидации, даже при передаче параметра при запуске API Data Explorer через Curl

Я изучил ответы на форуме, но у меня всё ещё не получается заставить это работать. Функция не принимает параметр user_param, который я определил в запросе.

Ошибка: Array ( [success] => [errors] => Array ( [0] => DataExplorer::ValidationError: Missing parameter user_param of type int ) )

Запрос:

-- [params]
-- int :user_param

SELECT Count(likes_received) total_likes_received 
from user_stats us
where us.user_id = :user_param

Код:

<?php global $post;

$current_user_id = get_current_user_id();

$user_discourse_id = (int)get_user_meta($current_user_id,'discourse_sso_user_id')[0];
//учетные данные API,
$api_key = 'key';
$api_username = 'name';
$post_fields = array(
    'user_param' => $user_discourse_id,
);

$headers = array("Content-Type: multipart/form-data;","Api-Key: $api_key","Api-Username: $api_username",);
$url = 'https://domain/admin/plugins/explorer/queries/9/run';
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_POSTFIELDS, $post_fields );

$result = curl_exec( $ch );
if ( curl_errno( $ch ) !== 0 ) {
    // Обработка ошибки, вызов curl_close( $ch ) и возврат.
	echo 'error';
	curl_close ($ch);
	return;
}

curl_close( $ch );
$decoded_result = json_decode( $result, true );
print_r($decoded_result);

?>

Я пробовал формировать значение для $post_fields как с использованием http_build_query, так и без него, но параметр всё равно не передаётся в Data Explorer.

Это работало месяц назад с http_build_query, а теперь перестало. Что я упускаю?

Обновление:
Я даже попробовал передать массив вручную, но ошибка та же. Неужели в плагине что-то недавно изменилось?

curl_setopt( $ch, CURLOPT_POSTFIELDS, array('user_param'=>'25'));
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('user_param' => 25));

Ознакомьтесь со статьёй Как выполнять запросы Data Explorer с помощью API Discourse, чтобы узнать, как правильно задавать параметр params. Исходя из предоставленного вами кода, похоже, что вы пытаетесь передать параметр user_param напрямую, вместо того чтобы включать его в параметр params. Первый пример кода в упомянутой теме должен дать вам представление о том, как правильно установить этот параметр.

Саймон,

Я изучил вашу статью об API, но я использую функцию curl_setopt() для передачи параметров. Эта функция требует использования массива. Поэтому я попробовал следующее, но получил ошибку уровня форума.

$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch, CURLOPT_POSTFIELDS, array('params' => (array('user_param' => 25))));

$result = curl_exec( $ch );
print_r($result);

Кажется, данные теперь передаются, но вывод не отображается.

Ой

Программное обеспечение, управляющее этим форумом, столкнулось с неожиданной проблемой. Приносим извинения за неудобства.

Подробная информация об ошибке была записана в лог, и было сгенерировано автоматическое уведомление. Мы разберёмся в этом.

Дальнейших действий с вашей стороны не требуется. Однако, если ошибка сохранится, вы можете предоставить дополнительные детали, включая шаги для воспроизведения ошибки, опубликовав тему в категории обратной связи на сайте.

Что я упускаю?

Вы можете упростить отладку проблемы, сначала попробовав выполнить API-запрос с помощью curl из терминала вашего компьютера. Если это удастся, вы поймёте, что проблема связана с тем, как вы создаёте запрос с помощью curl_setopt.

Я не ожидал, что выполнение запроса к Data Explorer через API вызовет ошибку 500 на сервере вашего сайта. Если у вас есть доступ к сайту, вы найдёте подробности о том, что пошло не так, в журналах ошибок вашего сайта (раздел Администрирование / Журналы / Журналы ошибок).

Мне удалось найти эту информацию, но я не могу в ней разобраться.

MultiJson::ParseError (unexpected character (after ) at line 1, column 1 [parse.c:769])
app/controllers/application_controller.rb:395:in `block in with_resolved_locale'
app/controllers/application_controller.rb:395:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:355:in `call'
config/initializers/008-rack-cors.rb:25:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:177:in `call'

Что касается вашего первого предложения, я пытаюсь разобраться, как запустить Curl в командной строке.

Итак, я попробовал запустить код в терминале и получил следующую ошибку:

curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL
curl: (3) URL using bad/illegal format or missing URL

root@Discourse-for-Prowess:~# curl -X POST “https://domain/admin/plugins/explorer/queries/9/run”-H “Content-Type:multipart/form-data;”-H “Api-key:12345”-H “Api-username:username”-F ‘params={“user_param”:“25”}’

В Data Explorer я могу выполнить запрос — скриншот.

В логах ошибок я вижу следующее:

ActionDispatch::Http::MimeNegotiation::InvalidType ("%{#context['com.opensymphony.xwork2.dispatcher.httpservletresponse'].addheader('90b3sfq9'" is not a valid MIME type)
lib/middleware/omniauth_bypass_middleware.rb:71:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:353:in `call'
config/initializers/008-rack-cors.rb:25:in `call'
config/initializers/100-quiet_logger.rb:23:in `call'
config/initializers/100-silence_logger.rb:31:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/request_tracker.rb:177:in `call'

Буду благодарен за любые советы.