2015-07-20 68 views
-1

你好我試圖讓一個公司的工作REST API,但他們正在使用POST和GET請求,我從來沒有見過。我整天在讀書,並且瞭解一些事情。我可能需要使用cUrl或html表單,但是猜測cUrl更容易。 我怎樣才能通過php在cUrl這個職位請求?第一次與PHP使用cUrl

curl -v https://testgw.gopay.cz/api/oauth2/token \ 
-X "POST" \ 
-H "Accept: application/json" \ 
-H "Content-Type: application/x-www-form-urlencoded" \ 
-u "<Client ID>:<Client Secret>" \ 
-d "grant_type=client_credentials&scope=payment-create" 

我試着這個,但它不會正確地發送數據。

$client_id = "000000:111111"; 

function httpPost($url) 
{ 

    $ch = curl_init(); 

    curl_setopt($ch,CURLOPT_URL,$url); 
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    "Content-Type: application/x-www-form-urlencoded", 
    "Accept: application/json", 
    "$client_id", 
    "grant_type=client_credentials&scope=payment-create" 
    )); 

    $output=curl_exec($ch); 

    curl_close($ch); 
    return $output; 

} 

echo httpPost("https://testgw.gopay.cz/api/oauth2/token"); 
+4

'$ client_id'超出範圍。 – Daan

回答

0

$ CLIENT_ID不應該因爲它不發送變量它發送$ CLIENT_ID作爲標題,而不是它的價值

1

的價值。如果這是你的工作,在第一時間在陣列中被引用API,我認爲使用API​​客戶端(如Postman Chrome app)在代碼之前嘗試請求很有用。

,使得涉及您的當前請求,也存在一些問題:

  • 您嘗試獲得令牌,所以創建一個名爲「身份驗證」看起來像一個更好的功能。
  • 對於用戶身份驗證,您可以使用CURLOPT_HTTPAUTH

    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, 'username:password');

  • 「grant_type」 和 「範圍」 是不是頭,但數據,所以通過有這樣的:

    $data = array('grant_type' => 'grant_type_value', 'scope' => 'scope_value'); 
    curl_setopt($request, CURLOPT_CUSTOMREQUEST, "POST"); 
    curl_setopt($request, CURLOPT_POSTFIELDS, http_build_query($data)); 
    

請記住,此函數僅用於處理auth,並且在您必須通過每個請求之後正常返回一個標記。