【问题标题】:Connecting moodle api through web service通过网络服务连接moodle api
【发布时间】:2023-08-13 08:16:02
【问题描述】:

让我解释一下:我的目的是从网络应用创建moodle用户

我正在 Tomcat 8.0.15.0 上实现一个 Web 应用程序。也就是说,我在服务器端使用 java servlet。许多 JSP 文件和 javascript(其中大部分在 jQuery 中)驻留在客户端。

另一方面,在另一台服务器上,我有一个测试 moodle 安装。通过site-administration> plugins> web services> external services,我创建了一个启用core_user_create_users功能的ws。还创建了一个token来访问这个ws,并将admin用户作为授权用户。

然后,在 Chrome 上输入以下网址:

https://mysyte.com/webservice/rest/server.php?wstoken=780f8b3a1164163d4dc00a757071194e&wsfunction=core_user_create_users&moodlewsrestformat=json&users[0][username]=testuser&usr[ [email] =john@smith.com&users [0] [password] = XXXXXX

它奏效了。它返回一个空白页,带有文本

[{"id": 1, "username": "testuser"}]

从而在moodle中创建一个用户。

我的问题是:我怎样才能通过 java?、javascript? 或 jQuery 更好地做到这一点。

如果不是,从 PHP,我想我从 java、javascript 或 jQuery 调用它没有问题。

我的错误提示:在我使用的应用程序的另一部分,在 javascript 中,调用 $.getJSON() 成功。这就是为什么我认为在这种情况下也会为我服务。但是现在没有成功,当 Mozilla 调试器到达调用时,它会挂起。

欢迎任何反馈。

电话看起来像


function create_moodle_user(username,firstname,lastname,email,password) {

    var url = "https://mysyte.com/webservice/rest/server.php?"
            + "wstoken=780f8b3a1164163d4dc00a757071194e" + "&" 
            + "wsfunction=core_user_create_users"        + "&" 
            + "moodlewsrestformat=json"                  + "&"
            + "users[0][username]=" + username           + "&"
            + "users[0][firstname]=" + firstname         + "&" 
            + "users[0][lastname]=" + lastname           + "&"
            + "users[0][email]=" + email                 + "&"
            + "users[0][password]=" + password;
    $.getJSON(url, function(data) {             // should return [{"id":4,"username":"testuser"}]                       

    // this point is never reached

        if (data.length < 64) {                  
        }
        else {
        }
    });                         
}

【问题讨论】:

  • 如果链接正常,那么使用 ajax 应该是一个解决方案......除非你没有搞砸电话

标签: javascript java php jquery moodle-api


【解决方案1】:

最后,它通过更改调用和传递参数的方式来工作。


function create_moodle_user(u,f,l,e,fn) {
  var domainname = 'https://my.moodle.site.com';

  var data = {
    wstoken: '780f8b3a1164163d4dc00a757071194e'
    wsfunction: 'core_user_create_users'
    moodlewsrestformat: 'json',
    users: [
        {
            username:u,
            password:'xxxxxxxx',
            email:e,
            firstname:f,
            lastname:l
        }
    ]
  };
  var response = $.ajax({
    type: 'GET',
    data: data,
    url: domainname + '/webservice/rest/server.php'
  });
  // pass the function parameter
  response.done(fn);
}

这成功了!

我现在的问题是获取用户信息,因为我不知道如何从 core_user_get_users_by_field 获取响应。

这就是我所拥有的:

function get_moodle_user(u,fn) {
  var domainname = 'https://my.moodle.site.com';

  var data = {
    wstoken: '780f8b3a1164163d4dc00a757071194e'
    wsfunction: 'core_user_get_users_by_field'
    moodlewsrestformat: 'json',
    field: 'username',
    username:u
  };

  var response = $.ajax({
    type: 'GET',
    data: data,
    url: domainname + '/webservice/rest/server.php'
  });
  
  console.log(response);        // this does not show the result data

  // pass the function parameter
  response.done(fn);
}

有什么想法吗?

【讨论】:

  • 一种选择是做你自己的custom-moodle-api。主要是查询数据库中您需要的任何字段(基于 id)并通过自己的服务公开(json ...通过帖子访问的常规链接)。可以使用预定义的令牌(甚至是有效的用户/通行证)保护 api 访问。在 wordpress 上使用这种方式,因为它更方便,而不是依赖于它们暴露的字段(更多的 db-fields 可能来自各种插件,所以很容易看到它到底需要什么)
最近更新 更多