Create user using Moodle webservice

匿名 (未验证) 提交于 2019-12-03 01:17:01

问题:

I have tried to create a new user on the Moodle by web service api.

I tried with a example that i found on the github and with another php code

In the both i receive the same response:

"Missing required key in single structure: users"

the response:

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

I try to change the object by a array, but the error continues.

my code:

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

I have a valid token and the user is allowed to use the core_user_create_users function

回答1:

get same problem with required key 'users' solve problem with this =>

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


回答2:

I think You must high the debugging level in your moodle system, I hope you will get more useful information regarding this error, debugging will help you to reach the exact problem. go through following path:

choose Developer level from the debug messages and save the changes



回答3:

I have a similar problem once, in my experience is a problema with $user1->password = 'testpassword1'; Moodle needs a password with one uppercase letter and at least one simbol like / . , - _ etc.

try a new password maybe it works...



回答4:

Do not pass the ID into the user array, as it doesn't accept it as a parameter. For more details, please read the WebService API documentation for creating a user in Moodle.



回答5:

came across the same need today and I used your post to get the code from GitHUB so I guess I'd tell you how I fixed the error:

change your code to the following:

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

The code from GitHUB $user1 is an object. Moodle required an Array.

Below is copied from Moodle's documentation.

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


回答6:

In our case, we added Https support, but we were still calling the Http version of the Moodle url. Changing to Https solved the problem.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!