Intereting Posts
Доступ к многомерному элементу массива без знающих родительских элементов str_replace ключи в многомерном массиве PHP Изменить формат даты (в DB или output) на dd / mm / yyyy – PHP MySQL Как взорвать целое число cURL и fopen медленнее в браузере, быстро через командную строку Ошибка PHP (MySQL): «Предупреждение: mysql_num_rows () ожидает, что параметр 1 будет ресурсом» Как добавить поле ввода динамически в пустой форме? Объединение Laravel 4.2 Как создать подкатегории подкатегорий Время загрузки: быстрее ли анализировать HTML с помощью DOMDocument PHP или с регулярными выражениями? Регулярное выражение PHP для проверки URL-адреса Laravel orderBy дата не работает при использовании paginator Нужен некоторый ответ о example.php / example Случайное время и дата между двумя значениями даты Php: Предупреждение: заголовок может содержать не более одного заголовка, а новая строка обнаружена в

Создайте пользователя, используя Moodle webservice

Я попытался создать нового пользователя в Moodle с помощью веб-службы api.

Я попытался с примером, который я нашел в github и с другим php-кодом

В обоих я получаю тот же ответ:

«Отсутствует необходимый ключ в единой структуре: пользователи»

ответ:

{ "exception":"invalid_parameter_exception", "errorcode":"invalidparameter", "message":"Invalid parameter value detected", "debuginfo":"Missing required key in single structure: users" } 

Я пытаюсь изменить объект массивом, но ошибка продолжается.

мой код:

 $functionname = 'core_user_create_users'; $user1 = new stdClass(); $user1->id = 1; $user1->username = 'testusername1'; $user1->password = 'testpassword1'; $user1->firstname = 'testfirstname1'; $user1->lastname = 'testlastname1'; $user1->email = 'testemail1@moodle.com'; $user1->auth = 'manual'; $user1->idnumber = 'testidnumber1'; $user1->description = 'Hello World!'; $user1->city = 'testcity1'; $user1->country = 'BR'; $token = 'mytoken'; $domainname = 'localhost/moodle'; $functionname = 'core_user_create_users'; $restformat = 'json'; $serverurl = $domainname . '/webservice/rest/server.php'. '?wstoken=' . $token . '&wsfunction='.$functionname.'&moodlewsrestformat=' . $restformat; $users = array($user1); $params = array('users' => $users); $context = stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => 'Content-Type: text/plain', 'content' => $params ) )); $contents = file_get_contents($serverurl, null, $context); //print_r($contents); $resposta = json_decode($contents); 

У меня есть действительный токен, и пользователю разрешено использовать функцию core_user_create_users

получить такую ​​же проблему с требуемыми ключевыми «пользователями» решить проблему с этим =>

 $serverurl = $domainname . '/webservice/rest/server.php'. '?wstoken=' . $token . '&wsfunction='.$functionname; //require_once('../curl.php'); $curl = new curl; $params = "&users[0][username]=loginnn&users[0][password]=4815162342Qq*&users[0][firstname]=allala&users[0][lastname]=trest&users[0][email]=ty@mail.ru"; //if rest format == 'xml', then we do not add the param for backward compatibility with Moodle < 2.2 $restformat = ($restformat == 'json')?'&moodlewsrestformat=' . $restformat:''; $resp = $curl->post($serverurl . $restformat, $params); 

У меня есть аналогичная проблема один раз, по моему опыту есть проблема с $user1->password = 'testpassword1'; Moodle нужен пароль с одной заглавной буквой и, по крайней мере, одним символом вроде /. , – _ и т.д.

попробуйте новый пароль, возможно, он работает …

Я думаю, что вы должны повысить уровень отладки в вашей системе moodle, надеюсь, вы получите более полезную информацию об этой ошибке, отладка поможет вам достичь точной проблемы. выполните следующий путь:

Home ► Site administration ► Development ► Debugging

выберите Developer level из debug messages и сохраните изменения

Не передавайте идентификатор в массив пользователя, так как он не принимает его в качестве параметра. Для получения дополнительной информации ознакомьтесь с документацией API WebService для создания пользователя в Moodle.

столкнулись с такой же потребностью сегодня, и я использовал ваш пост, чтобы получить код от GitHUB, поэтому, я думаю, я расскажу вам, как я исправил ошибку:

измените свой код на следующее:

 $users = array((array)$user1); $params = array('users' => (array)$users); 

Код из GitHUB $ user1 – это объект. Moodle потребовал массив.

Ниже скопировано из документации Moodle.

 [users] => Array ( [0] => Array ( [username] => string [password] => string [firstname] => string [lastname] => string [email] => string [auth] => string [idnumber] => string [lang] => string [calendartype] => string [theme] => string [timezone] => string [mailformat] => int [description] => string [city] => string [country] => string [firstnamephonetic] => string [lastnamephonetic] => string [middlename] => string [alternatename] => string [preferences] => Array ( [0] => Array ( [type] => string [value] => string ) ) [customfields] => Array ( [0] => Array ( [type] => string [value] => string ) ) ) ) 

В нашем случае мы добавили поддержку Https, но мы все еще вызывали Http-версию URL-адреса Moodle. Переход на Https решил проблему.