对于之前关于 Azure 帐户的问题,我可以使用 azure 帐户创建一个应用。
现在我可以从下面的 url 获取身份验证代码:Auth_code
从Auth_code我们可以通过以下方式获取访问令牌:
$auth_code = $_GET['code'];
$result = access($auth_code);
function access($auth_code){
$redirectUri = 'https://XXXX /authorize.php';
$token_request_data = array (
"grant_type" => "authorization_code",
"code" => $auth_code,
"redirect_uri" => $redirectUri,
"client_id" => "client_id",
"client_secret" => "client_secret",
"resource" =>"resource" (From manifest in azure)
);
$token_request_body = http_build_query ( $token_request_data );
$curl = curl_init ( 'https://login.windows.net/common/oauth2/token' );
curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $curl, CURLOPT_POST, true );
curl_setopt ( $curl, CURLOPT_POSTFIELDS, $token_request_body );
curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER,false);
$response = curl_exec ( $curl );
$res = json_decode($response);
curl_close ( $curl );
现在我正在尝试使用该access_token访问 Web api,但我无法得到结果。例如:
$authHeader = 'Authorization:Bearer access_toke';
$ch = curl_init();
$url = 'https://domain/api/data/v8.0/contacts';
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_POST, false);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array($authHeader, 'Content- Type:application/json'));
$result = curl_exec($curl);
echo "<pre>";print_r($result);exit;
curl_close($curl);
我得到空洞的回应。现在,我必须知道如何使用访问令牌访问 Web API。
当我尝试手动运行https://domain/api/data/v8.0/contacts
时,我可以获取crm中的所有联系人。但是当我尝试使用 php access_token访问它时,它返回为空。
: Web API URL 的引用
请参阅指南 撰写 HTTP 请求和处理错误,如 HTTP 标头部分所示的要求:
每个请求都应包含应用程序/json 的 Accept 标头值,即使不需要响应正文也是如此。
而且你的PHP脚本中有多余的空白curl_setopt($curl, CURLOPT_HTTPHEADER, array($authHeader, 'Content- Type:application/json'));
您可以删除Content-Type
中的空白,然后重试。
顺便说一下,你可以利用Fiddler来捕获来自PHP客户端的请求。我们通过该工具获取响应正文内容和请求状态代码。我们可以将状态代码与 https://msdn.microsoft.com/en-us/library/gg334391.aspx#bkmk_statusCodes 处的列表相匹配。如果代码始终为 200 而不带响应正文,则可以在 Web API 中检查代码。