2015-09-28 5 views
2

Я пытаюсь получить все контакты от текущего пользователя, подключенного через Oauth2 Microsoft Online, я правильно сделал Oauth2, но когда я вызываю URL-адрес для api http://outlook.office.com/api/v1.0/me/contacts, я получил пустой и это в заголовке:Импортировать контакт из Outlook api access запрещен

HTTP/1.1 403 Forbidden 
Cache-Control: private 
Content-Length: 0 
Server: Microsoft-IIS/8.5 
Set-Cookie: ClientId=QPAIYPSBRKGUWYWEQFBAA; expires=Tue, 27-Sep-2016 12:07:04 GMT; path=/; secure; HttpOnly 
request-id: d24bcf29-372e-4bbc-bb7c-f753cde1d1dc 
X-CasErrorCode: UserNotFound 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
X-FEServer: AMSPR03CA0038 

Больше ничего.

Вот мой код на PHP со всем для OAuth. Использовать код Laravel :)

public function outlook(Request $request) 
{ 
    if($request->session()->has('tokenOutlook')) 
    { 
     return redirect('/contact/outlook/all'); 
    } 
    else 
    { 
     if(!$request->has('code')) 
     { 
      return redirect("https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=".env('APPIDOUTLOOK')."&redirect_uri=".secure_url('/contact/outlook')."&response_type=code&scope=".urlencode("https://outlook.office.com/Contacts.Read")); 
     } 
     else 
     { 
      $curl = curl_init("https://login.microsoftonline.com/common/oauth2/v2.0/token"); 
      curl_setopt($curl, CURLOPT_POST, true); 
      $postdata = array(
       "client_id" => env('APPIDOUTLOOK'), 
       "code" => $request->get('code'), 
       "grant_type"=>"authorization_code", 
       "scope" => urlencode("https://outlook.office.com/Contacts.Read"), 
       "client_secret" => env('APPSECRETOUTLOOK') 
      ); 
      $fields_string = ''; 
      foreach($postdata as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
      curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string); 

      curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
      curl_setopt($curl, CURLOPT_TIMEOUT, 10); 
      $oauth_token = curl_exec($curl); 
      curl_close($curl); 
      $oauth_token = json_decode($oauth_token); 
      //dd($oauth_token) 
      $request->session()->put('tokenOutlook', $oauth_token->access_token); 
      return redirect('/contact/outlook/all'); 
     } 
    } 
} 
public function showOutlook(Request $request) 
{ 
    if($request->session()->has('tokenOutlook')) 
    { 
     //dd($request->session()->get('tokenOutlook')); 
     $curl = curl_init('https://outlook.office.com/api/v1.0/me/contacts'); 
     curl_setopt($curl, CURLOPT_HEADER, true); 
     curl_setopt($curl, CURLOPT_VERBOSE, true); 

     curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$request->session()->get('tokenOutlook'))); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($curl, CURLOPT_TIMEOUT, 10); 
     $contacts = curl_exec($curl); 
     $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); 
     $header = substr($contacts, 0, $header_size); 
     //var_dump($header); 
     //dd($curl); 
     curl_close($curl); 
     $contacts = json_decode($contacts); 
     $array_contacts = []; 

     return $array_contacts; 
    } 
    else 
    { 
     return redirect('/contact/outlook'); 
    } 
} 

Почему я получаю ошибку UserNotFound с/me? :(

+0

Убедитесь, что пользователь ОК, перейдя к oauthplay.azurewebsites.net. Попробуйте войти в систему и делать контакты API вызовы. –

+0

Песочница отлично работает со мной, но я разрешаю свою проблему, добавив в postdata «redirect_uri» => secure_url ('/ contact/outlook') ... – Roadirsh

+0

Ах, недостающее перенаправление. Вы должны указать это как ответ :) –

ответ

0

я решил мою проблему, добавив redirect_uri в почтовых данных ...

$postdata = array(
      "client_id" => env('APPIDOUTLOOK'), 
      "code" => $request->get('code'), 
      "grant_type"=>"authorization_code", 
      "scope" => urlencode("https://outlook.office.com/Contacts.Read"), 
      "client_secret" => env('APPSECRETOUTLOOK') 
      "redirect_uri" => secure_url('/contact/outlook') 
     ); 
Смежные вопросы