2014-10-20 28 views
2

我想用api密鑰和祕密使用laravel和guzzle建立一個API。我使用laravel構建api和客戶端。Guzzle文章給我錯誤500,得到正常工作

我試圖訪問一個簡單的控制器來獲取數據庫中的用戶列表的JSON時遇到問題。

GuzzleHttp \ Exception \ ServerException (500) 

Server error response [url] http://myapi.api/api/v1/users [status code] 500 [reason phrase] Internal Server Error 

在我的客戶:

它時,我不使用認證工作正常,當我做東陽我需要改變使用POST方法,以便API獲取的祕密和APP_ID失敗
$_app_id = 'APP001'; 
$_app_key = '28e336ac6c9423d946ba02d19c6a2632'; 
$_api_url = 'http://myapi.api/api/v1/users'; 
$enc_request = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $_app_key, json_encode($request_params), MCRYPT_MODE_ECB)); 
$params = array(); 
$params['enc_request'] = $enc_request; 
$params['app_id'] = $_app_id; 

$client = new GuzzleHttp\Client(); 
$result = $client->post($_api_url, array(
    'body' => $params 
)); 
$res=$result->json(); 
var_dump($res); 

在我的API:

Route::group(array('prefix' => 'api/v1'), function(){ 
    Route::resource('users', 'UsersController'); 
}); 
Route::filter('my.filter', function() 
{ 
    $applications = array(
     'APP001' => '28e336ac6c9423d946ba02d19c6a2632', //randomly generated app key 
    ); 
    try { 

     $enc_request = $_REQUEST['enc_request']; 
     $app_id = $_REQUEST['app_id']; 

     if(!isset($applications[$app_id])) { 
      throw new Exception('Application does not exist!'); 
     } 

     $params = json_decode(trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $applications[$app_id], base64_decode($enc_request), MCRYPT_MODE_ECB))); 

     if($params == false){ 
      throw new Exception('Request is not valid'); 
      $result['success'] = false; 
     }else{ 
      $result['success'] = true; 
     } 

    } catch(Exception $e) { 
     $result = array(); 
     $result['success'] = false; 
     $result['errormsg'] = $e->getMessage(); 
    } 

    if($result['success']==false){ 
     return Response::make('Unauthorized', 401); 
     //I have tested and the APP never gets inside here, authentication is correct 
    } 
}); 

我的控制器:

class UsersController extends BaseController { 
    public function index() 
    { 
     $users = User::orderBy('username', 'asc'); 

     return Response::json(array(
      'error' => false, 
      'users' => $users->get()->toArray()), 
      200 
     ); 
    } 
} 

如果我刪除過濾器,只需更改帖子以獲取我的客戶端,我可以看到來自我的用戶控制器的json。只要我將其更改回發佈,我再次遇到我的錯誤。

回答

0

我結束了改變身體查詢,它工作正常,因爲它可以使用資源類和guzzle在同一時間。

0

路由資源使用存儲方法發佈到與索引方法相同的URI。如here中所述,並滾動到「由資源控制器處理的操作」部分。

+0

我需要能夠利用資源類,我的應用程序將添加/插入/選擇...使用這些網址,我該如何使這項工作? – 2014-10-20 16:39:06

+0

您可以通過單獨定義路線來完成這項工作。但我的建議是使用資源控制器,正如文檔所述,因爲這將導致更加安寧的解決方案。 – 2014-10-20 16:44:49

+0

是的,我明白了,那麼你如何建議我爲api客戶端進行身份驗證?如果不在過濾器中,我應該在哪裏做? – 2014-10-20 16:47:25

相關問題