2017-05-04 68 views
0

當我試圖獲得我的「長住訪問令牌」使用curl/PHP,但我收到錯誤「缺少了CLIENT_ID,client_secret,代碼,grant_type,REDIRECT_URI參數」 。缺少參數請求Oauth令牌調查猴子V3

我打電話的網址是您可以清楚地看到我想要傳入的參數!

https://api.surveymonkey.net/oauth/token?client_secret= '.urlencode($ client_secret)。' & code ='。urlencode($ short_token)。' & redirect_uri ='。urlencode($ redirect_url)。' & client_id ='。urlencode($ client_id)'。 & grant_type = authorization_code

我也根據文檔(見下文)使用「application/x-www-form-urlencoded」的內容類型。

我捲曲的要求:

function survey_monkey_curl_request($url, $params=[], $request_type = 'get', $access_token) { 

    print_r($url); 

    $ch = curl_init(); 

    $headers = [ 
    "Content-Type: application/x-www-form-urlencoded", 
    "Authorization: bearer " .$access_token 
    ]; 
    $opts = [ 
    CURLOPT_URL => $url, 
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0, 
    CURLOPT_HTTPHEADER => $headers, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_SSL_VERIFYPEER => 0, 
    ]; 
    if ($request_type == 'post') { 
    $opts[CURLOPT_POST] = 1; 
    //$opts[CURLOPT_POSTFIELDS] = json_encode($params); 
    } 
    if ($request_type == 'patch') { 
    $opts[CURLOPT_CUSTOMREQUEST] = "PATCH"; 
    $opts[CURLOPT_POSTFIELDS] = json_encode($params); 
    } 
    curl_setopt_array($ch, $opts); 
    $result = curl_exec($ch); 

    if ($result === false) { 
    curl_close($ch); 
    throw new Exception(curl_error($ch)); 
    } 
    curl_close($ch); 
    return $result; 
} 

我要去哪裏錯了?

回答

2

直接從文檔,它看起來像獲得長期令牌,你需要來發表您的領域:

//Exchange for long-lived token 

curl -i -X POST https://api.surveymonkey.net/oauth/token -d \ 
"client_secret=YOUR_CLIENT_SECRET \ 
&code=AUTH_CODE \ 
&redirect_uri=YOUR_REDIRECT_URI \ 
&client_id=YOUR_CLIENT_ID \ 
&grant_type=authorization_code" 

https://developer.surveymonkey.com/api/v3/?shell#new-authentication

當你添加你的參數到您的網址你正在發送那麼作爲GET請求paramters

你需要把你的數據字符串轉換成捲曲POSTFIELDS和不JSON編碼

PHP的答案

<?php 

$ch = curl_init(); 

$data = [ 
    'client_secret' => $YOUR_CLIENT_SECRET, 
    'code' => $AUTH_CODE, 
    'redirect_url' => $YOUR_REDIRECT_URI, 
    'client_id' => $YOUR_CLIENT_ID, 
    'grant_type' => 'authorization_code' 
];//set your data as an array 

$headers = [ 
    "Content-Type: application/x-www-form-urlencoded", 
    "Authorization: bearer " . $access_token 
]; 
$opts = [ 
    CURLOPT_URL => $url, 
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_0, 
    CURLOPT_HTTPHEADER => $headers, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_SSL_VERIFYPEER => 0, 
]; 
if ($request_type == 'post') { 
    $opts[CURLOPT_POST] = 1; 
    $opts[CURLOPT_POSTFIELDS] = http_build_query($data);// this will build your data string from the array 
} 

curl_setopt_array($ch, $opts); 
$result = curl_exec($ch); 
curl_close($ch); 
return $result; 
+0

謝謝 - 你的反應是有道理的。我會在早上試一試,並報告/接受你的答案,如果它的工作:) –

+0

上述代碼工作完美!非常感謝你的幫助:) –