使用 php 在 MS Dynamics 中使用访问令牌访问网络 api
Access web api using access token in MS Dynamics using php
对于Previous question about Azure account,我可以使用 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 访问网络 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);
我得到的是空响应。现在我必须知道如何使用访问令牌访问网络 API。
当我尝试 运行 手动 https://domain/api/data/v8.0/contacts
时,当我尝试通过 access_token 使用 [=38= 访问它时,我可以在我的 crm.But 中获取所有联系人], 它 returns 是空的。
Web api 参考 url : reference for web api url
请参阅指南 Compose HTTP requests and handle errors,如 HTTP headers 部分所示的要求:
Every request should include the Accept header value of application/json, even when no response body is expected.
你的 PHP 脚本中 curl_setopt($curl, CURLOPT_HTTPHEADER, array($authHeader, 'Content- Type:application/json'));
有多余的空白
您可以将 Content-Type
中的空格去掉,然后重试。
顺便说一句,您可以利用 Fiddler 捕获来自 PHP 客户端的请求。我们通过该工具获得响应 body 内容和请求状态代码。我们可以将状态代码与 https://msdn.microsoft.com/en-us/library/gg334391.aspx#bkmk_statusCodes 处的列表进行匹配。如果代码一直是200没有反应body,你可以在网页上查看你的代码api。
对于Previous question about Azure account,我可以使用 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 访问网络 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);
我得到的是空响应。现在我必须知道如何使用访问令牌访问网络 API。
当我尝试 运行 手动 https://domain/api/data/v8.0/contacts
时,当我尝试通过 access_token 使用 [=38= 访问它时,我可以在我的 crm.But 中获取所有联系人], 它 returns 是空的。
Web api 参考 url : reference for web api url
请参阅指南 Compose HTTP requests and handle errors,如 HTTP headers 部分所示的要求:
Every request should include the Accept header value of application/json, even when no response body is expected.
你的 PHP 脚本中 curl_setopt($curl, CURLOPT_HTTPHEADER, array($authHeader, 'Content- Type:application/json'));
有多余的空白
您可以将 Content-Type
中的空格去掉,然后重试。
顺便说一句,您可以利用 Fiddler 捕获来自 PHP 客户端的请求。我们通过该工具获得响应 body 内容和请求状态代码。我们可以将状态代码与 https://msdn.microsoft.com/en-us/library/gg334391.aspx#bkmk_statusCodes 处的列表进行匹配。如果代码一直是200没有反应body,你可以在网页上查看你的代码api。