2016-06-26 31 views
0

我正在進行登錄身份驗證,並且無法識別失敗。通過AJAX,我將用戶名和密碼傳遞給login.php,該用戶名和密碼調用PHP REST API來驗證憑據,並使用包含帳戶狀態和消息的JSON響應,並將消息推送回UI。故障調試由file_get_contents調用的PHP REST API

我打電話給api使用file_get_contents。 apiURL是localhost/api/v1/login。

的login.php

$data = array('username' => $username, 'password' => $password); 
    $options = ["http" => 
     ["method" => "POST", 
      "header" => "Content-Type: application/json", 
      "content" => json_encode($data) 
      ] 
     ]; 

    // Call API 
    $apiResponse = json_decode(file_get_contents($apiUrl, NULL, stream_context_create($options))); 

的問題似乎是我的API調用,但我想不出是什麼問題。

API使用郵遞員Chrome擴展程序沒有問題

$response = array("status" => "active", "message" => "success"); 

      header('Content-Type: application/json'); 
      echo json_encode($response); 

測試我的API發送和接收JSON因此API代碼工作。如果我在login.php中執行var_dump($apiResponse),則從API返回的值爲NULL。

有關爲什麼此值爲NULL的任何想法?我是否錯誤地調用了api端點?

+0

嘗試使用'應用程序/ x-WWW的形式urlencoded'而不是'應用/ json'並且不要忘記用'「content」=> http_build_query($ data)替換'「content」=> json_encode($ data)'' –

+0

感謝您的反饋。我找出了這個問題。我沒有意識到json_decode不會自動將JSON轉換爲數組,直到通過將第二個arg設置爲true來告訴它。我是作爲一個關聯數組來操作apiResponse的。一旦我將其設置爲true,它就解決了這個問題。 – Runicode

回答

0
$data = http_build_query(
    array('username' => $username, 'password' => $password) 
); 

$opts = array('http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $data 
    ) 
); 

$apiResponse = json_decode(file_get_contents($apiUrl, false, stream_context_create($opts))); 

這可能會幫助你,儘管我還沒有測試的代碼

REF:phpstackoverflow