我如何使用php curl代替header('Location :)返回令牌?

时间:2019-04-08 16:19:18

标签: curl oauth-2.0 token exact-online

我有一个从我的站点到Exact Online的API链接,并且可以正常工作。授权的第一步是从Exact Online网站返回令牌。代码使用header()来执行此操作,如下面的代码所示。但是,当我从另一个站点重定向到我的站点时(即,当我尝试让另一个网站通过我的网站访问API查询时),我网站上的header()重定向(返回令牌)不起作用。标记查询)。我怀疑如果将我网站上的header()替换为CURL请求,可能会起作用,但是到目前为止,我还不能这样做-有人可以帮我吗?

这是有效的代码:

if (!isset($_GET['code'])) {
// If there is no token, this returns the token with the 'code' parameter
$url = "https://start.exactonline.co.uk/api/oauth2/auth";
$params = array(
    "response_type" => "code",
    "client_id" => $clientId,
    "redirect_uri" => $redirectUri
    );
$request_to = $url . '?' . http_build_query($params);
header("Location: " . $request_to);
die('Redirect');
}

我尝试了一下,但没有成功:

$curlOpt = array();
$curlOpt[CURLOPT_URL] = 'https://start.exactonline.co.uk/api/oauth2/auth?client_id=XXXXXXXXX&redirect_uri=ZZZZZZZZ';
$curlOpt[CURLOPT_RETURNTRANSFER] = FALSE;
$curlOpt[CURLOPT_SSL_VERIFYPEER] = FALSE;
$curlOpt[CURLOPT_FOLLOWLOCATION] = TRUE;
$curlOpt[CURLOPT_POSTFIELDS] = array(
    'response_type' => 'code');
$curlHandle = curl_init();
curl_setopt_array($curlHandle, $curlOpt);
curl_exec($curlHandle);

我怀疑我的CURL请求不正确,但是我不知道如何解决它,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

对auth-endpoint的调用始终是常规GET(如您的第一个示例)。这将显示登录页面。不管您来自哪个网站。