我正在尝试连接到Azure平台以获取响应,主要是为了获取访问office365邮箱时使用的令牌
下面是我正在使用的,但我总是得到NULL响应
需要包括哪些其他CURLOPT_POSTFIELDS,或者需要更改哪些其他内容。
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://login.microsoftonline.com/".$tennantid."/oauth2/v2.0/authorize",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => 'client_id='.$appid.'&response_type=token&scope=https://graph.microsoft.com/User.Read&redirect_uri='.$uri,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/x-www-form-urlencoded'
),
));
$response = curl_exec($curl);
$response_decode = json_decode($response);
var_dump($response_decode);
curl_close($curl);
当我使用下面的方法时,我当前可以取回令牌
$params = array ('client_id' =>$appid,
'redirect_uri' =>$uri,
'response_type' =>'token',
'response_mode' =>'form_post',
'scope' =>'https://graph.microsoft.com/User.Read',
'state' =>$_SESSION['state']);
header ('Location: '.$login_url.'?'.http_build_query ($params));
这样很好。
但我需要执行CURL方法,因为我需要此正在运行的后台cron作业任务
我好像错过了什么?
先谢谢你
1条答案
按热度按时间jv2fixgn1#
一个API文档的链接可能会有帮助。如果没有这个,我就帮不上什么忙。只是一件显而易见的事情。
您使用的是
Content-Type: application/x-www-form-urlencoded
您没有对数据进行编码。来自MDN:
应用程序/x-www-表单-URL编码:键和值以键-值元组的形式进行编码,元组之间用“&”分隔,键和值之间用“=”分隔。键和值中的非字母数字字符都采用percent编码:这就是此类型不适合与二进制数据一起使用的原因(请改用multipart/form-data)
来源:MDN Post data
这意味着您的请求数据应如下所示:
试试看: