我在做什么:
我正在用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 请求,它将返回有关 用户。其中包括一个登录密钥,您可以使用它来重定向 用户的浏览器。
例如。
获取 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 的新手,并且尝试了大量在发布之前无法开始工作的方法。如果您知道如何实现这一目标,如果您分享您的知识,我将不胜感激。
谢谢。
> 从 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 = '...'