【问题标题】:Access web api using access token in MS Dynamics using php使用 php 在 MS Dynamics 中使用访问令牌访问 web api
【发布时间】:2016-04-23 10:52:00
【问题描述】:

对于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 访问 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 参考网址reference for web api url

【问题讨论】:

    标签: php api azure microsoft-dynamics


    【解决方案1】:

    请参阅指南Compose HTTP requests and handle errors,如HTTP 标头 部分所示的要求:

    每个请求都应包含 application/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 中检查你的代码。

    【讨论】:

      猜你喜欢
      • 2017-02-13
      • 2023-02-02
      • 2016-03-11
      • 2021-05-15
      • 2019-04-02
      • 1970-01-01
      • 2021-10-12
      • 2019-08-24
      • 2019-04-11
      相关资源
      最近更新 更多