2017-05-04 8 views
0

CURL/PHP를 사용하여 "장기 거주 액세스 토큰"을 얻으려고하지만 "client_id, client_secret, code, grant_type, redirect_uri에 대한 매개 변수 누락"이라는 오류 메시지가 나타납니다. .OAUTH 토큰 조사 원숭이 v3을 요청할 때 누락 매개 변수

내가 부르는 URL은 내가 전달하려고하는 매개 변수를 명확하게 볼 수있는 곳입니다!

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"의 콘텐츠 유형도 사용하고 있습니다 (아래 참조).

내 CURL 요청 :

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

당신이 당신의 URL에 당신의 매개 변수를 추가하면 GET 요청 매개 변수로 전송 중입니다.

데이터 문자열을 CURL 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

위의 코드는 완벽하게 일했습니다! 도와 줘서 고마워. :) –