5

我在做什么:

我正在用 PHP 编写一个自定义程序,它通过 API 从在线 LMS 服务中提取数据。现在,我正在尝试实现可用的单点登录功能。

这部分程序需要在单击按钮时(通过 js 或 php POST 或?)执行对 API 的 GET 请求,并最终将用户浏览器重定向到 API 响应中提供的 URL。

API 允许选择 XML 或 JSON 响应,我更喜欢使用 JSON,但如果需要,将使用 XML。

从关于发出请求的 API 文档中:

本文档中列出的所有请求都应在请求标头中包含内容类型(XML 或 JSON),并以以下基本 Uri 为前缀:https ://api.example.com/v1.svc

例如,以 XML 格式获取用户列表的 Uri 将是:

内容类型:文本/xml

获取https://api.example.com/v1.svc/users?apikey=MY-KEY&source=MY-APP

以下是我要实现的:

如何获取用户的登录密钥

一旦您拥有要登录的用户 ID,您需要向 /users/{user-id} 发出 GET 请求,该请求将返回有关用户的信息。其中包括一个 LoginKey,您可以使用它来将用户的浏览器重定向到。

例如。

获取 https://api.example.com/v1.svc/users/USER-ID?apikey=YOUR_API_KEY&source=sampleapp

来自 API 的响应:

<User>
  <Id>abc12345678</Id>
  <UserName>rich_demo@example.com</UserName>
  <FirstName>Rich</FirstName>
  <LastName>Chetwynd</LastName>
  .....
  <LoginKey>https://demo.example.com/login.aspx?loginkey=xxxzzzyyy777222</LoginKey>
</User>

<LoginKey>对象数据是我需要最终将用户浏览器重定向到的 URL 。

我是使用 API 的新手,并且尝试了很多在发布之前无法使用的方法。如果您知道如何做到这一点,如果您分享您的知识,我将非常感激。

谢谢。

4

1 回答 1

2

从 HTML<form>使用传统的帖子(不是 AJAX)到执行此操作的 PHP 脚本:

if(isset($_POST['userid']))
{
    $userId = (int)$_POST['userid'];

    $obj = simplexml_load_file('https://api.xxx.com/v1.svc/users/' . $userId . '?apikey=YOUR_API_KEY&source=sampleapp');

    if($obj && isset($obj->LoginKey))
    {
        $loginKey = $obj->LoginKey;

        header('Location: ' . $loginKey);
    }
    else
    {
        // failed to load the xml
    }

}

如果你想用 JSON 来做,你可以使用file_get_contents()从 URL 中获取原始 JSON,然后使用json_decode()它来将它变成一个对象。

此外,如果您想通过 AJAX 执行此操作,则必须使用 PHP 回显 URL 而不是尝试重定向,然后让 Javascript 使用window.location.href = '...'

于 2012-05-08T06:20:27.973 回答