За Предыдущий вопрос об учетной записи Azure, Я могу создать приложение, используя учетную запись Azure.
Теперь я могу получить код авторизации ниже URL:
Код авторизации
Из 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 );
Теперь я пытаюсь получить доступ к веб-API с помощью этого access_token, я не смог получить результат.
Например:
$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);
Я получаю пустой ответ. Теперь я должен знать, как получить доступ к веб-API с помощью токена доступа.
Когда я пытаюсь запустить вручную https://domain/api/data/v8.0/contacts
Я могу получить все контакты в моем crm. Но когда я пытаюсь получить к нему доступ через access_token с использованием php, он возвращается пустым.
URL ссылки на веб-API : ссылка для веб-API URL
Обратитесь к руководству Составлять HTTP-запросы и обрабатывать ошибки, как требования, указанные на Заголовки HTTP раздел:
Каждый запрос должен включать значение заголовка Accept application / json, даже если тело ответа не ожидается.
И в вашем 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 без тела ответа, вы можете проверить свой код в веб-API.
Других решений пока нет …